如何用vue自己封装一个轮播图 移动端 pc端

vue封装一个轮播图

结构

结构布局和样式我就不多解释了 今天主要淦逻辑结构
大致结构为如下
在这里插入图片描述
样式如下 采用的是flex布局
在这里插入图片描述
看看父组件传递的数据吧

在这里插入图片描述

逻辑结构及原理实现

这里定义一些下面要用的属性,和可传递的属性
在这里插入图片描述
开始
原理简单介绍:给数组前加原先数组最后一个 给数组后加原先数组第一个
例如数组有4个 刚开始把第一张图片复制一份给数组最后加一个 把最后一张图片复制给数组第一项
调整数组从 下标1 即第二个元素开始,并控制判断轮播是不是到了第一或者最后,是则取消过渡效果返回对应原数组的位置
例如 到了最后一张 最后一张对应的是原数组的第一张 因为现在前面加了一个元素 所以应该是跳转到数组第二个元素下标为1
思考:首先应该做什么
1.给数组前后拷贝元素
2.开始写滑动代码
3.写手指滑动时的操作代码
在什么时候 执行前面两项?
我们可以在created设置一个定时器稍微延迟一点后执行,直接执行是会报错的,因为还没构建好。
在这里插入图片描述
1.给数组前后拷贝元素
这里我标识了每一步的做法
仔细看看 特别是拷贝数组中的对象 坑! 千万别直接拷 不然你拷的只是地址会影响原数组对象的数据的。
还有注意的一个点就是 这里你直接修改props传过来的swiperSum(通过push 和 splice),按理说子组件修改父组件是会提示错误的,但是这里并没有。因为只有子组件修改父组件的字符串类型的数据才会报错,而修改数组,对象和参数修改是不会报错的,我们这里修改的是数组,所以不报错。
但是虽然不报错,这样也是不建议的,因为你修改了父组件传递过来的数组时,父组件的数组也同时发生了改变,而此时你并没有告诉父组件,即父组件的数组值改变了,却没有任何痕迹,这样让我们很容易不知道所以然。所以我把这种方法注释了,大家可以试试。
还是的采用$emit向父组件发送事件让父组件进行修改,不要子组件修改父组件传来的数据,这样很不好,牢记哦。
在这里插入图片描述
封装一个滑动的方法
在这里插入图片描述

2.开始写滑动代码
开始滑动不能直接卸载一个方法里面,应该分为多个方法各司其职,这样在需要用到某个方法时可以和好的抽离过来,如果是一个则行不通。
先封装一个启动定时器滑动和停止定时器
传递给滑动方法
滑动方法对当前滑动状态管理 和 过渡效果添加 并滑动一次
每次滑动完需要判断是不是我们添加的元素
在这里插入图片描述
判断元素是否是我们添加的元素 通过之前定义的下标可以很好判断
如果范围在 1-数组长度内则不改变 而如果是 0 和数组长度+1则是我们添加的
需要进行取消动画过渡然后瞬移到复制源的对应数组

在这里插入图片描述
3.写监听用户手指滑动时的方法
从手指开始接触屏幕开始到实时移动手指
开始接触需要判断是否在滑动 停止计时器 记录开始坐标
实时移动时需要实时控制轮播图的移动 计算出偏移量则可以实现精确移动了

在这里插入图片描述
手指离开屏幕
离开要判断偏移量是否大于自己设置的 大于则进行切换 再通过正负决定切换上一张或者下一张
若小于设置的偏移量 则归为到当前轮播图 currindex不变就可以了
为0则是没改变,那就不执行
执行完需要重新启动定时器

在这里插入图片描述
附加方法 可添加左右按钮 pc端可以用 移动端一般不用
这个很简单就不做说明了
在这里插入图片描述

效果图

在这里插入图片描述
在这里插入图片描述

END

想要源码的可以评论和私信哦 源码里对各个结构都有相应解释,帮助你更好理解
点个赞吧!米娜
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/kzj0916/article/details/108164259