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

首頁 > 開發 > HTML5 > 正文

HTML5觸摸事件(touchstart、touchmove和touchend)的實現

2024-09-05 07:23:27
字體:
來源:轉載
供稿:網友

HTML5中新添加了很多事件,但是由于他們的兼容問題不是很理想,應用實戰性不是太強,所以在這里基本省略,咱們只分享應用廣泛兼容不錯的事件,日后隨著兼容情況提升以后再陸續添加分享。今天為大家介紹的事件主要是觸摸事件:touchstart、touchmove和touchend。

一開始觸摸事件touchstart、touchmove和touchend是iOS版Safari瀏覽器為了向開發人員傳達一些信息新添加的事件。因為iOs設備既沒有鼠標也沒有鍵盤,所以在為移動Safari瀏覽器開發交互性網頁的時候,PC端的鼠標和鍵盤事件是不夠用的。

在iPhone 3Gs發布的時候,其自帶的移動Safari瀏覽器就提供了一些與觸摸(touch)操作相關的新事件。隨后,Android上的瀏覽器也實現了相同的事件。觸摸事件(touch)會在用戶手指放在屏幕上面的時候、在屏幕上滑動的時候或者是從屏幕上移開的時候出發。下面具體說明:

  • touchstart事件:當手指觸摸屏幕時候觸發,即使已經有一個手指放在屏幕上也會觸發。
  • touchmove事件:當手指在屏幕上滑動的時候連續地觸發。在這個事件發生期間,調用preventDefault()事件可以阻止滾動。
  • touchend事件:當手指從屏幕上離開的時候觸發。
  • touchcancel事件:當系統停止跟蹤觸摸的時候觸發。關于這個事件的確切出發時間,文檔中并沒有具體說明,咱們只能去猜測了。

上面的這些事件都會冒泡,也都可以取消。雖然這些觸摸事件沒有在DOM規范中定義,但是它們卻是以兼容DOM的方式實現的。所以,每個觸摸事件的event對象都提供了在鼠標實踐中常見的屬性:bubbles(起泡事件的類型)、cancelable(是否用 preventDefault() 方法可以取消與事件關聯的默認動作)、clientX(返回當事件被觸發時,鼠標指針的水平坐標)、clientY(返回當事件觸發時,鼠標指針的垂直坐標)、screenX(當某個事件被觸發時,鼠標指針的水平坐標)和screenY(返回當某個事件被觸發時,鼠標指針的垂直坐標)。除了常見的DOM屬性,觸摸事件還包含下面三個用于跟蹤觸摸的屬性。

  • touches:表示當前跟蹤的觸摸操作的touch對象的數組。
  • targetTouches:特定于事件目標的Touch對象的數組。
  • changeTouches:表示自上次觸摸以來發生了什么改變的Touch對象的數組。

每個Touch對象包含的屬性如下。

  • clientX:觸摸目標在視口中的x坐標。
  • clientY:觸摸目標在視口中的y坐標。
  • identifier:標識觸摸的唯一ID。
  • pageX:觸摸目標在頁面中的x坐標。
  • pageY:觸摸目標在頁面中的y坐標。
  • screenX:觸摸目標在屏幕中的x坐標。
  • screenY:觸摸目標在屏幕中的y坐標。
  • target:觸目的DOM節點目標。

上面的屬性光這么看,果然非常繁瑣,每個屬性說的都是那么的細致,只有真刀實槍的來點小例子才能更加明白其中的奧妙。所以小例子如下。

function load (){         document.addEventListener('touchstart',touch, false);     document.addEventListener('touchmove',touch, false);     document.addEventListener('touchend',touch, false);             function touch (event){         var event = event || window.event;                     var oInp = document.getElementById("inp");             switch(event.type){             case "touchstart":                 oInp.innerHTML = "Touch started (" + event.touches[0].clientX + "," + event.touches[0].clientY + ")";                 break;             case "touchend":                 oInp.innerHTML = "<br>Touch end (" + event.changedTouches[0].clientX + "," + event.changedTouches[0].clientY + ")";                 break;             case "touchmove":                 event.preventDefault();                 oInp.innerHTML = "<br>Touch moved (" + event.touches[0].clientX + "," + event.touches[0].clientY + ")";                 break;         }                 } } window.addEventListener('load',load, false);

對上面的代碼稍微做點改動,可以判斷水平方向滑動的方向,然后左相應的動作,如下:

function load(){         document.addEventListener('touchstart',touch, false);    document.addEventListener('touchmove',touch, false);    document.addEventListener('touchend',touch, false);         function touch (event){        var event = event || window.event;                     var oInp = document.getElementById("inp");        var distance,clientX_start,clientX_end,            minRange=10;            this.clientX_start;            this.direction;             this.callbackFun=function(){            if(this.direction=='ltr') {                console.log('從左往右');            }            else {                console.log('從右往左');            }            }        switch(event.type){            case "touchstart":                clientX_start=event.touches[0].clientX;                this.clientX_start=clientX_start;                break;            case "touchend":                this.callbackFun();                break;            case "touchmove":                event.preventDefault();                               clientX_end = event.changedTouches[0].clientX;                //判斷移動的方向                distance=clientX_end-this.clientX_start;                if(this.clientX_start+minRange<clientX_end) {                    this.direction='ltr';                }                else if(this.clientX_start-minRange>clientX_end){                    this.direction='rtl';                }                break;        }      }}window.addEventListener('load',load, false);

到此這篇關于HTML5觸摸事件(touchstart、touchmove和touchend)的實現的文章就介紹到這了,更多相關HTML5觸摸事件內容請搜索武林網以前的文章或繼續瀏覽下面的相關文章,希望大家以后多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 若尔盖县| 邳州市| 临澧县| 乌鲁木齐市| 合山市| 香河县| 客服| 库尔勒市| 两当县| 台东县| 广汉市| 阿拉尔市| 莱阳市| 雅安市| 湖南省| 乐山市| 林甸县| 柳河县| 赤城县| 桂阳县| 金山区| 商洛市| 博爱县| 大城县| 海伦市| 汉川市| 嘉义县| 苏尼特右旗| 枣庄市| 海原县| 湖州市| 沁阳市| 东乡| 凤凰县| 临高县| 阳高县| 太仓市| 远安县| 鹿邑县| 河池市| 台江县|