国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

移動端基礎(chǔ)事件總結(jié)與應用

2019-11-19 17:58:37
字體:
供稿:網(wǎng)友

1.觸摸事件touch

    touchstart      手指放在屏幕上觸發(fā)

    touchmove    手指在屏幕上移動,連續(xù)觸發(fā)

    touchend       手指離開屏幕觸發(fā)

    touchcancel   當系統(tǒng)停止跟蹤時觸發(fā),該事件暫時用不到

注意:

  1.移動端只能事件只能通過監(jiān)聽函數(shù)添加,不能用on添加

  2.移動端當中就不要用鼠標的事件

  3.移動端的事件會觸發(fā)瀏覽器的默認行為,所以在調(diào)用事件的時候要把默認行為阻止了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  觸發(fā)當前事件的手指列表

   每個touch對象都包含了以下幾個屬性(打印ev.touches如下):

       clientX  //觸摸目標在視口中的X坐標。

       clientY  //觸摸目標在視口中的Y坐標。

       Identifier   //標示觸摸的唯一ID。

       pageX  //觸摸目標在頁面中的X坐標。

       pageY  //觸摸目標在頁面中的Y坐標。

       screenX//觸摸目標在屏幕中的X坐標。

       screenY //觸摸目標在屏幕中的Y坐標。

       target // 觸摸的DOM節(jié)點目標。

demo:

var box=document.getElementById("box");//相當于mousedownbox.addEventListener('touchstart',function(ev){ //console.log(ev.touches); this.innerHTML=ev.touches.length;//按下手指數(shù)});

3.設(shè)備加速度事件devicemotion

  devicemotion    封裝了運動傳感器數(shù)據(jù)的事件,可以獲取手機運動狀態(tài)下的運動加速度等數(shù)據(jù)。

  其中加速度的數(shù)據(jù)包含以下三個方向:

   x:橫向貫穿手機屏幕;

   y:縱向貫穿手機屏幕;

   z:垂直手機屏幕

鑒于有些設(shè)備沒有排除重力的影響,所以該事件會返回兩個屬性:

   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){ //這個條件成立說明用戶現(xiàn)在已經(jīng)在大幅度搖晃 isShake=true; } if(isShake && range<50){ //這個條件成立,說明用戶搖晃的幅度很小了就要停了 box.innerHTML='搖晃了'; isShake=false; }});

4.設(shè)備方向事件deviceorientation

   deviceorientation  封裝了方向傳感器數(shù)據(jù)的事件,可以獲取手機靜止狀態(tài)下的方向數(shù)據(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。

   注意:這個事件只能放在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還引入了一組手勢事件。當兩個手指觸摸屏幕時就會產(chǎn)生手勢,手勢通常會改變顯示項的大小,或者旋轉(zhuǎn)顯示項。有三個手勢事件,分別如下:

 gesturestart        當一個手指已經(jīng)按在屏幕上,而另一個手指又觸摸在屏幕時觸發(fā)
 gesturechange   當觸摸屏幕的任何一個手指的位置發(fā)生改變的時候觸發(fā)
 gestureend         當任何一個手指從屏幕上面移開時觸發(fā)
 ev.rotation          表示手指變化引起的旋轉(zhuǎn)角度,負值表示逆時針,正值表示順時針,從0開始。
 ev.scale              表示兩個手指之間的距離情況,向內(nèi)收縮會縮短距離,這個值從1開始,并隨距離拉大而增長。

注意:

  1. gesture事件目前只有 IOS 2.0以上支持,安卓的暫時沒有支持。

  2. 一定要阻止瀏覽器的默認行為。

demo1:多指旋轉(zhuǎn)

var startDeg=0; //上次旋轉(zhuǎn)后的角度//兩個或者兩個以上手指按下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;//設(shè)置最小縮放到0.5 this.style.transform='scale('+sc+')';});//兩個或者兩個以上手指抬起box.addEventListener('gestureend',function(){ this.style.background='green';});

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網(wǎng)!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 洛川县| 花垣县| 吉首市| 普宁市| 牟定县| 乐都县| 封开县| 龙游县| 开阳县| 乌鲁木齐市| 怀远县| 景洪市| 广平县| 怀远县| 沿河| 陇西县| 青海省| 乌审旗| 深州市| 囊谦县| 浦江县| 太白县| 金华市| 手机| 绍兴市| 都江堰市| 甘泉县| 西乡县| 贵阳市| 梧州市| 巩义市| 犍为县| 金塔县| 梓潼县| 周宁县| 大田县| 赤水市| 文安县| 阿拉善左旗| 烟台市| 天水市|