html5之移動觸屏事件


 

以下是幾種普及得比較好的觸摸事件,可以在絕大多數現代瀏覽器中來測試這一事件(必須是觸屏設備): (on)touchstart:觸摸開始的時候觸發 (on)touchmove:手指在屏幕上滑動的時候觸發 (on)touchend:觸摸結束的時候觸發 (on)touchcancel:系統取消touch事件的時候觸發。例如電話接入或者彈出信息。一般用在游戲:玩着的時候,突然來電話了,就觸發touchcancel事件暫停游戲、存檔等操作。

而每個觸摸事件都包括了三個觸摸對象列表,每個列表里包含了對應的一系列觸摸點(觸摸對象,用來實現多點觸控): touches:當前位於屏幕上的所有手指的列表。 targetTouches:位於當前DOM元素上手指的列表。 changedTouches:涉及當前事件手指的列表。

每個觸摸點由包含了如下觸摸信息(常用): identifier:一個數值,touch對象的unique ID ,唯一標識觸摸會話(touch session)中的當前手指。一般為從0開始的流水號(android4.1,uc) target:DOM元素,是動作所針對的目標。 client / clientY:觸摸點相對於瀏覽器窗口viewport的位置,不包含滾動距離 pageX / pageY:觸摸點相對於頁面的位置,包含滾動距離 screenX /screenY:觸摸點相對於屏幕的位置 radiusX/radiusY/rotationAngle:畫出大約相當於手指形狀的橢圓形,分別為橢圓形的兩個半徑和旋轉角度。初步測試瀏覽器不支持,好在功能不常用。 有了這些信息,就可以依據這些事件信息為用戶提供不同的反饋了。

 Touch事件與Mouse事件的出發關系 在觸屏操作后,手指提起的一剎那(即發生touchend后),系統會判斷接收到事件的element的內容是否被改變, 如果內容被改變,會解析為touch事件,接下來的click事件都不會觸發, 如果內容沒有改變,則會解析為click事件,按照mousedown,mouseup,click的順序觸發事件。 特別需要提到的是,在解析為click事件時,只有再觸發一個觸屏事件時,才會觸發上一個事件的mouseout事件。 因此有關於hover的小技巧,當點擊過一個按鈕之后,這個按鈕就會一直處於hover的狀態,此時基於這個偽類所設置的css也是起作用的,直到用手指點擊另外一個地方,才會完成mouseout事件。

gesture事件(手勢事件) 與touch事件相近,也用得很多的是gesture事件,這個事件將在下一篇講到。

touch事件demo

<meta name="viewport" content="width=device-width,height=device-height,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=0">
<div id="canvas">
 <div id="move"></div>
 </div>
<style>
 *{margin:0;padding:0;}
 html,body{ width:100%;height:100%;}
 #canvas{position:relative;width:100%;height:100%;}
 #move{position:absolute;width:100px;height:100px;background:#0F0;}
 .spirit {position:absolute;width:50px;height:50px;background-color:red;}
 </style>
<script>
 var canvas = document.getElementById("canvas");
 var spirit, startX, startY;
 var a = 1;
 // touch start listener
 function touchStart(event) {
 event.preventDefault();
 if (spirit ||! event.touches.length) return;
 var touch = event.touches[0];
 startX = touch.pageX;
 startY = touch.pageY;
 spirit = document.createElement("div");
 spirit.className = "spirit";
 spirit.style.left = startX - 50 + "px";
 spirit.style.top = startY - 50 + "px";
 canvas.appendChild(spirit);
 spirit.innerHTML = a++;
 }
 // touch move listener
 function touchMove(event) {
 event.preventDefault();
 if (!spirit || !event.touches.length) return;
 var touch = event.touches[0];
 //spirit.style.left = touch.pageX - 50 + "px";
 //spirit.style.top = touch.pageY - 50 + "px";
 //或者用下面的
 var x = touch.pageX - startX;
 var y = touch.pageY - startY;
 spirit.style.webkitTransform = 'translate(' + x + 'px, ' + y + 'px)';
 }
 // touch end listener
 function touchEnd(event) {
 if (!spirit) return;
 canvas.removeChild(spirit);
 spirit = null;
 }
 // add touch start listener
 canvas.addEventListener("touchstart", touchStart, false);
 canvas.addEventListener("touchmove", touchMove, false);
 canvas.addEventListener("touchend", touchEnd, false);
 </script>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM