移动端左滑右滑组件

移动端左滑右滑组件

很久没发布文章了,一方面工作原因,一方面是惰性开始出来了。希望能继续坚持菜鸡之路。

最近有个需求,移动端有导航,需要左滑右滑的时候就能切换导航,跟轮播一样的效果,但是轮播内容少,而且是一次性加载数据。而需求是很多类型,每个类型有非常多的列表,如果使用轮播,一次性加载数据太多,再加上分页,那就完全行不通。

自己写了个左滑右滑的组件。我一直觉得写组件最重要的就是理解原理和理清思路。

当我们触摸到屏幕的时候,会触发touchStar方法,获取起始的X坐标值startX,在手指移动过程中,会触发touchMove方法,获得手指当前的X坐标值currentX。CurrentX-startX就是移动的距离,让当前父元素相对定位,然后随着移动定位left的值。这样就实现了一个元素左滑右滑的效果。

接着考虑当手指松开的时候触发touchEnd方法,获取endX,endX减去startX或者是移动过程中的距离,大于0就是手指向右滑动,小于0就是向左滑动。然后在结束的时候把相对定位的父元素left变成0.

因为是组件,我们把左滑还是右滑返回,把可能需要用到的移动过程中的距离也返回。最后,我们在移动一点点距离的时候不一定要左滑右滑,所以需要一个最小的滑动距离。


<template>
 <div class="">
   <divclass="touch-movue-left-right"
       @touchstart="touchStart($event)"
       @touchend="touchEnd($event)"
       @touchmove="touchMove($event)"
   :style="{'left': moveMar +'px'}">
   <slot></slot>
   </div>
 </div>
</template>



export default {
 props: ['moveJudge', 'moveDistance','margin'],
 data() {
   return {
     startX: 0,
     moveMar: 0
   }
 },
 components: {},
 mounted() {

 },
 methods: {
   touchStart(e){
     this.startX =e.targetTouches[0].pageX;
   },
   touchMove(e){
     this.moveMar =e.targetTouches[0].pageX - this.startX;
     this.$emit('moveDistance',this.moveMar);
   },
   touchEnd(e){
     if(this.moveMar > (this.margin ||100)){
       this.$emit('moveJudge', 'right');
     }else if(this.moveMar <(-this.margin || -100)){
       this.$emit('moveJudge', 'left');
     }
     this.moveMar = 0;
   },
 }
}



.touch-movue-left-right{
 position: relative;
 width: 100%;
 background: #42b983;
}
复制代码

可以自己使用一下,顺便提一下,上拉加载下拉刷新之前是分开的,增加了一个一起的,加上左滑右滑,已经发布npm:

www.npmjs.com/package/wad…

欢迎关注Coding个人笔记 公众号

转载于:https://juejin.im/post/5c55014ff265da2dd638cb56

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101140.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux系统重启网卡命令_centos 7重启网卡命令

    linux系统重启网卡命令_centos 7重启网卡命令大家在实际工作中,经常会遇到Linux系统进行重启网卡的操作,那么具体如何进行重启呢?下面就由学习啦小编跟大家分享一下操作步骤吧,希望对大家有所帮助~linux系统重启网卡的方法一、servicenetworkrestart1、首先用CRT工具连接到Linux命令行界面。或者进入操作系统界面,选择终端输入。2、如果我们对所有的网卡进行重启操作。可以尝试输入:servicenetwork…

    2022年9月22日
    4
  • PyCharm 中文指南和快捷键总结-PyCharm手册-20200923

    PyCharm 中文指南和快捷键总结-PyCharm手册-20200923PyCharm 中文指南有认识了一遍 pycharm 总结的很好

    2025年11月11日
    2
  • vi常用命令

    vi常用命令[toc]一、关于vi==========vi是最强大的文本编辑器,没有之一。尽管vi已经是古董级的软件,但还是有无数新人迎着困难去学习,可见其经典与受欢迎的程度。无论是小说中还是电视剧,真

    2022年7月2日
    26
  • linux之管道

    1.进程间通信概述进程是一个独立的资源分配单元,不同进程之间的资源是独立的,没有关联,不能在一个进程中直接访问另一个进程的资源。进程不是孤立的,不同的进程需要进行信息的交互和状态的传递等,因此需要

    2021年12月28日
    54
  • App界面原型设计工具「建议收藏」

    App界面原型设计工具「建议收藏」首先,一款优秀的移动APP界面原型设计工具应该具备:  ①.支持移动端演示(随时随地演示给BOSS,厕所&食堂&电梯…以体现我是那么的敬业——长点工资必备)  ②.组件库(高效复用,谁用谁知道)  ③.可以快速生成全局流程(程序猿看不懂拆解的,给丫的看这个)  ④.在线协作(多个PM狗一起用)  ⑤.手势操作、转场动画、交互特效…(这些都不需要,留给专业的交互、视觉,

    2022年6月16日
    33
  • idea2021.5.3永久激活码[在线序列号]

    idea2021.5.3永久激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月20日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号