【问题标题】:Scroll up drag in web page在网页中向上滚动拖动
【发布时间】:2022-01-18 18:44:19
【问题描述】:

我希望在选择 div 时向上滚动页面,因此目标是拖动 div 并将页面向上移动。 scoll down 的效果很奇怪。

列出的 angular 或 html 是否有问题?

(我不想使用 Jquery)

 <div class="panel panel-default">
  <div class="panel-body">
    <p class="h4">Commandes</p>
    <div class="row">
      <div class="col-md-12 col-xs-12 text-right" draggable="true">
        <button type="button" (click)="addCommande()" class="btn btn-labeled btn-purple m-l-4">
          <span class="btn-label"><i class="fa fa-plus"></i></span><span class="hidden-xs">Ajouter une commande</span>
        </button>

      </div>
    </div>...

【问题讨论】:

  • 你能添加一个代码 sn-p 或某种小提琴吗?很难猜出你做了什么:)
  • 非常感谢您的回答,但我认为这里的代码不会很有趣。基本上,我单击一行(div)并进行拖放(到目前为止一切正常),但是当我保持“单击”模式时,我想转到页面顶部。它向下工作,而不是向上工作。为了让它工作,我必须使用滚动条的向上箭头。我不知道我是否很好地解释了我的问题......谢谢
  • 它仍然可以提供帮助。有时事情的发生是因为我们有错误,而且它会帮助我(和社区)给你一个完整的答案,以最好的方式满足你的需求
  • 是的,你是对的,我会尝试详细说明,但我有很多代码,我必须尝试定位。
  • 我们仍然需要你的 JS。无论如何,我添加了一个伪代码作为答案。让我知道它是否有帮助:)

标签: html angular bootstrap-4


【解决方案1】:

编辑

根据我们在 cmets 部分的讨论添加解决方案

我仍然不确定我是否达到了你的最终目标,但我希望我做到了

[第一种解决方案]
将 `scrollPositionRestoration: 'enabled'` 添加到 `app-routing.module.ts` 的 `RouterModule` 中:
 RouterModule.forRoot(routes, {scrollPositionRestoration: 'enabled'})
[第二个解决方案]
尝试实现这个逻辑]
export class ScrollToTopComponent implements OnInit {
  windowScrolled: boolean;
  constructor(@Inject(DOCUMENT) private document: Document) {}
  @HostListener("window:scroll", [])
  onWindowScroll() {
      if (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop > 100) {
          this.windowScrolled = true;
      } 
     else if (this.windowScrolled && window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop < 10) {
          this.windowScrolled = false;
      }
  }
  scrollToTop() {
      (function smoothscroll() {
          var currentScroll = document.documentElement.scrollTop || document.body.scrollTop;
          if (currentScroll > 0) {
              window.requestAnimationFrame(smoothscroll);
              window.scrollTo(0, currentScroll - (currentScroll / 8));
          }
      })();
  }
  ngOnInit() {}
[第三种解决方案]
如果 all 失败,则在顶部(或所需滚动到位置)创建一些空的 HTML 元素(例如:div),id="top":
<div id="top"></div>

在组件中:

ngAfterViewInit() {
    // Hack: Scrolls to top of Page after page view initialized
    let top = document.getElementById('top');
    if (top !== null) {
      top.scrollIntoView();
      top = null;
    }
  }

关于您如何构建代码,我没有太多工作要做,但我希望这可以解决它(它会使可拖动项目滚动您的屏幕):)

var stop = true;
document.quertSelector(".draggable").on("drag", function (e) {

    stop = true;

    if (e.originalEvent.clientY < 150) {
        stop = false;
        scroll(-1)
    }

    if (e.originalEvent.clientY > ($(window).height() - 150)) {
        stop = false;
        scroll(1)
    }

});

document.querySelector(".draggable").on("dragend", function (e) {
     stop = true;
});

var scroll = function (step) {
    var scrollY = window.pageYOffset;
    window.pageYOffset(scrollY + step);
    if (!stop) {
        setTimeout(function () { scroll(step) }, 20);
    }
}

【讨论】:

  • 我认为我的问题可能被问错了,事实上我试图通过点击一个元素来向上滚动页面。事实上,当我将元素粘贴到导航栏时,我希望页面向上滚动。与页脚的原理完全相同。我一直认为它是自我管理的,但显然不是。
  • 我很困惑,您是想单击一个按钮向上滚动页面(类似于“滚动到顶部”按钮),还是如果将元素拖到顶部就能够向上滚动页面你的视口?
  • 不要混淆我必须解释得很糟糕,这是我想要实现我的解决方案的逻辑。 stackoverflow.com/questions/48048299/…
  • 那么当你点击一个 div 时你想滚动到页面顶部的新内容?
  • 如果你能解决它,请告诉我
猜你喜欢
  • 2022-12-20
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
相关资源
最近更新 更多