在JavaScript中滚动摩擦和动量

问题描述 投票:2回答:1

从去年(2018年)开始,我看到许多网站使用某种版本的“软/平滑”人工滚动。我一直非常好奇地弄清楚它是如何工作但到目前为止没有运气。

这些网站可以体验到这种效果(只需向下滚动到网站即可体验):https://stockdutchdesign.com/en/home/https://curenails.co/en-US/home

我试图这样做的方法是禁用网站的滚动,然后听取滚轮事件,然后使用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库可以帮助我)。我正在寻找的是用户在开始向下滚动网站时所经历的“摩擦”和“动力”。

javascript angular scroll user-experience
1个回答
0
投票

我找到了自己的问题的解决方案!

我做了一些更深入的研究,我找到了一个名为Smooth Scrollbar的插件,它完全符合我的需要。

Visit Smooth Scrollbar's Page

我使用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
            }
        });

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.