欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

移动端 的属性 touch

程序员文章站 2022-05-03 18:36:48
...

1 只有移动端才有touch 事件 三个分别为

touchstart 手指触碰屏幕时触发

touchmove 手指移动时触发

touchend 手指离开时触发

可以用来解决click 在移动端延迟问题 click事件在移动端的延迟在80-120之间一般 可以用下面代码测试实际时间

<script>
    var now
    document.ontouchstart = function(){
        // 返回 1970 年 1 月 1 日至今的毫秒数
        now = new Date().getTime()
        console.log("touchstrat")
    }
    document.onclick=function(){
        // 计算延时
        var delay = new Date().getTime() - now
        console.log("onclick")
        console.log(delay+"ms")
        // 真机测试使用alert()
    }
</script>

2 touch 的基本使用

let oDiv = document.querySelector("div");

    oDiv.addEventListener("touchstart",function () {

        console.log("开始触摸");
    });

    oDiv.addEventListener("touchmove",function () {

        console.log("移动一手指");
    });

    oDiv.addEventListener("touchend",function () {

        console.log("结束触摸---")
    });

3.touchEvent事件对象
touchEvent事件对象描述了当前事件中的一系列信息

e.touches:当前屏幕上所有触摸点的列表
targetTouches:当前对象上所有触摸点的列表
changeTouches:触发事件时改变的触摸点的集合
每个touch事件包含下面的属性:
clientX:触摸目标在视口中的x坐标。
clientY:触摸目标在视口中的y坐标。
identifier:标识触摸的唯一ID。
pageX:触摸目标在页面中的x坐标。
pageY:触摸目标在页面中的y坐标。
screenX:触摸目标在屏幕中的x坐标。
screenY:触摸目标在屏幕中的y坐标。
target:触摸的DOM节点目标。

4 使用注意问题 点透问题
当一个元素放覆盖了另一个元素, 覆盖的元素监听touch事件,而下面的元素监听click事件,
并且touch事件触发后覆盖的元素就消失了, 那么就会出现点透问题
出现的原因是 .当我们手指触摸屏幕的时候,系统会生成2个事件,一个是touch事件,一个是click事件,
touch事件优先click事件执行, click事件相对会延迟 100-300毫秒
当touch事件执行的时候pink粉色盒子的display属性更改为none,粉色盒子消失,而click事件在200毫秒之后,执行的时候,发现粉色盒子已经消失,那么click事件就会执行 对应的触摸点位置的box盒子,进而触发box盒子的click事件 用阻止事件解决

 //粉色盒子
    oTap.addEventListener("touchstart",function (event) {
        event = event || window.event;
        oTap.style.display = "none";
        //阻止事件的默认行为
        event.preventDefault();
    })