在网页中向上滚动拖动。
问题出现的原因:
用户想要实现一个点击元素后页面向上滚动的效果,类似于点击底部链接时页面回到顶部的效果。
解决方法:
以下是几种解决方法:
第一种解决方法:
在`app-routing.module.ts`文件的`RouterModule`中添加`scrollPositionRestoration: 'enabled'`:
RouterModule.forRoot(routes, {scrollPositionRestoration: 'enabled'})
第二种解决方法:
实现以下逻辑:
export class ScrollToTopComponent implements OnInit { windowScrolled: boolean; constructor(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() {} }
第三种解决方法:
如果以上解决方法都无效,则在页面的顶部(或所需滚动到的位置)添加一个空的HTML元素,例如`div`,并设置其id为"top":
在组件中添加以下代码:
ngAfterViewInit() { 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); } }
以上是根据讨论和提供的解决方案整理的文章,希望能解决问题。