javascript - Firefox 中的鼠标“滚轮”事件在完全滚动时冻结,但在 Chrome 中没有
问题描述
我对 Firefox 的鼠标事件有疑问。我想像 Fullpage.js 那样创建一个由幻灯片组成的网站,但我不想使用它,我选择自己实现该系统。但在 Firefox 中,滚动事件似乎会因几个触发的鼠标滚轮事件而停止,因此会冻结动画。
我制作了一个 Angular 指令来触发“轮子”事件,并以节流时间调用定义滚动方向的函数。
然后,我创建了一个调用该指令并定义如何处理其结果的组件。
这就是我的指令的工作方式
@Directive({ selector: '[appMouseWheel]' })
export class MouseWheelDirective implements OnInit {
@Output() mouseWheelUp = new EventEmitter();
@Output() mouseWheelDown = new EventEmitter();
private mouse = new Subject<any>();
private mouseObs = this.mouse.asObservable();
@HostListener('wheel', ['$event']) onMouseWheel(event: any) {
console.log('debounce');
event.preventDefault();
this.mouse.next(event);
}
public ngOnInit() {
this.mouseObs.pipe(throttleTime(1000)).subscribe(x => this.mouseWheelFunc(x));
}
public mouseWheelFunc(event: any) {
const delta = Math.max(-1, Math.min(1, (-event.deltaY || -event.detail)));
if (delta > 0) {
this.mouseWheelUp.emit(event);
} else if (delta < 0) {
this.mouseWheelDown.emit(event);
}
if (event.preventDefault) {
event.preventDefault();
}
}
}
它与 Chrome 完美配合,但与 Firefox 一起冻结,您可以在这里看到:http: //ukeep.monteil.co
如果有人有答案,我将不胜感激!
解决方案
推荐阅读
- python - 有 dictionary.get 什么都不返回
- lua - 如何使用参数?
- google-cloud-platform - 谷歌云 gcloud 为服务帐户电子邮件启用 API 服务
- scroll - 在 PowerShell ISE 控制台上以编程方式向上滚动
- elasticsearch - Elasticsearch:通过查询响应删除的故障对象的形状/模型是什么?
- html5-canvas - 为 Spritefonts 提供 canvas2d 图像色调
- python - uvicorn 抑制了 gelf 驱动程序的 python 系统日志
- python - 使用语音识别python中的数字(整数)
- excel - Pivotcache 运行时错误:VBA 中的类型不匹配
- azure - 使用事件合成进行语音翻译执行 python 代码的问题