博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
移动端左滑右滑组件
阅读量:6881 次
发布时间:2019-06-27

本文共 1362 字,大约阅读时间需要 4 分钟。

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

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

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

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

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

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

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:

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

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

你可能感兴趣的文章
数据与网络开发
查看>>
[转载] 基于扩展UML的多Agent系统建模方法
查看>>
【Java】 迭代 Map
查看>>
[转载] 财经郎眼20120416:中美制造业比较
查看>>
Go net - IPAddr & TCPAddr
查看>>
Acer Aspire V5-471G修复BIOS
查看>>
ONLYOFFICE历史版本功能的开发
查看>>
RHEL7.2集成安装Nagios4.2.1+Cacti0.8.8h+NPC2.0.4
查看>>
网站样式变黑白的办法
查看>>
360假冒发布系统补丁 微软官方或将介入调查
查看>>
iOS App 主题切换
查看>>
用实验来说明lib的概念及链接方式
查看>>
我的友情链接
查看>>
快速排序思想及实现
查看>>
jQuery事件--- event.preventDefault() 取消点击动作的默认导航行为
查看>>
Android Log日志
查看>>
安装ubuntu系统 ——分区
查看>>
oracle学习_基本语法
查看>>
【Todo】STAR面试法
查看>>
信号量与条件变量的区别
查看>>