移動(dòng)端基礎(chǔ)事件總結(jié)與應(yīng)用
1.觸摸事件touch
touchstart 手指放在屏幕上觸發(fā)
touchmove 手指在屏幕上移動(dòng),連續(xù)觸發(fā)
touchend 手指離開(kāi)屏幕觸發(fā)
touchcancel 當(dāng)系統(tǒng)停止跟蹤時(shí)觸發(fā),該事件暫時(shí)用不到
注意:
1.移動(dòng)端只能事件只能通過(guò)監(jiān)聽(tīng)函數(shù)添加,不能用on添加
2.移動(dòng)端當(dāng)中就不要用鼠標(biāo)的事件
3.移動(dòng)端的事件會(huì)觸發(fā)瀏覽器的默認(rèn)行為,所以在調(diào)用事件的時(shí)候要把默認(rèn)行為阻止了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='手指移動(dòng)了'; }); box.addEventListener('touchend',function(){ this.innerHTML='手指離開(kāi)了'; });
2.touch事件對(duì)象
ev.touches 當(dāng)前屏幕的手指列表
ev.targetTouches 當(dāng)前元素上的手指列表
ev.changedTouches 觸發(fā)當(dāng)前事件的手指列表
每個(gè)touch對(duì)象都包含了以下幾個(gè)屬性(打印ev.touches如下):
clientX //觸摸目標(biāo)在視口中的X坐標(biāo)。
clientY //觸摸目標(biāo)在視口中的Y坐標(biāo)。
Identifier //標(biāo)示觸摸的唯一ID。
pageX //觸摸目標(biāo)在頁(yè)面中的X坐標(biāo)。
pageY //觸摸目標(biāo)在頁(yè)面中的Y坐標(biāo)。
screenX//觸摸目標(biāo)在屏幕中的X坐標(biāo)。
screenY //觸摸目標(biāo)在屏幕中的Y坐標(biāo)。
target // 觸摸的DOM節(jié)點(diǎn)目標(biāo)。
demo:
var box=document.getElementById("box"); //相當(dāng)于mousedown box.addEventListener('touchstart',function(ev){ //console.log(ev.touches); this.innerHTML=ev.touches.length;//按下手指數(shù) });
3.設(shè)備加速度事件devicemotion
devicemotion 封裝了運(yùn)動(dòng)傳感器數(shù)據(jù)的事件,可以獲取手機(jī)運(yùn)動(dòng)狀態(tài)下的運(yùn)動(dòng)加速度等數(shù)據(jù)。
其中加速度的數(shù)據(jù)包含以下三個(gè)方向:
x:橫向貫穿手機(jī)屏幕;
y:縱向貫穿手機(jī)屏幕;
z:垂直手機(jī)屏幕
鑒于有些設(shè)備沒(méi)有排除重力的影響,所以該事件會(huì)返回兩個(gè)屬性:
1、accelerationIncludingGravity(含重力的加速度)
2、acceleration(排除重力影響的加速度)
注意:這個(gè)事件只能放在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:方塊跟著重力左右移動(dòng)
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:搖一搖應(yīng)用原理
var box=document.getElementById('box'); var lastRange=0; //上一次搖晃的幅度 var isShake=false; //決定用戶(hù)到底有沒(méi)有大幅度搖晃 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; //當(dāng)前搖晃的幅度 if(range-lastRange>100){ //這個(gè)條件成立說(shuō)明用戶(hù)現(xiàn)在已經(jīng)在大幅度搖晃 isShake=true; } if(isShake && range<50){ //這個(gè)條件成立,說(shuō)明用戶(hù)搖晃的幅度很小了就要停了 box.innerHTML='搖晃了'; isShake=false; } });
4.設(shè)備方向事件deviceorientation
deviceorientation 封裝了方向傳感器數(shù)據(jù)的事件,可以獲取手機(jī)靜止?fàn)顟B(tài)下的方向數(shù)據(jù)(手機(jī)所處的角度、方位和朝向等)
ev.beta 表示設(shè)備在x軸上的旋轉(zhuǎn)角度,范圍為-180~180。它描述的是設(shè)備由前向后旋轉(zhuǎn)的情況。
ev.gamma 表示設(shè)備在y軸上的旋轉(zhuǎn)角度,范圍為-90~90。它描述的是設(shè)備由左向右旋轉(zhuǎn)的情況。
ev.alpha 表示設(shè)備沿z軸上的旋轉(zhuǎn)角度,范圍為0~360。
注意:這個(gè)事件只能放在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.手勢(shì)事件gesture
IOS的Safari還引入了一組手勢(shì)事件。當(dāng)兩個(gè)手指觸摸屏幕時(shí)就會(huì)產(chǎn)生手勢(shì),手勢(shì)通常會(huì)改變顯示項(xiàng)的大小,或者旋轉(zhuǎn)顯示項(xiàng)。有三個(gè)手勢(shì)事件,分別如下:
gesturestart 當(dāng)一個(gè)手指已經(jīng)按在屏幕上,而另一個(gè)手指又觸摸在屏幕時(shí)觸發(fā)
gesturechange 當(dāng)觸摸屏幕的任何一個(gè)手指的位置發(fā)生改變的時(shí)候觸發(fā)
gestureend 當(dāng)任何一個(gè)手指從屏幕上面移開(kāi)時(shí)觸發(fā)
ev.rotation 表示手指變化引起的旋轉(zhuǎn)角度,負(fù)值表示逆時(shí)針,正值表示順時(shí)針,從0開(kāi)始。
ev.scale 表示兩個(gè)手指之間的距離情況,向內(nèi)收縮會(huì)縮短距離,這個(gè)值從1開(kāi)始,并隨距離拉大而增長(zhǎng)。
注意:
1. gesture事件目前只有 IOS 2.0以上支持,安卓的暫時(shí)沒(méi)有支持。
2. 一定要阻止瀏覽器的默認(rèn)行為。
demo1:多指旋轉(zhuǎn)
var startDeg=0; //上次旋轉(zhuǎn)后的角度 //兩個(gè)或者兩個(gè)以上手指按下 box.addEventListener('gesturestart',function(){ this.style.background='blue'; //rotate(90deg) if(this.style.transform){ startDeg=parseFloat(this.style.transform.split('(')[1]); } }); //兩個(gè)或者兩個(gè)以上手指變換 box.addEventListener('gesturechange',function(ev){ /*this.style.background='black'; this.innerHTML=ev.rotation;*/ this.style.transform='rotate('+(ev.rotation+startDeg)+'deg)'; }); //兩個(gè)或者兩個(gè)以上手指抬起 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; //上次縮放后的角度 //兩個(gè)或者兩個(gè)以上手指按下 box.addEventListener('gesturestart',function(){ this.style.background='blue'; //rotate(90deg) if(this.style.transform){ startScale=parseFloat(this.style.transform.split('(')[1]); } }); //兩個(gè)或者兩個(gè)以上手指變換 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;//設(shè)置最小縮放到0.5 this.style.transform='scale('+sc+')'; }); //兩個(gè)或者兩個(gè)以上手指抬起 box.addEventListener('gestureend',function(){ this.style.background='green'; });
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
iframe與主框架跨域相互訪(fǎng)問(wèn)實(shí)現(xiàn)方法
今天正好需要用到iframe 與主框架相互訪(fǎng)問(wèn)的實(shí)現(xiàn)方法,正好看到了這篇文章,確實(shí)不錯(cuò),特分享一下,需要的朋友可以參考下2017-09-09js中單引號(hào)與雙引號(hào)沖突問(wèn)題解決方法
這篇文章介紹了js中單引號(hào)與雙引號(hào)沖突問(wèn)題解決方法,有需要的朋友可以參考一下2013-10-10微信小程序?qū)嵺`之動(dòng)態(tài)控制組件的顯示/隱藏功能
這篇文章主要介紹了微信小程序?qū)嵺`之動(dòng)態(tài)控制組件的顯示/隱藏功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07layui動(dòng)態(tài)表頭的實(shí)現(xiàn)代碼
這篇文章主要介紹了layui動(dòng)態(tài)表頭的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08JS內(nèi)置對(duì)象和Math對(duì)象知識(shí)點(diǎn)詳解
在本篇文章里小編給大家分享的是關(guān)于JS內(nèi)置對(duì)象和Math對(duì)象知識(shí)點(diǎn)詳解內(nèi)容,有需要的朋友們可以參考下。2020-04-04微信小程序完美解決scroll-view高度自適應(yīng)問(wèn)題的方法
這篇文章主要介紹了微信小程序完美解決scroll-view高度自適應(yīng)問(wèn)題的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08