亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > HTML5 > 正文

HTML5單頁面手勢滑屏切換原理分析

2024-09-05 07:22:02
字體:
來源:轉載
供稿:網友

H5單頁面手勢滑屏切換是采用HTML5 觸摸事件(Touch) 和 CSS3動畫(Transform,Transition)來實現的,效果圖如下所示,本文簡單說一下其實現原理和主要思路。

1、實現原理

假設有5個頁面,每個頁面占屏幕100%寬,則創建一個DIV容器viewport,將其寬度(width) 設置為500%,然后將5個頁面裝入容器中,并讓這5個頁面平分整個容器,最后將容器的默認位置設置為0,overflow設置為hidden,這樣屏幕就默認顯示第一個頁面。

<div id="viewport" class="viewport">    <div class="pageview" style="background: #3b76c0" >        <h3 >頁面-1</h3>    </div>    <div class="pageview" style="background: #58c03b;">        <h3>頁面-2</h3>    </div>    <div class="pageview" style="background: #c03b25;">        <h3>頁面-3</h3>    </div>    <div class="pageview" style="background: #e0a718;">        <h3>頁面-4</h3>    </div>    <div class="pageview" style="background: #c03eac;">        <h3>頁面-5</h3>    </div></div>

CSS樣式:

.viewport{   width: 500%;   height: 100%;   display: -webkit-box;   overflow: hidden;   //pointer-events: none; //這句話會導致整個頁面上的點擊事件失效,如需綁定點擊事件,請注掉   -webkit-transform: translate3d(0,0,0);   backface-visibility: hidden;   position: relative;}

注冊touchstart,touchmove和touchend事件,當手指在屏幕上滑動時,使用CSS3的transform來實時設置viewport的位置,比如要顯示第二個頁面,就設置viewport的transform:translate3d(100%,0,0) 即可, 在這里我們使用translate3d來代替translateX,translate3d可以主動開啟手機GPU加速渲染,頁面滑動更流暢。

2、主要思路

從手指放在屏幕上、滑動操作、再到離開屏幕是一個完整的操作過程,對應的操作會觸發如下事件:

手指放在屏幕上:ontouchstart

手指在屏幕上滑動:ontouchmove

手指離開屏幕:ontouchend

我們需要捕獲觸摸事件的這三個階段來完成頁面的滑動:

ontouchstart: 初始化變量, 記錄手指所在的位置,記錄當前時間

/*手指放在屏幕上*/document.addEventListener("touchstart",function(e){   e.preventDefault();   var touch = e.touches[0];   startX = touch.pageX;   startY = touch.pageY;   initialPos = currentPosition;   //本次滑動前的初始位置   viewport.style.webkitTransition = ""; //取消動畫效果   startT = new Date().getTime(); //記錄手指按下的開始時間   isMove = false; //是否產生滑動}.bind(this),false);

ontouchmove: 獲得當前所在位置,計算手指在屏幕上的移動差量deltaX,然后使頁面跟隨移動

/*手指在屏幕上滑動,頁面跟隨手指移動*/document.addEventListener("touchmove",function(e){   e.preventDefault();   var touch = e.touches[0];   var deltaX = touch.pageX - startX;   var deltaY = touch.pageY - startY;   //如果X方向上的位移大于Y方向,則認為是左右滑動   if (Math.abs(deltaX) > Math.abs(deltaY)){       moveLength = deltaX;       var translate = initialPos + deltaX; //當前需要移動到的位置       //如果translate>0 或 < maxWidth,則表示頁面超出邊界       if (translate <=0 && translate >= maxWidth){           //移動頁面           this.transform.call(viewport,translate);           isMove = true;       }       direction = deltaX>0?"right":"left"; //判斷手指滑動的方向   }}.bind(this),false);

ontouchend:手指離開屏幕時,計算屏幕最終停留在哪一頁。首先計算手指在屏幕上的停留時間deltaT,如果deltaT<300ms,則認為是快速滑動,相反則是慢速滑動,快速滑動和慢速滑動的處理是不同的:

如果是快速滑動,則讓當前頁面完整的停留在屏幕中央(需要計算當前頁面還有多少需要滑動)

如果是慢速滑動,還需要判斷手指在屏幕上滑動的距離,如果滑動的距離沒有超過屏幕寬度50%,則要回退到上一頁,相反則要停留在當前頁面

/*手指離開屏幕時,計算最終需要停留在哪一頁*/document.addEventListener("touchend",function(e){   e.preventDefault();   var translate = 0;   //計算手指在屏幕上停留的時間   var deltaT = new Date().getTime() - startT;   if (isMove){ //發生了左右滑動        //使用動畫過渡讓頁面滑動到最終的位置        viewport.style.webkitTransition = "0.3s ease -webkit-transform";        if(deltaT < 300){ //如果停留時間小于300ms,則認為是快速滑動,無論滑動距離是多少,都停留到下一頁            translate = direction == 'left'?            currentPosition-(pageWidth+moveLength):currentPosition+pageWidth-moveLength;            //如果最終位置超過邊界位置,則停留在邊界位置            translate = translate > 0 ? 0 : translate; //左邊界            translate = translate < maxWidth ? maxWidth : translate; //右邊界        }else {            //如果滑動距離小于屏幕的50%,則退回到上一頁            if (Math.abs(moveLength)/pageWidth < 0.5){                translate = currentPosition-moveLength;            }else{                //如果滑動距離大于屏幕的50%,則滑動到下一頁                translate = direction == 'left'?                currentPosition-(pageWidth+moveLength):currentPosition+pageWidth-moveLength;                translate = translate > 0 ? 0 : translate;                translate = translate < maxWidth ? maxWidth : translate;            }        }        //執行滑動,讓頁面完整的顯示到屏幕上        this.transform.call(viewport,translate);    }}.bind(this),false);

除此之外,還要計算當前頁面是第幾頁,并設置當前頁碼

//計算當前的頁碼pageNow = Math.round(Math.abs(translate) / pageWidth) + 1; setTimeout(function(){    //設置頁碼,DOM操作需要放到子線程中,否則會出現卡頓    this.setPageNow();}.bind(this),100);

基本的思路就這些,當然在實際操作過程中還有一些細節需要注意,這里就不詳細說了,都在代碼里能體現出來,源代碼已傳至github:https://github.com/git-onepixel/guesture

以上所述是小編給大家介紹的HTML5單頁面手勢滑屏切換原理分析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美麻豆久久久久久中文| 久久国产精品网站| 麻豆一区二区在线观看| 精品国产乱码久久久久久虫虫漫画| 色爱av美腿丝袜综合粉嫩av| 日韩国产激情在线| 91在线免费网站| 亚洲精品一区二区三区婷婷月| 亚洲色图在线观看| 日韩av影视在线| 久久久av免费| 中文字幕av一区二区| 欧美日韩第一页| 91在线观看欧美日韩| 日韩av一区二区在线| 在线视频亚洲欧美| 欧美一级片免费在线| 亚洲free性xxxx护士白浆| 懂色av影视一区二区三区| 9.1国产丝袜在线观看| 久久国产精品久久国产精品| 夜夜嗨av一区二区三区四区| 亚洲91精品在线| 国产在线播放91| 久久久久久成人精品| 国产裸体写真av一区二区| 97国产精品免费视频| 日韩经典一区二区三区| 亚洲深夜福利视频| 国产精品aaaa| 亚洲伊人第一页| 日韩精品极品视频| 黑人精品xxx一区| 一区二区三区视频免费| 在线观看不卡av| 久久久久国色av免费观看性色| 精品成人在线视频| 国产精品美女在线| 最新国产成人av网站网址麻豆| 久久精品国产69国产精品亚洲| 午夜精品视频在线| 日韩av电影在线免费播放| 欧美日韩中文字幕在线| 欧美大尺度在线观看| 久久久噜噜噜久久久| 97视频在线观看免费| 欧美一区第一页| 日韩精品999| 国产91在线播放| 欧美日本在线视频中文字字幕| 黑人巨大精品欧美一区二区三区| 国产精品欧美亚洲777777| 国产98色在线| 91精品国产免费久久久久久| 在线观看欧美成人| 国产精品露脸av在线| 在线观看成人黄色| 日韩激情av在线播放| 亚洲欧美一区二区三区四区| 国产精品久久久久久久美男| xxxxxxxxx欧美| 国产精品久久av| 亚洲女人被黑人巨大进入al| 欧美一级片在线播放| 91国产精品电影| 最近的2019中文字幕免费一页| 国产精品丝袜高跟| 亚洲九九九在线观看| 国产精品久久久久久av福利| 91sao在线观看国产| 国产精品一二三在线| 日本人成精品视频在线| 久久成人18免费网站| 一区二区三区国产视频| 日韩高清电影好看的电视剧电影| 97视频在线观看网址| 精品国偷自产在线视频99| 2019av中文字幕| 中文字幕一区日韩电影| 亚洲一级黄色片| 免费99精品国产自在在线| 国产日韩中文字幕在线| 亚洲女人天堂色在线7777| 久热精品视频在线免费观看| 日韩有码在线观看| 亚洲成人亚洲激情| 国产亚洲在线播放| 成人免费看片视频| 国产欧美日韩中文| 亚洲资源在线看| 国产欧美一区二区三区久久人妖| 亚洲欧美精品suv| 国产欧美日韩中文| 中文字幕日韩视频| 日韩成人在线观看| 亚洲欧美日韩成人| 日韩成人激情在线| 亚洲欧美日韩天堂| 日韩精品在线免费观看视频| 国产性猛交xxxx免费看久久| 国产国产精品人在线视| xxxxx91麻豆| 国产精品一区专区欧美日韩| 亚洲黄页网在线观看| 26uuu亚洲伊人春色| 日韩av色综合| 久久精品国产91精品亚洲| 亚洲精品在线观看www| 91在线视频九色| 91成人福利在线| 国产精品久久久久久久9999| 中文字幕日韩在线视频| 成人性生交大片免费看小说| 亚洲伦理中文字幕| 伊人久久久久久久久久久久久| 热99精品只有里视频精品| 97精品视频在线观看| 成人免费在线网址| 日本亚洲欧美成人| 久久福利视频网| 久久精品亚洲精品| 精品福利在线看| 91av视频在线免费观看| 亚洲成人在线视频播放| 欧美日韩国产精品一区二区三区四区| 欧美裸体xxxxx| 欧美日韩激情网| 视频一区视频二区国产精品| 欧美黑人国产人伦爽爽爽| 在线观看欧美www| 日本三级久久久| 亚洲日本aⅴ片在线观看香蕉| 精品国产一区二区三区久久久| 亚洲国产精品人久久电影| 亚洲国产女人aaa毛片在线| 久久69精品久久久久久久电影好| 久久伊人精品一区二区三区| 欧美性xxxx极品hd欧美风情| 91在线无精精品一区二区| 黄网动漫久久久| 日韩精品在线私人| 欧美理论电影网| 国产精品视频xxxx| 欧美激情一区二区三级高清视频| 日韩一区av在线| 欧美成人亚洲成人日韩成人| 免费不卡欧美自拍视频| 一区二区三区视频免费在线观看| 欧美日韩国产中文精品字幕自在自线| 亚洲a级在线播放观看| 亚洲综合色激情五月| 欧美大片免费观看| 国产精品96久久久久久| 欧美精品电影免费在线观看| 亚洲一区二区三区xxx视频| 欧美性视频网站| 伊是香蕉大人久久| 2019国产精品自在线拍国产不卡| 久久影院模特热| 国产精品吊钟奶在线| 国产精品揄拍一区二区| 欧美一区二区三区精品电影| 国产精品69久久久久| 国产在线精品成人一区二区三区|