我有一个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);
});
答案 0 :(得分:0)
这应该有用。
$("#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();
});
答案 1 :(得分:0)
您应该尝试使用.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();
});
});
答案 2 :(得分:0)
您的代码不代表您所描述的内容。
它说:当您滚动#layout-main 时,会显示 #main-totop 元素。 如果点击,则滚动到顶部,隐藏2秒后。
根据您的描述,您希望按钮(可能 #main-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);
});