vue2.0 better-scroll 实现移动端滑动的示例代码


Posted in Javascript onJanuary 25, 2018

写在前面的话:

上一篇文章实现了滑动效果,这部分来试试左右联动效果的实现方法吧

效果:滑动右侧时,左侧也能有相应的变化;点击左侧时,右侧也能自动定位到相应的位置。

如下图所示界面,左侧为分栏,右侧为分栏详情。

vue2.0 better-scroll 实现移动端滑动的示例代码

滑动右边使左边联动的大概的思路:

1)要知道右侧的列表中,每一个分栏所占的高度,存进一个数组中。

2)实现左边联动,则必须要监控 “scroll”事件,获取其高度

3)将scroll 的高度与右侧分栏的高度进行比较,获得其 index 值

4)左侧的分类中,使与 index 相应的分栏高亮即可~

余留的问题:额,左侧怎么跟着一起滚动?应该还需要判断一下当前左侧栏中的scroll的位置,然后使之跟随变化,但是不同尺寸的手机,高度不一,怎么解决???我不知道……

点击左边时,右边实现自动定位的大概思路:

1)首先要使点击有效,因为 better-scroll将默认事件都阻止了

2)为左侧的分栏绑定点击事件,并获取 index ,然后使右边的相应 index 分类滚动就行了~so easy ....but!!!

怎么下手?!!

1. 先实现滑动右边触发左边的功能:

做法:

(1)定义变量先~ 在data中加入一个 listHight: [] 数组;一个变量scrollY : 0,用来装目前的scroll的y位置坐标

(2)在methods 中定义一个函数计算高度,此处还要用到一个知识点(如何获取 分类列表dom元素?)还记得上一篇中使用到的this.$refs 吗?

我们先给要获取高度的那个元素取个类名,名字叫:“food-list-hook”:

let foodList =this.$refs.foodsWrapper.getElementsByClassName('food-list-hook') 这样就获取了所有分类列表啦,计算方法定义如下:

_calculateHeight () {
    // console.log(this)
    let foodList = this.$refs.foodsWrapper.getElementsByClassName('food-list-hook')
    let height = 0
    this.listHight.push(height)
    for (let i = 0; i < foodList.length; i++) {
     let item = foodList[i]
     height += item.clientHeight
     this.listHight.push(height)
    }
}

(3)然后在计算属性computed 中,来比较数组中的高度值与当前的 scroll 的y坐标值,返回的是当前所在高度的index值:

在执行这一步时,scrollY的值,要怎么得到?(通过better-scroll 检测“scroll”事件得到,此时,需要给其加上相应的参数,做法如截图中画红线处所示)

vue2.0 better-scroll 实现移动端滑动的示例代码

currentIndex () {
    for (let i = 0; i < this.listHight.length; i++) {
     let height1 = this.listHight[i]
     let height2 = this.listHight[i + 1]
     if (!height2 || (this.scrollY >= height1 && this.scrollY < height2)) {
      return i
     }
    }
    return 0
   }
 }

(4)在 template 中,将此index 值绑定到index 值相等的左侧的列表分栏中,并指定一个类名,叫 current,如下图中的 画红线的部分:

vue2.0 better-scroll 实现移动端滑动的示例代码 

(5)在style中,将相应的current 类加上相应的样式即可:

vue2.0 better-scroll 实现移动端滑动的示例代码

2. 再来实现点击左边,右边联动的效果

(1)使 左边栏 点击有效,如下图红线标注所示:

vue2.0 better-scroll 实现移动端滑动的示例代码

(2)为左侧栏 添加相应的点击事件:

vue2.0 better-scroll 实现移动端滑动的示例代码

(3)在methods 中编写点击触发的事件 selectMenu()方法,利用 获取的 $index 使右边进行相应的滚动,其中 300ms是加上了一个过渡效果:

vue2.0 better-scroll 实现移动端滑动的示例代码

试试吧~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
获取JavaScript用户自定义类的类名称的代码
Mar 08 Javascript
JavaScript 核心参考教程 内置对象
Oct 13 Javascript
jquery遍历select元素(实例讲解)
Dec 31 Javascript
BootStrap selectpicker
Jun 20 Javascript
AngularJS 中的事件详解
Jul 28 Javascript
两种JavaScript的AES加密方式(可与Java相互加解密)
Aug 02 Javascript
使用JS组件实现带ToolTip验证框的实例代码
Aug 23 Javascript
r.js来合并压缩css文件的示例
Apr 26 Javascript
js实现多个倒计时并行 js拼团倒计时
Feb 25 Javascript
vue实现路由懒加载的3种方法示例
Sep 01 Javascript
JavaScript实现鼠标经过表格某行时此行变色
Nov 20 Javascript
Vue+TypeScript中处理computed方式
Apr 02 Vue.js
mui框架 页面无法滚动的解决方法(推荐)
Jan 25 #Javascript
vue使用 better-scroll的参数和方法详解
Jan 25 #Javascript
Vue cli+mui 区域滚动的实例代码
Jan 25 #Javascript
基于vue开发的在线付费课程应用过程
Jan 25 #Javascript
基于vue 开发中出现警告问题去除方法
Jan 25 #Javascript
关于express与koa的使用对比详解
Jan 25 #Javascript
在vue项目创建的后初始化首次使用stylus安装方法分享
Jan 25 #Javascript
You might like
PHP高级对象构建 工厂模式的使用
2012/02/05 PHP
php foreach循环中使用引用的问题
2013/11/06 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
2015/05/12 PHP
从刷票了解获得客户端IP的方法
2015/09/21 PHP
php文件上传你必须知道的几点
2015/10/20 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
PHP实现通过二维数组键值获取一维键名操作示例
2019/10/11 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
2011/03/03 Javascript
javascript监听鼠标滚轮事件浅析
2014/06/05 Javascript
jquery处理json对象
2014/11/03 Javascript
分享网页检测摇一摇实例代码
2016/01/14 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
2016/08/01 Javascript
js style.display=block显示布局错乱问题的解决方法
2016/09/21 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
2016/12/11 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
用jquery获取select标签中选中的option值及文本的示例
2018/01/25 jQuery
vue中element组件样式修改无效的解决方法
2018/02/03 Javascript
JS实现水平遍历和嵌套递归操作示例
2019/08/15 Javascript
JavaScript 实现同时选取多个时间段的方法
2019/10/17 Javascript
[01:46]TI4西雅图DOTA2前线报道 中国选手抱团调时差
2014/07/08 DOTA
[02:46]2014DOTA2国际邀请赛 选手为你解读比赛MVP充满梦想
2014/07/09 DOTA
Python与R语言的简要对比
2017/11/14 Python
浅谈Django REST Framework限速
2017/12/12 Python
CSS3中Animation动画属性用法详解
2016/07/04 HTML / CSS
html5的画布canvas——画出简单的矩形、三角形实例代码
2013/06/09 HTML / CSS
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
美国男士内衣品牌:Tommy John
2017/12/22 全球购物
墨西哥皇宫度假村预订:Palace Resorts
2018/06/16 全球购物
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
解除租赁合同协议书
2016/03/21 职场文书
详解Apache SkyWalking 告警配置指南
2021/04/22 Servers
python百行代码实现汉服圈图片爬取
2021/11/23 Python
Win11 21h2可以升级22h2吗?看看你的电脑符不符合要求
2022/07/07 数码科技