清除间隔清除两个间隔
clearInterval clearing two intervals
我无法为我的函数运行clearInterval
。我使用它们通过触发setInterval
来滚动窗口,该函数触发scrollLeft
。代码:
function scrollSpan() {
$('nav#scrolling').children().css('width',config.windowWidth/10+'px');
var inter;
$('nav#scrolling').children('span').hover(function() {
var value;
if($(this).is('.scrollLeft')) {
value = '-=50'
} else {
value = '+=50'
}
inter = setInterval(function() {
$('body, html').animate({
scrollLeft: value
}, 50);
},0)
})
$('nav#scrolling').children('span').mouseleave(function() {
clearInterval(inter)
})
}
问题是,当触发mouseleave
时,间隔不会停止。
小提琴:http://jsfiddle.net/FpX4M/
您正在使用hover
,而您应该使用mouseenter
。 当只有一个处理程序传递给hover
则在进入和离开时都会调用该处理程序。 因此,您的hover
被调用两次(一次进入和一次离开),但您的mouseleave
只被调用一次。 这就是为什么即使一个间隔被清除,另一个间隔仍然存在。
请参阅文档,特别是 v1.4 中添加的签名,它只需要一个处理程序(向下滚动)。
编辑:Jsfiddles与证明:
http://jsfiddle.net/FpX4M/1/
打开控制台,看到处理程序触发两次,并且该间隔继续。
http://jsfiddle.net/FpX4M/2/
在控制台中,您现在只会看到处理程序的一次触发,然后间隔在休假时停止。
你的整个范围有点不稳定。尝试这样的事情:
var inter;
function scrollSpan() {
$('nav#scrolling').children().css('width',config.windowWidth/10+'px');
}
$('nav#scrolling').children('span').hover(function() {
var value;
if($(this).is('.scrollLeft')) {
value = '-=50'
} else {
value = '+=50'
}
inter = setInterval(function() {
$('body, html').animate({
scrollLeft: value
}, 50);
},0)
});
$('nav#scrolling').children('span').mouseleave(function() {
clearInterval(inter)
});
您需要确保 inter
变量可以在函数外部访问。此外,通常,状态函数不应该在函数中分配,除非你正在快速更改它们 - 而且看起来你不会在任何地方分离它们。函数中唯一需要做的事情是将要重复的事情。也许在inter = setInterval...
之前添加一个clearInterval(inter);
,以确保没有旧的间隔。
相关文章:
- JQuery合并了keyup和focusout两个函数
- 如何使用 node.js 比较两个 json 数组
- 为复选框javascript指定两个值
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 单击时切换两个图像
- 我可以'我似乎不知道如何修复javascript中的两个lint.有人能帮我理解吗
- 基于两个条件退出While循环
- 如何在这里将两个值最低的数字相加
- 组合两个javascript函数
- 如何使用offer/answer交换来自两个对等连接的流
- jsf中两个字符串的颜色代码差异
- 加载两个具有相同父密钥名称的json文件
- 在Qualtrics中,介绍如何动态连接两个滑块
- 访问$.ajax()函数中的两个不同数组
- 如何清除两个提交按钮的验证问题
- 清除两个文本框,并使用 JavaScript 对 TextChanged 或 CheckedChanged 事件进行复选
- 清除间隔清除两个间隔
- 如何在Javascript中制作一个清除两个文本区域的按钮
- 当存在两个类时,清除不起作用的输入值
- 如何在Bing Maps AJAX Control 7.0版中将引脚添加到两个不同的实体层,然后清除特定实体层上的引脚