您好,登錄后才能下訂單哦!
1.觸摸事件touch
touchstart 手指放在屏幕上觸發
touchmove 手指在屏幕上移動,連續觸發
touchend 手指離開屏幕觸發
touchcancel 當系統停止跟蹤時觸發,該事件暫時用不到
注意:
1.移動端只能事件只能通過監聽函數添加,不能用on添加
2.移動端當中就不要用鼠標的事件
3.移動端的事件會觸發瀏覽器的默認行為,所以在調用事件的時候要把默認行為阻止了ev.preventDefault。
demo:
document.addEventListener('touchstart',function(ev){ ev.preventDefault(); }); var box=document.getElementById("box"); box.addEventListener('touchstart',function(){ this.innerHTML='手指按下了'; }); box.addEventListener('touchmove',function(){ this.innerHTML='手指移動了'; }); box.addEventListener('touchend',function(){ this.innerHTML='手指離開了'; });
2.touch事件對象
ev.touches 當前屏幕的手指列表
ev.targetTouches 當前元素上的手指列表
ev.changedTouches 觸發當前事件的手指列表
每個touch對象都包含了以下幾個屬性(打印ev.touches如下):
clientX //觸摸目標在視口中的X坐標。
clientY //觸摸目標在視口中的Y坐標。
Identifier //標示觸摸的唯一ID。
pageX //觸摸目標在頁面中的X坐標。
pageY //觸摸目標在頁面中的Y坐標。
screenX//觸摸目標在屏幕中的X坐標。
screenY //觸摸目標在屏幕中的Y坐標。
target // 觸摸的DOM節點目標。
demo:
var box=document.getElementById("box"); //相當于mousedown box.addEventListener('touchstart',function(ev){ //console.log(ev.touches); this.innerHTML=ev.touches.length;//按下手指數 });
3.設備加速度事件devicemotion
devicemotion 封裝了運動傳感器數據的事件,可以獲取手機運動狀態下的運動加速度等數據。
其中加速度的數據包含以下三個方向:
x:橫向貫穿手機屏幕;
y:縱向貫穿手機屏幕;
z:垂直手機屏幕
鑒于有些設備沒有排除重力的影響,所以該事件會返回兩個屬性:
1、accelerationIncludingGravity(含重力的加速度)
2、acceleration(排除重力影響的加速度)
注意:這個事件只能放在window身上
demo1:顯示重力加速度的值
window.addEventListener('devicemotion',function(ev){ var motion=ev.accelerationIncludingGravity; box.innerHTML='x:'+motion.x+'<br/>'+'y:'+motion.y+'<br/>'+'z:'+motion.z; });
demo2:方塊跟著重力左右移動
window.addEventListener('devicemotion',function(ev){ var motion=ev.accelerationIncludingGravity; var x=parseFloat(getComputedStyle(box).left);//box目前的left值 box.style.left=x+motion.x+'px'; });
demo3:搖一搖應用原理
var box=document.getElementById('box'); var lastRange=0; //上一次搖晃的幅度 var isShake=false; //決定用戶到底有沒有大幅度搖晃 window.addEventListener('devicemotion',function(ev){ var motion=ev.accelerationIncludingGravity; var x=Math.abs(motion.x); var y=Math.abs(motion.y); var z=Math.abs(motion.z); var range=x+y+z; //當前搖晃的幅度 if(range-lastRange>100){ //這個條件成立說明用戶現在已經在大幅度搖晃 isShake=true; } if(isShake && range<50){ //這個條件成立,說明用戶搖晃的幅度很小了就要停了 box.innerHTML='搖晃了'; isShake=false; } });
4.設備方向事件deviceorientation
deviceorientation 封裝了方向傳感器數據的事件,可以獲取手機靜止狀態下的方向數據(手機所處的角度、方位和朝向等)
ev.beta 表示設備在x軸上的旋轉角度,范圍為-180~180。它描述的是設備由前向后旋轉的情況。
ev.gamma 表示設備在y軸上的旋轉角度,范圍為-90~90。它描述的是設備由左向右旋轉的情況。
ev.alpha 表示設備沿z軸上的旋轉角度,范圍為0~360。
注意:這個事件只能放在window身上
demo:
window.addEventListener('deviceorientation',function(ev){ box.innerHTML='x軸傾斜:'+ev.beta.toFixed(1)+'</br>y軸傾斜:'+ev.gamma.toFixed(1)+'</br>z軸傾斜:'+ev.alpha.toFixed(1); });
5.手勢事件gesture
IOS的Safari還引入了一組手勢事件。當兩個手指觸摸屏幕時就會產生手勢,手勢通常會改變顯示項的大小,或者旋轉顯示項。有三個手勢事件,分別如下:
gesturestart 當一個手指已經按在屏幕上,而另一個手指又觸摸在屏幕時觸發
gesturechange 當觸摸屏幕的任何一個手指的位置發生改變的時候觸發
gestureend 當任何一個手指從屏幕上面移開時觸發
ev.rotation 表示手指變化引起的旋轉角度,負值表示逆時針,正值表示順時針,從0開始。
ev.scale 表示兩個手指之間的距離情況,向內收縮會縮短距離,這個值從1開始,并隨距離拉大而增長。
注意:
1. gesture事件目前只有 IOS 2.0以上支持,安卓的暫時沒有支持。
2. 一定要阻止瀏覽器的默認行為。
demo1:多指旋轉
var startDeg=0; //上次旋轉后的角度 //兩個或者兩個以上手指按下 box.addEventListener('gesturestart',function(){ this.style.background='blue'; //rotate(90deg) if(this.style.transform){ startDeg=parseFloat(this.style.transform.split('(')[1]); } }); //兩個或者兩個以上手指變換 box.addEventListener('gesturechange',function(ev){ /*this.style.background='black'; this.innerHTML=ev.rotation;*/ this.style.transform='rotate('+(ev.rotation+startDeg)+'deg)'; }); //兩個或者兩個以上手指抬起 box.addEventListener('gestureend',function(){ this.style.background='green'; });
demo2:多指縮放
document.addEventListener('touchstart',function(ev){ ev.preventDefault(); }); document.addEventListener('touchmove',function(ev){ ev.preventDefault(); }); var box=document.getElementById("box"); var startScale=1; //上次縮放后的角度 //兩個或者兩個以上手指按下 box.addEventListener('gesturestart',function(){ this.style.background='blue'; //rotate(90deg) if(this.style.transform){ startScale=parseFloat(this.style.transform.split('(')[1]); } }); //兩個或者兩個以上手指變換 box.addEventListener('gesturechange',function(ev){ /*this.style.background='black'; this.innerHTML=ev.rotation;*/ var sc=ev.scale*startScale; sc=sc<0.5?0.5:sc;//設置最小縮放到0.5 this.style.transform='scale('+sc+')'; }); //兩個或者兩個以上手指抬起 box.addEventListener('gestureend',function(){ this.style.background='green'; });
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持億速云!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。