火灾调整事件一次不基于时间
Fire resize event once not based on timing
是否有可能避免浏览器两次触发事件,但不基于时间(如果您的resize事件执行时间很长,解决方案是坏的)
window.blockResize = false;
$(window).resize(function() {
if (window.blockResize) return;
//do stuff
window.blockResize = true;
setTimeout(function(){window.blockResize = false},200);
});
好的,它仍然是基于计时器,但它现在在我的情况下工作。
您可以将setTimeout()
和clearTimeout()
与jQuery.data
结合使用:
$(window).resize(function() {
clearTimeout($.data(this, 'resizeTimer'));
$.data(this, 'resizeTimer', setTimeout(function() {
//do something
alert("Haven't resized in 200ms!");
}, 200));
});
我写了一个扩展来增强jQuery的默认
on
(&bind
)事件处理程序。如果在给定的时间间隔内没有触发事件,则将一个或多个事件的事件处理程序函数附加到所选元素。如果您希望仅在延迟之后(如resize事件)触发回调,或者其他情况下,这很有用。https://github.com/yckart/jquery.unevent.js ;(function ($) {
var methods = { on: $.fn.on, bind: $.fn.bind };
$.each(methods, function(k){
$.fn[k] = function () {
var args = [].slice.call(arguments),
delay = args.pop(),
fn = args.pop(),
timer;
args.push(function () {
var self = this,
arg = arguments;
clearTimeout(timer);
timer = setTimeout(function(){
fn.apply(self, [].slice.call(arg));
}, delay);
});
return methods[k].apply(this, isNaN(delay) ? arguments : args);
};
});
}(jQuery));
像其他on
或bind
事件处理程序一样使用它,除了可以传递一个额外的参数作为最后一个:
$(window).on('resize', function(e) {
console.log(e.type + '-event was 200ms not triggered');
}, 200);
http://jsfiddle.net/ARTsinn/EqqHx/相关文章:
- 文章的日期/时间<时间>
- 基础日期选择器、结束日期(和时间)不能早于开始日期(和时间)
- 早于x的javascript unix时间戳
- Vis.js聚焦于“当前时间”(红线)
- 处理日期时间时间戳javascript(angularjs)和mongo的滑块
- 相对于日期范围的日期/时间格式
- 如何在 JavaScript 中计算“时间 1”-“时间 2”
- 服务器端和特定于时间的脚本执行
- 创建类似于Facebook的时间戳
- 使用javascript滑动特定于时间的图像
- 为什么setTimeout的启动时间早于它应该启动的时间
- Javascript:存储当前时间's时间戳值
- 在javascript中基于时间更新动画(独立于帧)
- 如何用具有特定持续时间/时间的事件填充Kendo Scheduler
- 创建一个选择字段,其中的时间条目不能早于当前计算机时间
- 生成一个类似于Google Tasks API的RFC 3339时间戳
- 如何在php中获得时间戳值,类似于javascript中的getTime()
- 创建相对于当前时间的 JavaScript 倒数计时器
- 从工作时间时间范围内减去午餐时间
- 验证输入的时间只适用于如果我附加了一个断点在chrome调试器