移動端觸摸事件

移動端

一酗昼、定義

觸摸事件類型

touchstart:手指觸摸到一個 DOM 元素時觸發(fā)。
touchmove:手指在一個 DOM 元素上滑動時觸發(fā)麻削。
touchend:手指從一個 DOM 元素上移開時觸發(fā)。
touchcancel 當一些更高級別的事件發(fā)生的時候(如電話接入或者彈出信息)會取消當前的touch操作叠荠,即觸發(fā)touchcancel扫责。一般會在touchcancel時暫停游戲、存檔等操作。

二抡笼、接口

TouchEvent

TouchEvent的屬性繼承了 UIEventEvent黄鳍。
其中三個主要屬性:
TouchEvent.changedTouches:一個 TouchList對象,包含了代表所有從上一次觸摸事件到此次事件過程中拾碌,狀態(tài)發(fā)生了改變的觸點的 Touch對象街望。

TouchEvent.targetTouches: 一個 TouchList 對象,是包含了如下觸點的 Touch 對象:觸摸起始于當前事件的目標 element 上灾前,并且仍然沒有離開觸摸平面的觸點。

TouchEvent.touches: 一 個 TouchList 對象蔫敲,包含了所有當前接觸觸摸平面的觸點的 Touch 對象炭玫,無論它們的起始于哪個 element 上,也無論它們狀態(tài)是否發(fā)生了變化吞加。

TouchList

一個TouchList代表一個觸摸屏幕上所有觸點的列表。
事件對應的三個列表包含了當前事件的一些相關信息叶圃,比如:一些坐標信息践图。

Touch

?Touch
1、屬性

TouchList

上面就是一個 TouchList 列表德崭。它對應的就是前面提到的三種事件(touchstart揖盘、touchmove、touchend)中的一種扣讼,在觸發(fā)時生成的一個對象列表。列表里最有用的就是 Touch 對象了荔燎,Touch 對象里存放著對應事件的一些相關的信息,我們就是通過這種個事件里這些屬性的結合來實現(xiàn)各種效果琐簇。

三座享、示例:

1、拖拽元素

思路:

獲取按下時和選中元素的坐標渣叛。獲取相對于元素偏移的位置。根據(jù)當前的按下的位置減去元素偏移的位置蘑秽。得到元素拖拽后的位置箫攀。在利用CSS定位和left、top屬性實現(xiàn)滑動的效果靴跛。

var moveElem = document.querySelector('.move'); //待拖拽元素      
var dragging; //是否激活拖拽狀態(tài)
var tLeft, tTop;
moveElem.addEventListener("touchstart", function (e) {
      dragging = true;
      var moveElemRect = moveElem.getBoundingClientRect();
      tLeft = e.touches[0].pageX - moveElemRect.left; //按下時和選中元素的坐標偏移:x坐標
      tTop = e.touches[0].pageY - moveElemRect.top; //按下時和選中元素的坐標偏移:y坐標
});
moveElem.addEventListener('touchmove', function(e) {
      if (dragging) {
          var moveX = e.touches[0].pageX - tLeft, 
                moveY = e.touches[0].pageY - tTop;
          moveElem.style.left = moveX + 'px';
          moveElem.style.top = moveY + 'px';
      }
});
moveElem.addEventListener('touchend', function(e) {
      dragging = false;
});

getBoundingClientRect:Element.getBoundingClientRect() 方法返回元素的大小及其相對于視口的位置梢睛。

2、長按

思路:

在touchstart中開啟一個定時器扬绪,比如在700ms后顯示一個長按菜單
在touchend中清除這個定時器,這樣如果按下的時間超過700ms,那么長按菜單已經(jīng)顯示出來了种蘸,清除定時器不會有任何影響;如果按下的時間小于700ms诫硕,那么touchstart中的長按菜單還沒來得及顯示出來刊侯,就被清除了。

label.addEventListener('touchstart', function () {
      startTime = +new Date()
      timer = setTimeout(function () {
          // 處理長按
      }, 700)
 })
label.addEventListener('touchend', function () {
      endTime = +new Date()
      clearTimeout(timer)
      if (endTime - startTime < 700) {
          // 處理點擊事件
      }
 });

3藕届、兩指放大縮小操作

思路:

計算一開始兩指放在屏幕上時之間的距離x。在兩指滑動時休偶,再計算兩指之間的距離y。x/y=縮放的比例词顾。

實現(xiàn)

默認事件

在移動端手指操作時會默認觸發(fā)一些行為碱妆,比如:滾動,縮放疹尾。上面的例子由于沒有阻止觸摸事件的默認行為導致的。所以當你測試上面例子時睡雇,頁面很容易發(fā)生縮放行為饮醇,影響到測試效果。想阻止觸摸事件的默認行為非常地簡單朴艰,只需要添加如下代碼就可以了:

document.addEventListener("touchstart", function (e) {
    e.preventDefault();
});
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末祠墅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子亲茅,更是在濱河造成了極大的恐慌狗准,老刑警劉巖克锣,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件袭祟,死亡現(xiàn)場離奇詭異捞附,居然都是意外死亡您没,警方通過查閱死者的電腦和手機胆绊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喻犁,“玉大人何缓,你說我怎么就攤上這事÷道” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵慨蛙,是天一觀的道長纪挎。 經(jīng)常有香客問我,道長通砍,這世上最難降的妖魔是什么烤蜕? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮虎忌,結果婚禮上橱鹏,老公的妹妹穿的比我還像新娘。我一直安慰自己蚀瘸,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寂嘉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪泉孩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天珍昨,我揣著相機與錄音句喷,去河邊找鬼。 笑死兄春,一個胖子當著我的面吹牛,可吹牛的內容都是我干的赶舆。 我是一名探鬼主播祭饭,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼九串!你這毒婦竟也來了悠咱?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤躬贡,失蹤者是張志新(化名)和其女友劉穎眼坏,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宰译,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡沿侈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了咳短。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡篡腌,死狀恐怖勾效,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情层宫,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布缀台,位于F島的核電站哮奇,受9級特大地震影響,放射性物質發(fā)生泄漏鼎俘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一勘天、第九天 我趴在偏房一處隱蔽的房頂上張望捉邢。 院中可真熱鬧,春花似錦伏伐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至末贾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間圈暗,已是汗流浹背裕膀。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留寸齐,地道東北人抄谐。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像蛹含,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吸耿,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容

  • 其實就是一個TouchEvent對象+上Vue的自定義事件酷窥,實現(xiàn)移動端的上滑、下滑妆棒、左滑沸伏、右滑,長按毅糟、點擊 組件 ...
    廢棄的種子閱讀 6,082評論 0 0
  • 15.1 移動端常見特效 15.1.1 案例講解-攜程移動端輪播圖 1.引入相關js 文件2.復制HTML 結構3...
    Anwfly閱讀 549評論 0 1
  • 移動端觸摸事件添加方式值能用 addEventListeber(),方式綁定 移動觸摸事件有4個: 1留特、touch...
    山間的樹閱讀 374評論 0 0
  • 觸摸事件 touchstart:當手指觸摸屏幕時觸發(fā);即使已經(jīng)有一個手指放在屏幕上也會觸發(fā)苟蹈。touchmove:當...
    cshooting閱讀 235評論 0 0
  • http://action.weixin.qq.com/payact/readtemplate?t=mobile/...
    jh2k15閱讀 129評論 0 0