18年年底的时候,一直在做年度报告的H5页面,因为项目需要,需要实现上下滑动翻页,并且上滑的页面比正常页面的比例要缩小一定比例。

效果类似于http://www.17sucai.com/pins/demo-show?id=7834,这个链接是基于jquery实现的,我写的是和这个例子效果一样,只不过是用vue实现的。

首先介绍一下,这个项目依赖的插件:上下滑动翻页使用了v-touch,是基于hammer.js进行的vue封装。也可以不用这个插件写,直接用js原生,通过touchStart,touchMove,touchEnd来实现也是可以的;

现在总结一下几点,是我在写代码的时候遇到的坑。

1、因为我是使用的是v-touch里的pan属性及它附带的方法和事件。所以,在组件内部如果还有滚动的区域,就可能会出现冲突,最后项目上线之前,仍没有彻底解决。

不管是用v-touch还是用js原生,都会出现这个问题,在实现上下页面滑动切换时,采用了纯css去控制上下滑动的距离。所以,css可能会冲突。所以,建议不要在使用v-touch或者js原生滚动区域内部再次出现滚动区域。

下一篇博客会重点说一下这个问题的解决方式。

>

如果在component中仍有滑动的区域的话,就会产生css冲突。

2、滚动距离的计算

看图理解

页面1,页面2,页面3分别对应我要上下滑动切换的页面,并且,1,2,3分别对应组件中的三个组件,也就是说,每个页面都是一个独立的组件。而这些组件是通过v-for的方式循环渲染的。

需要控制的是每个页面的top值,z-index值,scale值,以及为了实现平滑的效果transition的过渡时间。

当页面向上(下)滑动时,页面3(页面1)就变成了当前展示的页面,页面2就变成了前一个页面(下一个页面),因为页面3(页面1)是最后(第)一个页面了,用户不能再继续向下滑,

所以,我们需要在panmove和panend时去依据当前的index值和当前展示的组件数组中最后一项和第一项去判断

重点说一下在panmove的时候,也就是在滚动过程中的时候,页面的变化以及top值和滑动的距离是如何计算的。还是看图:

这个里面最难理解的就是这个上滑,或者下滑的距离,在我的代码里,1.0版本的并没有解决两个页面始终差一段距离,这个距离就是distance的2/3,在panend的时候,我们需要看一下用户滑动的距离是不是可以翻页,如果距离很小,则不能翻页,最好加一下判断。

上滑之后,页面1就变成了其他页面,页面2变成了前一个页面,页面3变成了当前页面,对这3个页面来说,它们各向上走了一个屏幕的高度,而页面3的高度top值变成了0,页面2变成了-1*屏幕的高度。页面1则变成了-2 * 屏幕的高度,但是对于页面1来说,已经变成了其他的图片,所以它的高度,是(它的index-当前的index)*屏幕的高度。

对于当前上滑(下滑)的页面缩放的解决,是在panstart的时候,设置当前页面的缩放率为1,在panmove的时候根据滑动的距离,随机设置缩放率。在panend的时候,设置延迟,使缩放率变成。

所以,正常的滑动过程中的样式是

具体的代码,大家可以去github上自行下载使用,如果不使用v-touch,也可以用touchStart,touchMove,touchEnd分别对应显示。

更新:1.1版本中删掉了component循环渲染时的top属性,这样,在上滑下滑的时候,就不会出现中间的距离差,只会按照js控制达到的样式距离走。

vue实现上下滑动翻页_基于vue实现上下滑动翻页效果相关推荐

  1. vue 微信公众号支付接口_基于vue的h5项目之支付宝支付与微信支付

    本文仅记录基于vue开发h5项目过程中使用支付宝和微信支付过程中的重点与槽点,仅为前端部分,如有疏漏不正之处,请于文末评论探讨.注意:标红部分灰常重要,仔细阅读官方文档非常重要,耐心非常重要,细心非常 ...

  2. vue里面怎么删除部分页面_基于VUE选择上传图片并页面显示(图片可删除)

    基于VUE选择上传图片并在页面显示,图片可删除,具体内容如下 demo例子: 依赖文件: HTML文本内容: 相关照片 JS文本内容: /** * 从 file 域获取 本地图片 url */ fun ...

  3. vue和Java做数据交互_基于vue和springmvc前后端分离,json类接口调用介绍

    基于vue和springmvc前后端分离,json类接口调用介绍 版本要求:spring-3.2.9.RELEASE.vue-2.9.2.axios-0.17.1,其中axios作为http clie ...

  4. 基于vue的响应式ui框架_基于Vue.js的响应式和可配置UI框架

    基于vue的响应式ui框架 Framevuerk (Framevuerk) Fast, Responsive, Multi Language, Both Direction Support and C ...

  5. vue可视化拖拽组件模板_基于 Vue 丝滑般拖拽排序组件VueSlicksort

    今天给大家分享一个功能超强的自由拖拽排序组件VueSlicksort. vue-slicksort 一款功能强大的可拖拽的vue.js组件.拥有丝滑般拖拽动画效果,支持水平/垂直/网格拖拽排序.还可以 ...

  6. vue实现留言板的功能_基于vue和bootstrap实现简单留言板功能

    本文实例为大家分享了vue实现简单留言板功能的具体代码,供大家参考,具体内容如下 作为一个刚开始接触vue的前端小白,我想在这里记录一些学习过程,希望和大家一起进步,如有不妥处之处,请多多指教呦. 今 ...

  7. vue 实现文本的拖拽_基于Vue实现拖拽功能

    本文实例为大家分享了Vue实现拖拽功能的具体代码,供大家参考,具体内容如下 效果图: HTML代码: 位置 x:{{val.x}} y:{{val.y}} //注意这里要通过指令绑定函数将当前元素的位 ...

  8. vue实现搜索框搜索新增_基于Vue el-autocomplete 实现类似百度搜索框功能_含真_前端开发者...

    效果图如下所示: 首先上代码 让数据触手可及 class="inline-input search-input" v-model="searchContent" ...

  9. vue实现搜索框搜索新增_基于Vue.js实现简单搜索框

    主要用到的知识很简单,简单的vuejs2.0的知识就够了.源码用了.vue构建和ES6,用了webpack打包等等.我资历还浅,先用一个简单的.js的写. 先看效果 这里有两个组件,一个组件是logo ...

最新文章

  1. 进程间通信的5种方式
  2. .net程序员转战android第一篇---环境部署
  3. 计算机算法设计与分析之----- 递归与分治策略
  4. DevExpress v18.1新版亮点——WinForms篇(四)
  5. android 遍历所有view,Android 算法:遍历ViewGroup找出所有子View
  6. mysql 回退查询_MySQL数据库:第十章:分页查询
  7. 动态规划在求解背包问题中的应用(JAVA)--回溯法、记忆化法
  8. 计算机二级没过学校不给学位证,如果学校说计算机二级没过不给发学位证改怎么办...
  9. 数据中心运维管理方案
  10. uniapp的选择收货地址
  11. 怎么样抓取微信小程序
  12. 线性表的链式存储结构
  13. (附超声射频数据)matlab实现b超原始信号数据生成图像
  14. 一位北大才子的光棍节情诗
  15. python atm银行取款系统_python ATM机 案例代码
  16. 从数据孪生发展到元宇宙
  17. Python中的split()函数的详解
  18. 高德地图上添加一个点
  19. 让人拍案叫绝的创意如何产生
  20. U盘下载系统之后剩余空间只剩32G?

热门文章

  1. 虚拟机做linux服务器,用 VirtualBox 的 linux 虚拟机做服务器
  2. 柜子里的人笑出了声...
  3. 聊一聊:拿到年终奖后马上辞职,厚道吗?
  4. 如何给女朋友解释并发与并行的区别?
  5. insightface测试验证集
  6. 水下图像处理算法Sea-thru
  7. No module named #39tensorflow.contrib#39
  8. go 接收 ffmpeg avpacket
  9. python websocket server 解决中文乱码
  10. 解决:无法解析的外部符号__iob_func