删除设置单击超时
Removing setTimeout on click
我在js代码的一部分中遇到了一些奇怪的行为。
我有一些通知出现在页面顶部的栏中,然后在一定时间后消失。我使用了一种简单的setTimeout()
来实现这一点。
将作为特定 url 查询字符串的结果出现,但当用户单击按钮时,需要显示一个新通知。我希望旧的消失,新的出现。我正在使用一个变量来保留对setTimeout()
的引用以取消它。但是,当我尝试这样做时,我设法创建了一个循环,最终使我的chrome选项卡崩溃。
我整理了一个 jsfiddle 来说明我的问题 - http://jsfiddle.net/5Nm4c/
在另一个可见时单击show notification
将使浏览器选项卡崩溃。如果您在不显示任何内容时单击它,则没问题。
这是我的js:
var Notification = {
// close main notification bar
close: function (callback) {
$('#notification-bar').fadeOut(250, function () {
// reset its position and fade it back in so it is ready to go again
$(this).css('top', -100).fadeIn(1);
// check if a callback function has been passed in
if (typeof callback === 'function') {
callback();
}
});
},
// open notification bar with the appropriate css class and message
open: function (message) {
// if the notification bar is already visisble
if (verge.inViewport($('#notification-bar'))) {
// hide and then show it with the new message
window.clearTimeout(Notification.timeout);
Notification.close(Notification.open(message));
return false;
}
$('#notification-bar').html(message);
$('#notification-bar').animate({
'top': 0
}, 250, function () {
Notification.timeout = window.setTimeout(function () { Notification.close() }, 1500);
});
},
timeout: null
}
Notification.open('hello');
$('#button').click(function(e){
e.preventDefault();
Notification.open('link clicked');
});
我正在使用 https://github.com/ryanve/verge/因为它有一些不错的方法来检查元素在视口中是否可见。
有人可以告诉我我的错误在哪里吗?
Uncaught RangeError: Maximum call stack size exceeded
来自jsfiddle本身,所以我无法测试它。var Notification = {
open: function (message) {
Notification.close(Notification.open(message)); //Here you create the loop!!
}
}
我在您的代码中看到的另一个问题是,当在动画运行时调用Notification.open
时Notification.timeout
不会起作用。尝试一个$('#notification-bar').stop(true, true);
来停止你称之为window.clearTimeout(Notification.timeout);
的动作动画。也许使用$('#notification-bar').stop(true, false);
会更好,所以"旧"setTimeout甚至不会被调用。
相关文章:
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 单击F5时如何停止页面加载
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 单击jquery清除输入值
- 单击按钮以等待单击按钮
- 在单击href链接的同时下载文件
- 超时后才能再次单击
- Chrome javascript调试器在超时时暂停,可以't调试单击事件
- 单击后JavaScript函数超时
- 量角器根据条件单击嵌套元素,错误 - 在指定的超时内未调用异步回调
- 删除设置单击超时
- 单击按钮超时javascript
- 超时时单击动态标签时出现问题
- 多个设置超时函数在第一次单击时不执行
- 扩展单击按钮时的超时功能
- 单击后退按钮并登陆带有超时重定向到同一页面的页面
- 单击触发器后清除超时
- 如何使用 Clippy.js 在单击时隐藏元素而不是超时