显示具有延时的滚动按钮

时间:2013-02-22 10:55:40

标签: jquery scroll timeout hide show

我有一个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); 
});

3 个答案:

答案 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);
});