自去年(2018年)以来,我已经看到许多网站使用某种版本的“软/平滑”人工滚动。我一直很想知道它是如何工作的,但是到目前为止还没有运气。
可以从以下网站上体验效果(只需向下滚动到网站即可体验): https://stockdutchdesign.com/en/home/或https://curenails.co/en-US/home
我一直尝试的方法是禁用网站的滚动,并收听 wheel 事件,然后使用window.scrollTo()手动滚动网站。
这是我使用Angular的代码:
// Listens to the scroll of the website
@HostListener('window:wheel', ['$event'])
scroll_event($event) {
$event.preventDefault();
window.scrollTo(0, Math.E * 2 * this.scrollAmount);
// Scrolls up or down
if ($event.deltaY > 0) {
this.scrollAmount++;
} else {
this.scrollAmount--;
}
}
我用许多不同的方式搜索了这个问题,但没有找到答案。每个人都在使用它很奇怪,但没人在谈论它。
感谢您的帮助,谢谢!
编辑(澄清):
我的目标不是在用户向下滚动网站时对内容进行动画处理(有很多JS库可以帮助我实现此目的)。我要寻找的是用户开始向下滚动网站时所经历的“摩擦”和“动量”。
答案 0 :(得分:0)
我找到了解决自己问题的方法!
我做了一些更深入的研究,发现一个名为 Smooth Scrollbar 的插件完全可以满足我的需求。
我使用Angular v7.2.5实现它的方式
import { Component, OnInit, ViewChild, ElementRef} from '@angular/core';
// Smooth Scrollbar
import Scrollbar from 'smooth-scrollbar';
import overscroll from 'smooth-scrollbar/plugins/overscroll';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.sass']
})
export class AppComponent implements OnInit {
@ViewChild('contentCylinder') ContentCylinder: ElementRef;
constructor() {}
ngOnInit() {
// Adds the overscroll Plugin
Scrollbar.use(overscroll);
// Initializes the smooth scroll
const SmoothScroll = Scrollbar.init(this.ContentCylinder.nativeElement, {
damping: 0.03,
plugins: {
overscroll: true
}
});
}
}