0

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

3 回答 3

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();
});
于 2013-02-22T11:02:17.943 回答
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();
   });
});
于 2013-02-22T11:07:47.127 回答
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);
});
于 2013-02-22T11:09:00.540 回答