下面是一个jQuery语句,它在其click事件上隐藏了一个div
元素。无论是否在5秒后没有点击,我都希望元素淡出。有没有一种简单的方法可以在同一个表达式中调用fadeOut
函数,或者click
事件没有干扰动画?
$(".fadeOutbox").click(function(){
$(this).fadeOut('slow');
});
答案 0 :(得分:4)
大多数jQuery组件都是可链接的,你的函数会返回对初始对象的引用。
您可以通过以下方式实现您想要的目标:
$(".fadeOutbox").click(function () {
$(this).stop().fadeOut('slow');
}).delay(5000).fadeOut('slow');
基本上读作onclick,淡出,否则在5秒后淡出。
答案 1 :(得分:3)
我认为这是在另一个显示框开头的函数中。此解决方案将在5秒后隐藏框,或在点击后立即隐藏。
var $box = $('.fadeOutbox');
var fadeOut = function() {
clearTimeout(timeout);
$box.fadeOut('slow');
};
var timeout = setTimeout(fadeOut, 5000);
$box.click(fadeOut);
答案 2 :(得分:2)
编辑以澄清:
var clear = setTimeout(function(){ $(".fadeOutbox").fadeOut('slow'); }, 5000);
$(".fadeOutbox").on('click', function(){
clearTimeout(clear);
});
答案 3 :(得分:2)
在点击处理程序中使用超时不:
setTimeout(function () {
$(".fadeOutbox").fadeOut('slow');
}, 5000);
您的jQuery代码变为:
// set a timeout for 5 seconds
setTimeout(function () {
$(".fadeOutbox").fadeOut('slow');
}, 5000);
// attach click handler
$(".fadeOutbox").on("click", function () {
$(this).fadeOut('slow');
});
答案 4 :(得分:2)
保存用户点击或未点击的事实,并在计时器
中对其进行测试var isClicked = false;
setTimeout(function () {
if(!isClicked)
$(".fadeOutbox").fadeOut('slow');
}, 5000);
$(".fadeOutbox").click(function () {
isClicked = true;
});
答案 5 :(得分:2)
试试这个:
var wasClicked = false;
$(".fadeOutbox").click(function () { wasClicked = true; });
setTimeout(function () {
if(wasClicked = false)
$(".fadeOutbox").fadeOut('slow');
}, 5000);
答案 6 :(得分:2)
尝试为超时保留一个变量,并在每次用户点击时清除它。
// Timeout variable
var t;
$('.fadeOutBox').click(function()
{
$box = $(this);
$box.fadeIn("fast");
// Reset the timeout
clearTimeout(t);
t = setTimeout(function()
{
$box.fadeOut("slow");
}, 5000);
});
希望这会对你有所帮助。
答案 7 :(得分:2)
哇,没有一个答案给出了简单的解决方案:使用setTimeout
并取消点击超时:
$(".fadeOutbox").click(function () {
// Cache the jQuery object
var $this = $(this);
// Do we already have a timer running?
var timer = $this.data("timer");
if (timer) {
// Yes, cancel it
clearTimeout(timer);
$this.removeData("timer");
}
// (You may want an `else` here, it's not clear)
// In five seconds, fade out
$this.data("timer", setTimeout(function() {
$this.removeData("timer");
$this.fadeOut('slow');
}, 5000));
});
我不是百分之百确定以上内容是否触发了您想要的事件,但是这两个相关代码就是这样,它会安排定时操作:
// In five seconds, fade out
$this.data("timer", setTimeout(function() {
$this.removeData("timer");
$this.fadeOut('slow');
}, 5000));
这就取消了它(例如,点击时):
var timer = $this.data("timer");
if (timer) {
// Yes, cancel it
clearTimeout(timer);
$this.removeData("timer");
}
答案 8 :(得分:1)