触摸(Touch)事件

本文详细解析了触摸事件的工作原理,包括touches、targetTouches、changedTouches等关键属性,以及screenX/Y、clientX/Y、pageX/Y坐标系的含义。通过一个具体的案例,展示了如何使用JavaScript监听并处理touchstart、touchmove、touchend事件,记录触摸开始、移动和结束的位置。
摘要由CSDN通过智能技术生成

Touch事件:

  1. touches:当前位于屏幕上的所有手指的一个列表
  2. targetTouches:位于当前DOM元素上的手指的一个列表;
  3. changedTouches:涉及当前事件的手指的一个列表;
  4. screenX,screenY:触摸点相对于屏幕上边缘的坐标;
  5. clientX,clientY:触摸点相对于浏览器的viewport左边缘的坐标,不包括左边的滚动距离;
  6. pageX,pageY:触摸点相对于document的左边缘的坐标,与clientX不同的是它包括左边滚动的距离,如果有的话;
  7. target:总是表示手指最开始放在触摸设备上的触发点所在位置的element。

触摸事件案例:

Html代码:

<div class="touch_box">
    <p class="p1">start</p>
    <p class="p2">move</p>
    <p class="p3">end</p>
</div>

JS代码:

var start,move,end;
/*
touches :当前位于屏幕上的所有手指的一个列表。
targetTouches :位于当前DOM元素上的手指的一个列表。
changedTouches :涉及当前事件的手指的一个列表。
*/

/*原生写法*/
var box = $(".touch_box")[0];
var p1 = $(".touch_box .p1");
var p2 = $(".touch_box .p2");
var p3 = $(".touch_box .p3");
//点触开始--begin
box.addEventListener("touchstart", function (e){
	// 记录开始按下时的点
    var touches = event.touches[0];
    start = { 
        /*
        screenX,screenY:触摸点相对于屏幕上边缘的坐标;
        clientX,clientY:触摸点相对于浏览器的viewport左边缘的坐标,不会包括左边的滚动距离;
        pageX,pageY:触摸点相对于document的左边缘的坐标,与clientX不同的是,他包括左边滚动的距离,如果有的话;
        target:总是表示 手指最开始放在触摸设备上的触发点所在位置的element;
        toFixed(x):转换为有x位小数的数据;
        */
        x: touches.pageX.toFixed(2), // 横坐标
        y: touches.pageY.toFixed(2)  // 纵坐标
    };
	p1.html("触摸开始:"+ e.target.tagName + "-" + "(" + start.x + "," + start.y + ")");
});
//点触开始--end

//点触移动--begin
box.addEventListener("touchmove", function (e){
	//记录移动的距离
	var touches = event.touches[0];
	move = {
        x: (touches.pageX - start.x).toFixed(2),
        y: (touches.pageY - start.y).toFixed(2)
    };
    p2.html("触摸移动:"+ e.target.tagName + "-" + "(" + move.x + "," + move.y + ")");
});
//点触移动--end

//点触结束--begin
box.addEventListener("touchend", function (e){
	// 记录开始结束时的点
    var touches = event.changedTouches[0];  //此处不能用"touches[0]"
    end = {  
        x: touches.pageX.toFixed(2), // 横坐标
        y: touches.pageY.toFixed(2)  // 纵坐标
    };
    p3.html("触摸结束:"+ e.target.tagName + "-" + "(" + end.x + "," + end.y + ")");
})
//点触结束--end

/*
//Jq写法
//点触开始--begin
$(".touch_box").on('touchstart',function(e) {
	var touches = e.originalEvent.targetTouches[0]; 
	start = { 
        x: touches.pageX.toFixed(2), // 横坐标
        y: touches.pageY.toFixed(2)  // 纵坐标
    };
	$(".touch_box .p1").html("触摸开始:(" + start.x + "," + start.y + ")");
});
//点触开始--end

//点触移动--begin
$(".touch_box").on('touchmove',function(e) {
	var touches = e.originalEvent.targetTouches[0]; 
    move = {
        x: (touches.pageX - start.x).toFixed(2),
        y: (touches.pageY - start.y).toFixed(2)
    };
    $(".touch_box .p2").html("触摸移动:(" + move.x + "," + move.y + ")");
});
//点触移动--end

//点触结束--begin
$(".touch_box").on('touchend',function(e) {
	var touches = e.originalEvent.changedTouches[0];   //此处不能用"targetTouches[0]"
    end = {  
        x: touches.pageX.toFixed(2), // 横坐标
        y: touches.pageY.toFixed(2)  // 纵坐标
    };
    $(".touch_box .p3").html("触摸结束:(" + end.x + "," + end.y + ")");
})
//点触结束--end
*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值