背景:

           需要在手机端实现图片预览,同时支持用户手势左右滑动时,图片可以进行切换查看。

技术实现:

实现思路事件主要是参照屏幕的触摸事件: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">&times;</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,取第一个touchthis.startPos = {x:touchS.pageX,y:touchS.pageY}; // 取第一个touch的坐标值
},
moveend:function(event){// touches数组对象获得屏幕上所有的touch,取第一个touchlet 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表示启用单指垂直平移手势(上下滑动事件)。

vue实现手机端,手势切换左右滑动的功能相关推荐

  1. 手机端带二级菜单滑动导航的实现

    手机端带二级菜单滑动导航的实现 实现的效果图: Swiper插件是开源.免费.强大的移动端触摸滑动插件.Swiper能实现触屏焦点图.触屏Tab切换.触屏多图切换等常用效果.这个效果是freemode ...

  2. vue+weui 手机端项目

    vue+weui 手机端项目 俩个地址 https://weui.io/ https://github.com/Tencent/weui/wiki?tdsourcetag=s_pctim_aiomsg ...

  3. thinkcmf5.1项目实现pc端和wap手机端自动切换

    用thinkcmf5.1写项目的时候如何实现PC端和手机端自动切换? 1.首先找到data/config/template.php文件 复制    'cmf_admin_default_theme'  ...

  4. vue 限制手机端访问

    vue 限制手机端访问 APP.vue页面 mounted() {var str = navigator.userAgentvar ipad = str.match(/(iPad).*OS\s([\d ...

  5. html禁止页面左右滑动,手机端禁止浏览器左右滑动

    在手机端vue项目中,禁止页面左右滑动,代码直接写在index.html中 var startPos = 0,endPos = 0,isScrolling = 0; document.addEvent ...

  6. vue页面手机端开发总结

    当图片的某元素是一张图片,可不设置宽高,将样式设置为如下,这样图片就会撑起来页面,避免一些宽高在不同机型不协调的问题. display: block; width: 100%; 需要条件判断显示不同的 ...

  7. vue 手机端路由切换滑动_vue移动端router-view嵌套实现底部导航切换

    路由使用 vue-router 组件库使用 vue-ydui 效果图: 登录.png 主界面-首页.png 主界面-办事大厅.png 项目结构 图片.png 大体流程 图片.png 路由代码 impo ...

  8. vue解决手机端上下不能滑动问题

    解决:在vue中,我定义了最外层的div不能滑动,所以直接改这个地方就可以解决.

  9. JS手机端touch事件计算滑动距离的方法

    计算手势在手机屏幕上滑动时,手势滑动的距离,代码如下: function wetherScroll(){ var startX = startY = endX =endY =0; var body=d ...

最新文章

  1. pycharm中显示额外的“figure”窗口
  2. 用shell脚本监控进程是否存在 不存在则启动的实例
  3. 手写体识别(数据挖掘入门与实践-实验11)
  4. 图的单源最短路径(Dijkstra算法)
  5. Expression Blend实战开发技巧 第四章 从最常用ButtonStyle开始 - PathButton
  6. 【iOS开发】@property跟成员变量区别
  7. 谷歌中文为什么以红色高亮关键字
  8. python ocr 识别车牌_python 实现的车牌识别项目
  9. python是否安装numpy_python 怎么查看安装numpy的版本
  10. 基于语音识别的智能垃圾分类控制系统设计
  11. Excel·VBA数组排列函数
  12. 网页右侧在线客服html,漂浮在网页右侧的QQ在线客服代码? 1、怎么样修改以下代码,让其变为最靠右边2、如何插入到网页当中...
  13. 项目经理必备的基本职责
  14. java实现微软文本转语音(TTS)经验总结
  15. linux 线程tid,关于linux:PID和TID之间的区别
  16. 详细图解如何注册 Navicat for Mysql 11.0.17 企业版(Win7 64bit)
  17. ECCV 2022 | 清华腾讯AI Lab提出REALY:重新思考3D人脸重建的评估方法
  18. html 转pdf 之wkhtmltopdf
  19. 7 款 DevOps 工具管理 Kubernetes
  20. 【驱动模块】 -- linux的背光(backlight)子系统【转】

热门文章

  1. 准静态油驱水水驱油4m4
  2. 关于鸿蒙心理社的logo,心理健康logo设计大赛
  3. 为天地立心,为生民立命,为往圣继绝学,为万世开太平。
  4. 【§增强版绿色魔兽大脚 5.3.0.408 官方最新版§】
  5. NLP 中的语言模型预训练微调
  6. 爬取微信好友信息,进行可视化分析(头像人脸识别部分已更新!)(代码已上传)
  7. cpolar一款顶好用的内网映射软件
  8. 服务器TOMCAT自动关闭---内存泄漏问题
  9. 【人生】一个人逐渐颓废的表现
  10. lwip网络接口netif