移动端触摸事件和点击事件重叠

分为两种情况:

一、同时给某个元素绑定触摸事件和点击事件

使用 preventDefault 阻止元素默认事件来解决,在触摸事件中添加 e.preventDefault()就可以阻止click事件触发。

二、给两个元素分别绑定触摸和点击事件

思路:通过设置变量,判断是否触摸触摸状态,触摸状态下,不能触发点击事件

触摸事件代码:


var isTouching=false // 默认--不处于触摸状态


 function touchTables() {
          ......
          //绑定touchstart事件
          moveTable.addEventListener("touchstart", touchStart, false);
          function touchStart(e) {
              ......
          }
          //绑定touchmove事件
          moveTable.addEventListener("touchmove", touchMove, false);
          function touchMove(e) {
              ......
              isTouching=true // 将状态设置为 触摸中     
          }
          //监听触摸结束
          moveTable.addEventListener("touchend",function(){
              isTouching=false // 设置触摸状态为 没触摸
              document.body.removeEventListener('touchmove', bodyScroll, false);
          });
          function bodyScroll(e) {
              e.preventDefault();
          }
}

点击事件代码:

//点击事件
btnList[i].button.onPointerUpObservable.add(function () {
    // 不处于触摸状态下才执行
    if (!isTouching) { // 判断是否触摸中
       ......
    }
})

以上就是全部的逻辑,最后记录一下写的代码:

 
// 触摸
function touchTables() {
                    var moveTable = canvas    //item_ID
                    var $win = document.window;
                    var tableWidth = moveTable.offsetWidth;
                    var halfWidth = tableWidth / 2;
                    var objTouches = null;
                    var startx, starty, tableLeft, distx = 0, disty = 0;
                    //绑定touchstart事件
                    moveTable.addEventListener("touchstart", touchStart, false);
                    function touchStart(e) {
                        objTouches = e.changedTouches[0];
                        tableLeft = parseInt(moveTable.style.left)
                        startx = parseInt(objTouches.pageX);
                        starty = parseInt(objTouches.pageY);

                    }
                    //绑定touchmove事件
                    moveTable.addEventListener("touchmove", touchMove, false);
                    function touchMove(e) {
                        objTouches = e.changedTouches[0];
                        distx = parseInt(objTouches.pageX) - startx;
                        disty = parseInt(objTouches.pageY) - starty;
                        //判断touch滑动的方向
                        if (disty > 10) {
                            isTouching=true
                            document.body.removeEventListener('touchmove', bodyScroll, false);
                            // 滑动时滚动条滚动
                            panel1ScrollView.verticalBar.value -= 0.015;
                        } else if (disty < 10 ) {
                            isTouching=true
                            document.body.removeEventListener('touchmove', bodyScroll, false);
                            // 滑动时滚动条滚动的多少
                            panel1ScrollView.verticalBar.value += 0.015;
                        }
                        else if (distx > 0 || distx < 0) {
                            isTouching=true
                            document.body.addEventListener('touchmove', bodyScroll, false);             //向上向下滑动时取消body的滚动条事件
                            moveTable.style.left = ((tableLeft + distx < -halfWidth) ? -halfWidth : (tableLeft + distx > 0) ? 0 : tableLeft + distx) + "px";
                        }
                    }
            moveTable.addEventListener("touchend",function(){
                                isTouching=false
            document.body.removeEventListener('touchmove', bodyScroll, false);
        });
                    function bodyScroll(e) {
                        e.preventDefault();
                    }
        }









// 点击
    btnList[i].button.onPointerUpObservable.add(function () {
                // // 点击完成后去除面板
                if (!isTouching) { // 判断是否触摸中
                // 下层点击事件的代码
                // 第一张图为0
                clicks = i
                switchImg()
                // 隐藏蒙版
                listMask.isVisible = !listMask.isVisible;
                // 点击完成后去除面板
                panel1ScrollView.isVisible = false;
            }
        })

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值