jQuery为每个元素分配带有超时的事件处理程序
jQuery assign event handler with timeouts per element
对我来说很有趣。我有一个视频播放器的控制显示在悬停。最初,我用CSS做了这个,但不得不改变策略javascript与浏览器的全屏api玩得很好(顺便说一句,这意味着你总是在视频上悬停)。
我的新方法是为mousemove
设置一个事件处理程序,为视频的容器添加一个类并设置超时以删除它,如果超时已经设置,则清除它。这是完美的,但逻辑不能扩展到一个以上的玩家。
TLDR:我如何扩展我的逻辑扩展到一个以上的视频容器?time
变量的范围需要包含在每个元素事件中,但也需要包含在处理程序之外,以便可以从一个事件清除到下一个事件(在同一元素上)。
谢谢你的帮助——这些逻辑问题对我来说总是很难。
这是一个jsFiddle的例子。您会注意到,当您将鼠标悬停限制在一个元素上时,它工作得很好,但是当您将鼠标悬停扩展到页面上的其他元素时,就会出现问题。
HTML:<div class="cont">
<div class="controls">controls</div>
</div>
JavaScript: var time;
$('body').on('mousemove', '.cont', function(){
var thiis = $(this);
if (time){
clearTimeout(time);
}
thiis.addClass('showControls');
time = setTimeout(function(){
thiis.removeClass('showControls');
}, 2000);
});
您可以使用jQuery的data方法存储时间变量,该方法可以在每个元素上存储数据。
$('body').on('mousemove', '.cont', function(){
var thiis = $(this),
// get the time from the data method
time = thiis.data("timer-id");
if (time){
clearTimeout(time);
}
thiis.addClass('showControls');
var new_time = setTimeout(function(){
thiis.removeClass('showControls');
}, 2000);
// save the new time
thiis.data("timer-id", new_time);
});
相关文章:
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- dropdown.js中的复杂事件处理
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 复选框,然后单击事件处理
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- 带有参数的Javascript事件处理程序
- 如何在jQuery事件处理程序中存储和重用超时
- 可以clearTimeout删除JavaScript中已触发超时事件的未处理回调
- 如何通过两个嵌套的匿名函数(一个带有超时的事件处理程序)传递变量
- SignalR处理客户端超时事件
- jQuery为每个元素分配带有超时的事件处理程序
- 在事件处理程序中设置超时