摘要:要實(shí)現(xiàn)全屏滾動(dòng)的效果,無(wú)非是讓每頁(yè)的內(nèi)容頁(yè)高度達(dá)到瀏覽器窗口的高度。通過(guò)判斷鼠標(biāo)滾動(dòng)事件來(lái)設(shè)置定時(shí)器運(yùn)動(dòng)方式。每頁(yè)高度在實(shí)現(xiàn)滾輪的時(shí)候存在兼容性的問(wèn)題,首先,對(duì)于鼠標(biāo)滾動(dòng)事件,有自己的解決方法,方法叫,鼠標(biāo)滾動(dòng)的時(shí)候觸發(fā)。
要實(shí)現(xiàn)全屏滾動(dòng)的效果,無(wú)非是讓每頁(yè)的內(nèi)容頁(yè)高度達(dá)到瀏覽器窗口的高度。通過(guò)判斷鼠標(biāo)滾動(dòng)事件來(lái)設(shè)置定時(shí)器運(yùn)動(dòng)方式。
基本的html結(jié)構(gòu):
CSS:
*{ margin:0; padding:0; } #wrap{ overflow: hidden; width:100%; } #main{ height:100%; top:0; position: relative; } .page{ width:100%; margin:0; } #page1{ background:#555; } #page2{ background:#6CE26C; } #page3{ background:#fcfc46; } #page4{ background:#ff0000; }
如上,需要設(shè)置每個(gè)page項(xiàng)的高度大小都為窗口高度大小,并且,最外層容器,也就是wrap的高度也是一樣,如果漏了設(shè)置wrap高度,每頁(yè)的高度也是正常的,但是最后滾動(dòng)的時(shí)候?qū)嶋H上會(huì)漏出其他頁(yè)的內(nèi)容。
var wrap = document.getElementById("wrap"); var main = document.getElementById("main"); var pages = main.getElementsByClassName("page"); var pageLen = pages.length; var pageH = document.body.clientHeight||document.documentElement.clientHeight; wrap.style.height = pageH + "px"; console.log("wrap:"+wrap.style.height); for(var i=0;ijavascript在實(shí)現(xiàn)滾輪的時(shí)候存在兼容性的問(wèn)題,首先,對(duì)于鼠標(biāo)滾動(dòng)事件,firefox有自己的解決方法,方法叫DOMMouseScroll,鼠標(biāo)滾動(dòng)的時(shí)候觸發(fā)。其有關(guān)鼠標(biāo)滾輪的信息則保存在detail屬性中,當(dāng)向前滾動(dòng)滾輪時(shí),其值為-3的倍數(shù),當(dāng)向后滾動(dòng)滾輪時(shí),其值為3的倍數(shù)。
其他瀏覽器(包括煩人的IE6、7)有一個(gè)名叫“mousewheel”的事件,該事件可以在任何元素上觸發(fā),而且可以冒泡(前面那個(gè)DOMMouseScroll也可以),該事件有一個(gè)屬性叫“wheelDelta”,向上滾動(dòng)鼠標(biāo)滾輪時(shí),wheelDelta是120的倍數(shù);向下滾動(dòng)鼠標(biāo)滾輪時(shí),wheelDelta是-120的倍數(shù)。
為了兼容,可以通過(guò)下面的方式:if ((navigator.userAgent.toLowerCase().indexOf("firefox")!=-1)){ document.addEventListener("DOMMouseScroll",scrollFun,false); }else if (document.addEventListener) { document.addEventListener("mousewheel",scrollFun,false); }else if (document.attachEvent) { document.attachEvent("onmousewheel",scrollFun); }else{ document.onmousewheel = scrollFun; }滾動(dòng)事件處理函數(shù)無(wú)非就是判斷wheelDelta和delta的值還有外部容器main.offsetTop的值,然后觸發(fā)動(dòng)畫(huà)效果,這里要注意,為了防止多次觸發(fā),比如用戶在短時(shí)間內(nèi)瘋狂滾滾輪,然而不想要瘋狂觸發(fā),那么需要在觸發(fā)動(dòng)畫(huà)前后通過(guò)定時(shí)器設(shè)定閥值。
具體的實(shí)現(xiàn)參考下面代碼,已經(jīng)有注釋了:var wrap = document.getElementById("wrap"); var main = document.getElementById("main"); var pages = main.getElementsByClassName("page"); var pageLen = pages.length; var pageH = document.body.clientHeight||document.documentElement.clientHeight; wrap.style.height = pageH + "px"; //注意 console.log("wrap:"+wrap.style.height); for(var i=0;i0 && parseInt(main.offsetTop) > -(pageH*(pageLen-1))){ //向下滾動(dòng) now = now - pageH; //向下翻過(guò)一頁(yè) toPage(now,"down"); console.log("wrap:"+wrap.style.height); //console.log("down.now:"+now); //console.log("main:"+main.offsetTop); } if(delta<0 && parseInt(main.offsetTop) < 0){ //向上滾動(dòng) now = now + pageH; toPage(now,"up"); } endTime = new Date().getTime(); //重置時(shí)間 }else{ event.preventDefault(); } } var sliderTime = null; function toPage(now,direction){ clearInterval(sliderTime);//執(zhí)行當(dāng)前動(dòng)畫(huà)同時(shí)清除之前的動(dòng)畫(huà) sliderTime = setInterval(function(){ var speed = 0; if(direction == "down"){ if(now<0 && now < main.offsetTop){ speed = -10; main.style.top = main.offsetTop+speed + "px"; if(main.style.top<=now){ main.style.top = now + "px"; } }else{ //當(dāng)now的高度達(dá)到整個(gè)頁(yè)面高度,結(jié)束運(yùn)動(dòng) main.style.top = now + "px"; speed = 0; clearInterval(sliderTime); } }else{ if(now<=0 && now >= main.offsetTop){ speed = 10; main.style.top = main.offsetTop+speed + "px"; if(main.style.top>=now){ main.style.top = now + "px"; } }else{ main.style.top = now + "px"; speed = 0; clearInterval(sliderTime); } } },10); } 上面的toPage方法是帶緩沖的效果,粗暴的方法不帶緩沖:
function toPageNow(now){ // $("#main").animate({top:(now+"px")},1000); //jquery實(shí)現(xiàn)動(dòng)畫(huà)效果 setTimeout("main.style.top = now + "px"",1000); //javascript 實(shí)現(xiàn)動(dòng)畫(huà)效果 }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/88869.html
摘要:今天來(lái)介紹一種簡(jiǎn)單易行粗暴的方式來(lái)實(shí)現(xiàn)的視頻全屏播放。通過(guò)在一些主流視頻網(wǎng)站上的測(cè)試,在愛(ài)奇藝,土豆,芒果,等可正常全屏,在騰訊,樂(lè)視,等網(wǎng)站仍然無(wú)法全屏。經(jīng)測(cè)試,騰訊和沒(méi)有問(wèn)題了,樂(lè)視和仍然不可以全屏,即使已經(jīng)找到了全屏按鈕的標(biāo)識(shí)。 用過(guò)WebView的開(kāi)發(fā)者們肯定都知道這里面的坑數(shù)不勝數(shù),加載緩慢,內(nèi)存泄露,文件選擇......沒(méi)錯(cuò),全屏播放視頻,這又是一個(gè)大坑。一個(gè)沒(méi)有修飾過(guò)...
摘要:今天來(lái)介紹一種簡(jiǎn)單易行粗暴的方式來(lái)實(shí)現(xiàn)的視頻全屏播放。通過(guò)在一些主流視頻網(wǎng)站上的測(cè)試,在愛(ài)奇藝,土豆,芒果,等可正常全屏,在騰訊,樂(lè)視,等網(wǎng)站仍然無(wú)法全屏。經(jīng)測(cè)試,騰訊和沒(méi)有問(wèn)題了,樂(lè)視和仍然不可以全屏,即使已經(jīng)找到了全屏按鈕的標(biāo)識(shí)。 用過(guò)WebView的開(kāi)發(fā)者們肯定都知道這里面的坑數(shù)不勝數(shù),加載緩慢,內(nèi)存泄露,文件選擇......沒(méi)錯(cuò),全屏播放視頻,這又是一個(gè)大坑。一個(gè)沒(méi)有修飾過(guò)...
隨著抖音、快手這類的視頻類app的火爆,移動(dòng)端h5視頻類應(yīng)用也隨之興起,使用video播放的場(chǎng)景也越來(lái)越多,本篇文章主要例舉了移動(dòng)端視頻播放的一些場(chǎng)景和個(gè)人在開(kāi)發(fā)過(guò)程中遇到的一些問(wèn)題,希望在看過(guò)這篇文章后,能對(duì)開(kāi)發(fā)者在移動(dòng)端使用video播放時(shí)快速開(kāi)發(fā)減少踩坑 全屏播放 視頻的全屏播放是移動(dòng)端一個(gè)很常見(jiàn)的場(chǎng)景,因此我們需要對(duì)video設(shè)置全屏播放,全屏播放用到的方法是requestFullscre...
隨著抖音、快手這類的視頻類app的火爆,移動(dòng)端h5視頻類應(yīng)用也隨之興起,使用video播放的場(chǎng)景也越來(lái)越多,本篇文章主要例舉了移動(dòng)端視頻播放的一些場(chǎng)景和個(gè)人在開(kāi)發(fā)過(guò)程中遇到的一些問(wèn)題,希望在看過(guò)這篇文章后,能對(duì)開(kāi)發(fā)者在移動(dòng)端使用video播放時(shí)快速開(kāi)發(fā)減少踩坑 全屏播放 視頻的全屏播放是移動(dòng)端一個(gè)很常見(jiàn)的場(chǎng)景,因此我們需要對(duì)video設(shè)置全屏播放,全屏播放用到的方法是requestFullscre...
閱讀 2641·2021-10-12 10:12
閱讀 787·2019-08-29 17:25
閱讀 2790·2019-08-29 17:24
閱讀 3219·2019-08-29 17:19
閱讀 1804·2019-08-29 15:39
閱讀 3048·2019-08-26 16:50
閱讀 1993·2019-08-26 12:17
閱讀 2700·2019-08-26 12:16