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 相关文章推荐
ExtJS下 Ext.Direct加载和提交过程排错小结
Apr 02 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
Sep 04 Javascript
JavaScript代码实现左右上下自动晃动自动移动
Apr 08 Javascript
浅谈几种常用的JS类定义方法
Jun 08 Javascript
AngularJs  unit-testing(单元测试)详解
Sep 02 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
Jul 12 Javascript
chorme 浏览器记住密码后input黄色背景处理方法(两种)
Nov 22 Javascript
JavaScript原生实现观察者模式的示例
Dec 15 Javascript
详解Angular系列之变化检测(Change Detection)
Feb 26 Javascript
antd组件Upload实现自己上传的实现示例
Dec 18 Javascript
vue集成kindeditor富文本的实现示例代码
Jun 07 Javascript
Javascript异步流程控制之串行执行详解
Sep 27 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
第十节 抽象方法和抽象类 [10]
2006/10/09 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
php使用Session和文件统计在线人数
2015/07/04 PHP
ThinkPHP框架安全实现分析
2016/03/14 PHP
php is_executable判断给定文件名是否可执行实例
2016/09/26 PHP
js操作textarea 常用方法总结
2012/12/03 Javascript
jQuery 中$(this).index与$.each的使用指南
2014/11/20 Javascript
jQuery中detach()方法用法实例
2014/12/25 Javascript
jQuery根据用户电脑是mac还是pc加载对应样式的方法
2015/06/26 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
详解axios在node.js中的post使用
2017/04/27 Javascript
浅谈JavaScript中的属性:如何遍历属性
2017/09/14 Javascript
基于vue展开收起动画的示例代码
2018/07/05 Javascript
微信小程序实现联动选择器
2019/02/15 Javascript
解决vue的touchStart事件及click事件冲突问题
2020/07/21 Javascript
vue 组件基础知识总结
2021/01/26 Vue.js
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
[02:40]2018年度DOTA2最佳新人-完美盛典
2018/12/16 DOTA
Python字符转换
2008/09/06 Python
python网络编程学习笔记(一)
2014/06/09 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
2018/06/11 Python
解决csv.writer写入文件有多余的空行问题
2018/07/06 Python
python 常见的反爬虫策略
2020/09/27 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
2020/10/23 Python
python tkinter实现连连看游戏
2020/11/16 Python
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
西班牙床垫网上商店:Colchones.es
2018/05/06 全球购物
工程项目经理岗位职责
2013/12/15 职场文书
《寓言两则》教学反思
2014/02/27 职场文书
个人承诺书格式
2014/06/03 职场文书
数学兴趣小组活动总结
2014/07/08 职场文书
行政处罚决定书
2015/06/24 职场文书
初一英语教学反思
2016/02/15 职场文书
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技