2013-02-22 87 views
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); 
}); 

回答

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(); 
}); 
+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

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(); 
    }); 
}); 
0

你的代碼是不能代表什麼你描述。

它說:當你滾動#佈局主要#主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