移动端左滑右滑组件

移动端左滑右滑组件

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

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

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

当我们触摸到屏幕的时候,会触发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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C语言输出有颜色的字体

    C语言输出有颜色的字体先看下面的一段代码:#include<stdio.h>intmain(intargc,char**argv){printf(“\033[44;37;5mhelloworld\033[0m\n”);return0;}编译后运行上述代码,结果如下:可见,此时输出的字体和背景已经有了颜色。由上可知,在输出时候加上“\033[…

    2022年7月24日
    27
  • stripslashes()函数的作用_strip和strap的区别

    stripslashes()函数的作用_strip和strap的区别我们在向mysql写入数据时,比如:

    2022年8月30日
    4
  • ArcGIS二次开发基础教程(06):有关图层的基本操作

    ArcGIS二次开发基础教程(06):有关图层的基本操作ArcGIS二次开发基础教程(06):有关图层的基本操作0.PageLayout和MapControl的同步voidCopyToPage(){//对象拷贝,把mapcontrol的地图拷贝重写到pagelayout里IObjectCopycopy=newObjectCopyClass();objectfromMap=a…

    2022年7月23日
    17
  • 微信小程序 之 40029

    微信小程序 之 40029开发版正常使用,但是生成体验版之后报40029错误。错误原因:1:openid和当前小程序不对应,或者AppSecret秘钥和当前小程序不对应的。2:当前小程序能正确获取到token,但是在code还没有失效时,另一个小程序也用这个小程序的openid或者AppSecret秘钥去请求token。这个时候也会报40029,说到底还是第一个错误,只是触发的方式不同。解决办法也很简单,检查一下,当前的openid和AppSecret是否和当前要部署使用的小程序的openid和Ap..

    2022年5月6日
    48
  • cjson创建数组「建议收藏」

    cjson创建数组「建议收藏」这里介绍如何使用cjson,创建一个含数组的json字串。例如下面的形式:{“UnixSocket”:[{“id”:0,”value”:10.0}]}干脆一些,直接上代码:intJsondata_Create_Json(char*pBuf,intid,i…

    2022年5月3日
    49
  • pycharm使用gpu运行_降低python程序cpu占用高

    pycharm使用gpu运行_降低python程序cpu占用高本人频繁在pycharm下run程序,经常终止,可能其后台运行的Python程序没有关闭,所以耗尽GPU资源。现象是占用GPU的进场ID为空,即nvidia-smi后,没有进程使用GPU,但每块GPU的内存确被使用很多。。。。。fuser-v/dev/nvidia*会发现很多Python在运行,故粗暴地kill这些进程ID就可以了。。。。。。。ID乍一看很多,杀死一两个就不剩几个了。。。。本方…

    2022年8月29日
    4

发表回复

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

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