我有一个从鼠标滚轮滚动开始的函数,但是,如果我做一个更长的滚动,它执行2-3次。所以,如果它在2秒内被调用超过1次,我必须找到一种方法来阻止它运行。有什么想法吗?
PS :这是我的功能。如果你知道一个更好的方式开始滚动,而不考虑它是多长时间是滚动,我也会感谢它。
if (window.addEventListener) {
// IE9, Chrome, Safari, Opera
window.addEventListener("mousewheel", MouseWheelHandler, false);
// Firefox
window.addEventListener("DOMMouseScroll", MouseWheelHandler, false);
}
// IE 6/7/8
var s = 0;
function MouseWheelHandler(e) {
// cross-browser wheel delta
var e = window.event || e; // old IE support
var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));
e.preventDefault();
...
}更新:我根据我在评论和回答中读到的想法制定了我自己的代码版本。就是这样:
function MouseWheelHandler(e) {
var e = window.event || e;
// cross-browser wheel delta
// old IE support
var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));
e.preventDefault();
GoUpDown(delta,e);
}
function GoUpDown(delta,e) {
if(timer ==0){ timer =1;
setTimeout(function () {timer =0;},4200);
/*function stuff*/
}发布于 2014-09-26 20:36:27
一种从Morten OC的代码中修改的节流方式
http://jsfiddle.net/43sgpme7/13/
var interval = 2000;
var count = 0;
function action() {
count++;
$("p").html(new Date().getTime() + "-" + count)
}
$(".scroll").scroll(function () {
var self = this;
if (this.lastScroll === undefined) {
this.lastScroll = Date.now() - interval;
}
/*calculate how long until next execution should happen*/
var nextTime = interval - Date.now() + this.lastScroll;
/*it doesn't make sense that time range is smaller than 0*/
if (nextTime < 0) {
nextTime = 0;
}
if (this.scrollTo) clearTimeout(this.scrollTo);
this.scrollTo = setTimeout(function () {
self.lastScroll = Date.now();
action();
}, nextTime);
});发布于 2014-09-26 20:49:28
这里是一个简单的节气门功能。它返回一个只允许传入的函数在指定的interval上运行的新函数(以毫秒为单位)。
function throttleFunction(func, interval){
return function(){
if(!func.lastRunTime || func.lastRunTime < Date.now() - interval){
func.lastRunTime = Date.now();
func.apply(this, arguments);
}
}
}将其添加到代码中,如下所示:
//Only run every 2000 milliseconds
var throttledMouseWheelHandler = throttleFunction(MouseWheelHandler, 2000);
// IE9, Chrome, Safari, Opera
window.addEventListener("mousewheel", throttledMouseWheelHandler , false);
// Firefox
window.addEventListener("DOMMouseScroll", throttledMouseWheelHandler , false);
function throttleFunction(func, interval) {
return function() {
if (!func.lastRunTime || func.lastRunTime < Date.now() - interval) {
func.lastRunTime = Date.now();
func.apply(arguments);
}
}
}
document.body.onclick = throttleFunction(function() {
var div = document.createElement('div');
div.innerHTML = 'clicked';
document.body.appendChild(div);
}, 2000);<div>Click ME (only registers every 2 seconds)</div>
发布于 2014-09-26 19:36:14
为了简单起见,我在本例中包括了jQuery。你可以把它重写成本地的..。
看看这里:http://jsfiddle.net/43sgpme7/
$(".scroll").scroll(function ()
{
if (this.scrollTo) clearTimeout(this.scrollTo);
this.scrollTo = setTimeout(function ()
{
$("p").html(new Date().getTime())
}, 1000);
});https://stackoverflow.com/questions/26066797
复制相似问题