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

首頁 > 編程 > HTML > 正文

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

2024-08-26 00:19:44
字體:
來源:轉載
供稿:網友

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

h5單頁面手勢滑屏切換,html5滑動切換頁面

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單頁面手勢滑屏切換原理分析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到HTML教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品jvid在线观看蜜臀| 亚洲精品国产综合区久久久久久久| 欧美性xxxx极品高清hd直播| 亚洲欧美日韩中文视频| 国产成人精品在线观看| 国内精品久久久久伊人av| 久久久久久亚洲| 免费99精品国产自在在线| www.午夜精品| 裸体女人亚洲精品一区| 欧美激情小视频| 久久国产精品久久精品| 91免费版网站入口| 日韩av片电影专区| 久久久久久久久久久av| 奇米影视亚洲狠狠色| 欧洲永久精品大片ww免费漫画| 国产精品久久久久久久久男| 伊人久久综合97精品| 国产精品中文字幕久久久| 亚洲xxx自由成熟| 中文字幕亚洲色图| 国产精品偷伦视频免费观看国产| 夜夜狂射影院欧美极品| 久久视频在线观看免费| 精品久久久91| 日韩大片免费观看视频播放| 亚洲毛片在线观看.| 久久久久久久久久久免费| 日韩av综合网| 精品国产1区2区| 亚洲精品国产综合区久久久久久久| 国产在线一区二区三区| 成人福利免费观看| 欧美一区三区三区高中清蜜桃| 国产成人一区二区三区小说| 亚洲一区二区国产| 久久99精品久久久久久噜噜| 亚洲a∨日韩av高清在线观看| 91人人爽人人爽人人精88v| 午夜精品蜜臀一区二区三区免费| 欧美性受xxx| 欧美最猛性xxxxx亚洲精品| 亚洲另类xxxx| 国产精品免费久久久久影院| 久久精品亚洲国产| 日韩影视在线观看| 色阁综合伊人av| 国产精品午夜视频| 国内揄拍国内精品| xx视频.9999.com| 欧美成人免费在线观看| 精品激情国产视频| 美女国内精品自产拍在线播放| 久久精品中文字幕| 97成人精品视频在线观看| 在线中文字幕日韩| 91精品国产九九九久久久亚洲| 亚洲成人久久久久| 91精品国产91久久久久| 成人欧美一区二区三区在线湿哒哒| 亚洲人av在线影院| 国产精品爱久久久久久久| 亚洲精品欧美极品| 国产精品三级久久久久久电影| 国产精品视频网站| 欧美激情xxxxx| 亚洲欧美日韩在线一区| 欧美激情中文字幕乱码免费| 国产精品福利久久久| 高清一区二区三区四区五区| 九九久久久久久久久激情| 国产在线精品成人一区二区三区| 国产精品一区二区久久久| 亚洲精品aⅴ中文字幕乱码| 亚洲精品一区av在线播放| 亚洲天堂av在线免费观看| 亚洲第一精品久久忘忧草社区| 精品欧美aⅴ在线网站| 欧美激情a在线| 日韩毛片在线看| 日韩欧美国产视频| 国模精品系列视频| 国产性猛交xxxx免费看久久| 影音先锋日韩有码| 欧美激情一区二区三区高清视频| 欧美精品videos性欧美| 国产精品久久久一区| 爽爽爽爽爽爽爽成人免费观看| 欧美激情国产高清| 久久在线免费视频| 在线观看日韩av| 欧美大片在线免费观看| 亚洲精品一区中文| 欧美日韩在线视频首页| 上原亚衣av一区二区三区| 欧美日韩在线免费观看| 国产精品露脸自拍| 91精品在线一区| 成人h视频在线| 欧美大成色www永久网站婷| 亚洲无亚洲人成网站77777| 欧美日韩视频在线| 色综合久综合久久综合久鬼88| 国产成人av在线播放| 欧美极品美女视频网站在线观看免费| 欧美成在线视频| 97国产精品视频人人做人人爱| 热久久99这里有精品| 久久偷看各类女兵18女厕嘘嘘| 久久国产精品影视| 国产日韩精品在线| 国产精品一区二区三区久久| 亚洲最大福利视频网| 色婷婷久久一区二区| 亚洲欧美日韩第一区| 性色av一区二区三区红粉影视| 久久伊人91精品综合网站| 亚洲综合在线播放| 欧美精品一区二区三区国产精品| 国产精品老女人视频| 欧美激情亚洲自拍| 久久久久久久一区二区三区| 久久综合九色九九| 欧美老女人在线视频| 日韩在线视频线视频免费网站| 成人免费福利在线| 亚洲影院色无极综合| 亚洲第一av网| 国产中文字幕亚洲| 亚洲第一页在线| 久久精品久久精品亚洲人| 亚洲天堂av高清| 国产激情久久久| 国产精品青草久久久久福利99| 亚洲无亚洲人成网站77777| 亚洲欧美日韩高清| 国产精品女主播视频| 成人性生交xxxxx网站| 欧美日韩一区二区免费在线观看| 在线精品高清中文字幕| 亚洲图片在区色| 色偷偷av亚洲男人的天堂| 91久久久久久久| 国产在线久久久| 自拍偷拍亚洲一区| 国产精品一区二区三区久久| 国产精品久久久久久久久久尿| 这里精品视频免费| 亚洲综合最新在线| 日韩在线观看免费| 一区二区三区 在线观看视| 精品亚洲夜色av98在线观看| 国产美女精品视频免费观看| 久久天天躁狠狠躁夜夜躁2014| 亚洲一区二区三区香蕉| 97精品免费视频| 欧美极品xxxx| 久热在线中文字幕色999舞| 韩日精品中文字幕| 国产精品亚洲片夜色在线| 国产亚洲成av人片在线观看桃| 欧美一级片免费在线| 久久久精品一区|