显示带时间延迟的滚动按钮

问题描述:

我有一个div,滚动时会显示一个按钮。我希望此按钮仅在最后一次滚动后显示2秒钟。我的脚本中出现了一个我无法弄清的故障。有时会显示2秒钟,有时会更少,有时会立即隐藏。显示带时间延迟的滚动按钮

我想的问题是,它只能从第一滚动计算,每个滚动之后,直至过期不重置这个计时器。如果定时器到期,则滚动再次显示。

$("#layout-main").live('scroll',function(){ 
$("#main-totop").show(); 
}); 
$("#main-totop").live('click',function(){ 
mainapi.scrollTo(0,0); 
setTimeout(function(){ 
    $('#main-totop').hide(); 
}, 2000); 
}); 

这应该有效。

$("#layout-main").live('scroll',function(){ 
    $("#main-totop").stop().show(0).delay(2000).hide(0); 
}); 
$("#main-totop").live('click',function(){ 
    mainapi.scrollTo(0,0); 
    $('#main-totop').hide(); 
}); 
+0

你能解释一下什么不同,为什么? – Archer 2013-02-22 11:06:46

+0

它没有。没有什么可以证明我们需要它在滚动后2秒钟隐藏。延迟需要在#layout-main事件中进行。 – user1695981 2013-02-22 11:08:37

+0

我已经调整了代码以适合您的描述。 通过向'.hide'传递1,它以动画形式运行,我们可以使用jQueries'.delay'而不是超时。 – MildlySerious 2013-02-22 11:16:47

您应该.promise().done()尝试,我建议你使用.on()因为.live()been removed in jQuery version 1.9.0+

$("#layout-main").on('click', '#main-totop', function(){ 
    mainapi.scrollTo(0,0).promise().done(function(){ 
     setTimeout(function(){ 
      $(this).hide(); 
     }, 2000); 
    }); 
}); 

,或者你可以尝试,因为这:

$("#layout-main").on('click', '#main-totop', function(){ 
    mainapi.scrollTo(0,0).promise().done(function(){ 
     $(this).delay(2000).hide(); 
    }); 
}); 

你的代码是不能代表什么你描述。

它说:当你滚动#布局主要#主totop元素显示。 如果点击,然后滚动到顶部,隐藏2秒后。

从你的描述你想要的按钮(可能#主totop)只出现在最后滚动后2秒钟,然后躲起来。

如果我是正确的,那么你需要的是这样的:

var mytimer; 
$("#layout-main").live('scroll',function(){ 
    clearTimeout(mytimer); 
    $('#main-totop').show(); 
    mytimer = setTimeout(function(){ 
     $('#main-totop').hide(); 
    }, 2000); 
}); 
$("#main-totop").live('click',function(){ 
mainapi.scrollTo(0,0); 
}); 
+0

应该有一个.show()在那里? – user1695981 2013-02-22 11:15:16

+0

你是正确的队友,我编辑的代码。谢谢 – Oden 2013-02-22 11:59:44