uniApp 滑动手势事件判定 支持NVUE

<div = @touchstart="touchStart" @touchmove="touchMove" @touchend="touchEnd">
            <div ref="test">
        //内容
            </div>
        </div>
data(){
return{
touchStartX: 0, //触摸时的原点
            touchStartY: 0, //触摸时的原点
            time: 0, // 时间记录,用于滑动时且时间小于1s则执行左右滑动
            interval: '', // 记录/清理时间记录
            touchMoveX: 0, // x轴方向移动的距离
            touchMoveY: 0, // y轴方向移动的距离
            direction: 'all',
            distance: 30,}
}
// 触摸开始事件
        touchStart(e) {
            this.touchStartX = e.changedTouches[0].pageX; // 获取触摸时的原点
            this.touchStartY = e.changedTouches[0].pageY; // 获取触摸时的原点
            // 使用js计时器记录时间
            this.interval = setInterval(() => {
                this.time++;
            }, 100);
        },
        // 触摸移动事件
        touchMove(e) {
            this.touchMoveX = e.changedTouches[0].pageX;
            this.touchMoveY = e.changedTouches[0].pageY;
        },
        // 触摸结束事件
        touchEnd(e) {
            let that = this;
            let moveX = this.touchMoveX - this.touchStartX;
            let moveY = this.touchMoveY - this.touchStartY;
            if (Math.sign(moveX) == -1) {
                moveX = moveX * -1;
            }
            if (Math.sign(moveY) == -1) {
                moveY = moveY * -1;
            }
            if (2 * moveX <= moveY) {
                // 上下
                if (this.direction != 'all' && this.direction != 'vertical') return;
                // 向上滑动
                if (this.touchMoveY - this.touchStartY <= -this.distance && this.time < 10) {
                    console.log('1_1');
                }
                // 向下滑动
                if (this.touchMoveY - this.touchStartY >= this.distance && this.time < 10) {
                    console.log('1_2');
                }
            } else if (moveX > 2 * moveY) {
                // 左右
                if (this.direction != 'all' && this.direction != 'horizontal') return;
                // 向左滑动
                if (this.touchMoveX - this.touchStartX <= -this.distance && this.time < 10) {
                    
                    }
                }
                // 向右滑动
                if (this.touchMoveX - this.touchStartX >= this.distance && this.time < 10) {
                    
                    }
                }
            }
            clearInterval(this.interval); // 清除setInterval
            this.time = 0;
        },

 

posted @ 2022-06-20 11:28  风一样的猿  阅读(1797)  评论(0编辑  收藏  举报