javascript - 鼠标滚轮触发时多次触发函数
问题描述
我想创建一个单页和单节网站。该部分有一个分页,当鼠标向上/向下滚动时会更改页面。
我尝试实现鼠标滚轮事件,但该事件不仅触发了多次,而且在一次向下/向上滚动事件中多次更改了我的页码。我已经检查了滚动和鼠标滚轮事件,但每个事件总是不仅触发一次,而且在一个滚动事件上多次触发
var page = 1;
$(window).bind('mousewheel', function(event) {
if (event.originalEvent.wheelDelta >= 0) {
$('#page-number').html(page++);
console.log('Scroll up');
} else {
$('#page-number').html(page--);
console.log('Scroll down');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>Page <span id="page-number">1</span></div>
我希望当鼠标向上/向下滚动不多次时,页面只会更改一次。
解决方案
您可以使用lodash.js中的debounce或throttle函数。
例子:
let page = 1;
const mouseWheelHandler = (event) => {
if (event.originalEvent.wheelDelta >= 0) {
$('#page-number').html(page++);
console.log('Scroll up');
} else {
$('#page-number').html(page--);
console.log('Scroll down');
}
}
// will be called in a half of second after user stops to scroll
$(window).bind('mousewheel', _.debounce((event) => mouseWheelHandler(event), 500));
// will be called once in a second while user keeps scrolling
// $(window).bind('mousewheel', _.throttle((event) => mouseWheelHandler(event)), 1000));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>
<div>Page <span id="page-number">1</span></div>
推荐阅读
- javascript - 无法为 HTML 中的特定 DIV 添加背景图像
- r - How to aggregate the data with 5-min-interval for each group?
- java - How make code that uses global dynamic properties unit testable?
- javascript - 弹性滑块。根据单击的图像动态启动滑块
- pyspark - pyspark 结构化流(2.4.2) - foreach 接收器
- python-3.x - 卡尔曼滤波器返回放大的估计值
- php - 如何删除标签
- bash - 如何通过 bash/shell 读取组合列表?
- javascript - 为什么 JQuery 不在每次迭代时创建一个新的 div?
- javascript - 如何在 JavaScript 中创建指针