關(guān)于運(yùn)行定時(shí)器時(shí)候手動(dòng)滾動(dòng)滾動(dòng)條停止定時(shí)器問題!
請問一下!設(shè)置istop = true ?
在運(yùn)行istop = true 這表示在定時(shí)器運(yùn)行的時(shí)候不啟動(dòng)
if(!istop){clearInterval(timer)}
但是如果,用戶自己滾動(dòng)滾動(dòng)條的話· ?就觸發(fā)window.onscroll = function(){if(!istop){clearInterval(timer)}
istop = false}
這個(gè)函數(shù)· ?而這個(gè)函數(shù)里面istop是false 然后傳給if里面取反· 變成true 符合條件· 進(jìn)行清除定時(shí)器·?
請問大家,這邊的思路是這樣子的嗎??
2017-04-17
1.你描述的不太清楚。我開始也不懂,試了幾次才明白。是這樣的,最初定義變量var isTop=true,是為了方便后面分辨它是由點(diǎn)擊按鈕設(shè)置定時(shí)器來滾動(dòng)還是鼠標(biāo)來滾動(dòng),首先,我們知道剛打開的頁面按鈕不可見,根本不可能點(diǎn)擊到按鈕,此時(shí)最初的isTop為true,然后就需要我們用鼠標(biāo)操作滾動(dòng),這時(shí)就觸發(fā)了Window.onscroll事件,里面會(huì)做判斷,此時(shí)isTop仍未改變,不符合if(!isTop)也就是isTop為false的條件,就不會(huì)關(guān)定時(shí)器,后一句就把false賦給isTop了,注意這里前面順序不能顛倒,否則先賦值的話就直接關(guān)定時(shí)器,后面點(diǎn)擊onclick事件的同時(shí)會(huì)一起觸發(fā)onscroll事件,那么會(huì)造成滾動(dòng)條滾一下停一下(因?yàn)槟闱懊骓樞虿粚﹃P(guān)了定時(shí)器),不能自動(dòng)滾到top為0的位置
2.點(diǎn)擊按鈕同時(shí)也會(huì)觸發(fā)onscroll事件但是仍舊不會(huì)關(guān)閉定時(shí)器 (因?yàn)槟菞l判斷在),里面仍為true,此時(shí)你再滾動(dòng)觸發(fā)onscroll事件,里面會(huì)賦值為false,你再點(diǎn)擊賦值為true,如此循環(huán),互不沖突。
2017-04-14
window.onload = function(){
?? ??? ??? ??? ?var obtn = document.getElementById('btn');
?? ?//獲取頁面可視區(qū)的高度
?? ?var aclientHeight=document.documentElement.clientHeight;
?? ?var timer = null;
?? ?var isTop = false;
?? ?window.onscroll=function(){
?? ??? ?var osTop=document.documentElement.scrollTop||document.body.scrollTop;
?? ??? ?if (isTop){
?? ??? ??? ?clearInterval(timer);
?? ??? ?}
?? ??? ?isTop = true;
?? ??? ?if (osTop >= aclientHeight){
?? ??? ??? ?obtn.style.display="block";
?? ??? ?}else {
?? ??? ??? ?obtn.style.display="none"; //隱藏按鈕
?? ??? ?}
?? ?}
你可以把isTop設(shè)置為false? 意思是沒有人為滾動(dòng)的時(shí)候?? isTop為true的時(shí)候就是人為滾動(dòng)的時(shí)候,?? 當(dāng)執(zhí)行第一次onscroll的時(shí)候? 其實(shí)isTop還是為false? 第二次再執(zhí)行onscroll的時(shí)候? isTop就變?yōu)門rue了? 因?yàn)閛nscroll這個(gè)函數(shù)里面有設(shè)置isTop = true;?? 滾動(dòng)一下滾輪 其實(shí)onscroll這個(gè)函數(shù)會(huì)執(zhí)行20多次? 第二次開始isTop就變?yōu)門rue,所以就清除定時(shí)器了