var getrepeate = 0;function handle(delta) { var date1 = new Date(); if(date1.getTime() - getrepeate < 200){ return; } var date = new Date(); getrepeate = date.getTime(); ? ? var s = delta + ": ";? ? var setpositiononscroll = 0; if (delta <0){ setpositiononscroll = setPositionForPage(true); }else{ setpositiononscroll = setPositionForPage(false); } if(document.compatMode != "CSS1Compat"){ document.body.scrollTop = setpositiononscroll; }else{ if(document.documentElement.scrollTop == 0){ document.body.scrollTop = setpositiononscroll; console.log(setpositiononscroll + " ? ? ? ?" ?+ document.body.scrollTop); }else{ document.documentElement.scrollTop = setpositiononscroll; } } }?function wheel(event){? ? var delta = 0;? ? if (!event) event = window.event;? ? if (event.wheelDelta) {? ? ? ? delta = event.wheelDelta/120;?? ? ? ? if (window.opera) delta = -delta;? ? } else if (event.detail) {? ? ? ? delta = -event.detail/3;? ? }? ? if (delta)? ? ? ? setTimeout(function(){handle(delta);},250);}//監(jiān)聽鼠標(biāo)滾輪事件function setPageScroll(){ if (window.addEventListener){window.addEventListener('DOMMouseScroll', wheel, false);} window.onmousewheel = document.onmousewheel = wheel; }?上面是代碼,實(shí)際上已經(jīng)實(shí)現(xiàn)出來了,但是效果感覺不好。這里面最上面的是全局變量,判斷鼠標(biāo)的滾輪滾動時間間隔,根據(jù)如果間隔太小return;我遇到的問題是:?鼠標(biāo)滾輪滾動會導(dǎo)致頁面位置發(fā)生變化,我監(jiān)聽鼠標(biāo)滾動觸發(fā)事件是為了調(diào)整頁面的卷入高度,比如:鼠標(biāo)滾輪向上滾動了一次,我讓網(wǎng)頁的卷入高度 scrollTop設(shè)置為1500px; ?但實(shí)際上觸發(fā)事件之后瀏覽器將頁面的卷入高度設(shè)置為了1500px;而后鼠標(biāo)向上滑動則讓頁面的卷入高度再次發(fā)生變化,如果消除這種變化的影響。我的解決辦法是setTimeout 通過setTimeout間隔一定時間再調(diào)用事件,讓頁面的卷入高度設(shè)置為1500px;相當(dāng)于等滾動滾動對于頁面的影響完成之后再調(diào)用函數(shù)。 ?不過效果很有限,因?yàn)樵O(shè)置時間短沒效果,時間長就被人給當(dāng)作網(wǎng)頁卡死了。該如何解決?
鼠標(biāo)滾輪滾動事件?
咕咕問
2016-09-13 16:00:00