JavaScript手機觸摸滑動事件處理


js的左右滑動觸屏事件,主要有三個事件:

  touchstart,touchmove,touchend。這三個事件最重要的屬性是 pageX和 pageY,表示X,Y坐標。

touchstart:

  在觸摸開始時觸發事件

touchend:

  在觸摸結束時觸發事件

touchmove:

  這個事件比較奇怪,按道理在觸摸到過程中不斷激發這個事件才對,但是在我的 Android 1.5 中,在 touchstart 激發后激發一次,然后剩余的都和 touchend 差不多同時激發。

 

這三個事件都都有一個 timeStamp 的屬性,查看 timeStamp 屬性,可以看到順序是 touchstart -> touchmove ->touchmove -> … -> touchmove ->touchend。

PS:1.touch事件跟click事件是不會被同時觸發的。現在的移動設備做的比較好,已經把這個問題完美的避免掉了。

 

下面是二段代碼實例:

 

document.getElementsByTagName_r('body')[0].addEventListener('touchstart', function (e) {
        nStartY = e.targetTouches[0].pageY;
        nStartX = e.targetTouches[0].pageX;
    });

document.getElementsByTagName_r('body')[0].addEventListener('touchend', function (e) {
        nChangY = e.changedTouches[0].pageY;
        nChangX = e.changedTouches[0].pageX;

});

 

 

//全局變量,觸摸開始位置
var startX = 0, startY = 0;

//touchstart事件
function touchSatrtFunc(evt){
    try {
        //evt.preventDefault(); //阻止觸摸時瀏覽器的縮放、滾動條滾動等
        
        var touch = evt.touches[0]; //獲取第一個觸點
        var x = Number(touch.pageX); //頁面觸點X坐標
        var y = Number(touch.pageY); //頁面觸點Y坐標
        //記錄觸點初始位置
        startX = x;
        startY = y;
        
        var text = 'TouchStart事件觸發:(' + x + ', ' + y + ')';
        console.log(text);
    } 
    catch (e) {
        alert('touchSatrtFunc:' + e.message);
    }
}

//touchend事件
function touchEndFunc(evt){
    try {
        //evt.preventDefault(); //阻止觸摸時瀏覽器的縮放、滾動條滾動等
		nChangX = evt.changedTouches[0].pageX;
        nChangY = evt.changedTouches[0].pageY;
		if(nChangX - startX > 10){
			slideButton("left");
		}else if(nChangX - startX < -10){
			slideButton("right");
		}
    } 
    catch (e) {
        alert('touchEndFunc:' + e.message);
    }
}

//touchmove事件,這個事件無法獲取坐標
function touchMoveFunc(evt){
    try {
        //evt.preventDefault(); //阻止觸摸時瀏覽器的縮放、滾動條滾動等
        var touch = evt.touches[0]; //獲取第一個觸點
        var x = Number(touch.pageX); //頁面觸點X坐標
        var y = Number(touch.pageY); //頁面觸點Y坐標
        var text = 'TouchMove事件觸發:(' + x + ', ' + y + ')';
        
        //判斷滑動方向
        if (x - startX != 0) {
            text += '<br/>左右滑動';
        }
        if (y - startY != 0) {
            text += '<br/>上下滑動';
        }
        
        console.log(text);
    } 
    catch (e) {
        alert('touchMoveFunc:' + e.message);
    }
}

//綁定事件
function bindEvent(obj){
	if(obj){
		obj.addEventListener('touchstart', touchSatrtFunc, false);
    	obj.addEventListener('touchmove', touchMoveFunc, false);
    	obj.addEventListener('touchend', touchEndFunc, false);
	}
//	document.addEventListener('touchstart', touchSatrtFunc, false);
//  document.addEventListener('touchmove', touchMoveFunc, false);
//  document.addEventListener('touchend', touchEndFunc, false);
}

bindEvent(document.getElementById("bodyButton"));

//判斷是否支持觸摸事件
function isTouchDevice(){
    
    
    try {
        document.createEvent("TouchEvent");
        console.log("支持TouchEvent事件!" + navigator.appVersion);
        bindEvent(); //綁定事件
    } 
    catch (e) {
        alert(navigator.appVersion + "不支持TouchEvent事件!" + e.message);
    }
}

isTouchDevice();

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM