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 相关文章推荐
Mootools 1.2教程 滚动条(Slider)
Sep 15 Javascript
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
Oct 31 Javascript
javascript学习(二)javascript常见问题总结
Jan 02 Javascript
jQuery+.net实现浏览更多内容(改编php版本)
Mar 28 Javascript
Jquery submit()无法提交问题
Apr 21 Javascript
细说javascript函数从函数的构成开始
Aug 29 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
Dec 15 Javascript
jQuery插件scroll实现无缝滚动效果
Apr 27 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
Jul 01 Javascript
JavaScript实现多种排序算法
Feb 24 Javascript
vue中使用v-model完成组件间的通信
Aug 22 Javascript
微信小程序复选框实现多选一功能过程解析
Feb 14 Javascript
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的hash算法介绍
2014/02/13 PHP
CodeIgniter中实现泛域名解析
2014/07/19 PHP
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
Yii框架响应组件用法实例分析
2019/09/04 PHP
JavaScript Event学习第十一章 按键的检测
2010/02/10 Javascript
基于JQuery实现的类似购物商城的购物车
2011/12/06 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
利用vscode调试编译后的js代码详解
2018/05/14 Javascript
vue插件实现v-model功能
2018/09/10 Javascript
防止Layui form表单重复提交的实现方法
2019/09/10 Javascript
[49:08]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[49:43]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
基于python实现聊天室程序
2018/07/27 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
如何让IE9以下版本(ie6/7/8)认识html5元素
2013/04/01 HTML / CSS
HTML5拖拉上传文件的简单实例
2017/01/11 HTML / CSS
英国设计师泳装、沙滩装和比基尼在线精品店:Beach Cafe
2019/08/28 全球购物
英国排名第一的宠物店:PetPlanet
2020/02/02 全球购物
夏季奶茶店创业计划书
2014/01/16 职场文书
年终考核评语
2014/01/19 职场文书
在校大学生个人的自我评价
2014/02/13 职场文书
代收款委托书范本
2014/10/01 职场文书
介绍长城的导游词
2015/01/30 职场文书
期末个人总结范文
2015/02/13 职场文书
出纳试用期自我评价
2015/03/10 职场文书
企业文化学习心得体会
2016/01/21 职场文书
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android