vue实现手机端,手势切换左右滑动的功能
背景:需要在手机端实现图片预览,同时支持用户手势左右滑动时,图片可以进行切换查看。技术实现:实现思路事件主要是参照屏幕的触摸事件:touchstart、touchmove和touchend。事件简要介绍:touchstart 主要指手指触摸屏幕时触发事件,即使已经有手指在屏幕上也会触发。touchmove 主要指手指在屏幕滑动时触发事件。touchend 主要指手指从屏幕时移开时触发事件。代码实现
·
背景:
需要在手机端实现图片预览,同时支持用户手势左右滑动时,图片可以进行切换查看。
技术实现:
实现思路事件主要是参照屏幕的触摸事件:touchstart、touchmove和touchend。
事件简要介绍:
touchstart 主要指手指触摸屏幕时触发事件,即使已经有手指在屏幕上也会触发。
touchmove 主要指手指在屏幕滑动时触发事件。
touchend 主要指手指从屏幕时移开时触发事件。
代码实现:
事件绑定:
原生js绑定:
document.addEventListener('touchstart',movestartMeth, false);
document.addEventListener('touchmove',touchMoveMeth, false);
document.addEventListener('touchend',touchendMeth, false);
vue方式绑定:
<div v-if='showImageFlag' id="myModal" class="image-modal">
<a class="image-download":href="showImageSrc" download>图片下载</a>
<span class="image-close image-cursor" @click="closeImageModal">×</span>
<div class="image-modal-content" @touchstart="movestartMeth" @touchend="touchendMeth">
<div class="image-mySlides">
<div class="image-numbertext">{{curimageindex}}/{{showImageDetailList.length}}</div>
<img ref="imgview" :src="showImageSrc" @click='showImage()'>
</div>
<a class="image-prev" @click.prevent="plusSlides(-1)">❮</a>
<a class="image-next" @click.prevent="plusSlides(1)">❯</a>
</div>
方法实现:
movestart:function(event){
let touchS = event.targetTouches[0];
// touches数组对象获得屏幕上所有的touch,取第一个touch
this.startPos = {
x:touchS.pageX,
y:touchS.pageY
}; // 取第一个touch的坐标值
},
moveend:function(event){
// touches数组对象获得屏幕上所有的touch,取第一个touch
let touchEnd = event.changedTouches[0];
let touchX = touchEnd.pageX- this.startPos.x;
let self = this
// 设置滑动距离的参考值
var d = 50;
if(Math.abs(touchX)>d){
if(touchX>0){
//console.log('向左滑动');
self.plusSlides(-1);
}else{
//console.log('向右滑动');
self.plusSlides(1);
}
}
},
注意事项:浏览器可能会如下错误
[Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive.
解决方式:
在style全局样式添加* {touch-action: pan-y;}, pan-y表示启用单指垂直平移手势(上下滑动事件)。
更多推荐
已为社区贡献2条内容
所有评论(0)