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 相关文章推荐
非常漂亮的JS代码经典广告
Oct 21 Javascript
url 编码 js url传参中文乱码解决方案
Apr 11 Javascript
PageSwitch插件实现100种不同图片切换效果
Jul 28 Javascript
在React框架中实现一些AngularJS中ng指令的例子
Mar 06 Javascript
浅谈JS函数定义方式的区别
Oct 30 Javascript
JavaScript实现旋转轮播图
Aug 18 Javascript
JavaScript实现求最大公共子串的方法
Feb 03 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
Mar 06 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
Mar 12 Javascript
vue@cli3项目模板怎么使用public目录下的静态文件
Jul 07 Javascript
微信小程序绘制半圆(弧形)进度条
Nov 18 Javascript
如何在 Vue 中使用 JSX
Feb 14 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
收集的DedeCMS一些使用经验
2007/03/17 PHP
Discuz 6.0+ 批量注册用户名
2009/09/13 PHP
php面向对象全攻略 (八)重载新的方法
2009/09/30 PHP
php实现网站插件机制的方法
2009/11/10 PHP
浅析PHP绘图技术
2013/07/03 PHP
php rsa加密解密使用详解
2015/01/14 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
php格式文件打开的四种方法
2018/02/24 PHP
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
Bootstrap实现弹性搜索框
2016/07/11 Javascript
AngularJS 异步解决实现方法
2017/06/12 Javascript
vue刷新和tab切换实例
2018/02/11 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
2019/01/28 Javascript
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
Python中用于返回绝对值的abs()方法
2015/05/14 Python
使用Python的Scrapy框架十分钟爬取美女图
2016/12/26 Python
老生常谈python函数参数的区别(必看篇)
2017/05/29 Python
新手常见6种的python报错及解决方法
2018/03/09 Python
python 将md5转为16字节的方法
2018/05/29 Python
Python读取mat文件,并转为csv文件的实例
2018/07/04 Python
python实现FTP循环上传文件
2020/03/20 Python
Python flask框架端口失效解决方案
2020/06/04 Python
解决使用Pandas 读取超过65536行的Excel文件问题
2020/11/10 Python
css3 media 响应式布局的简单实例
2016/08/03 HTML / CSS
个人自荐信
2013/12/05 职场文书
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
借款协议书
2014/04/12 职场文书
自动化专业毕业生求职信
2014/06/18 职场文书
体育专业求职信
2014/07/16 职场文书
2016暑期社会实践新闻稿
2015/11/25 职场文书
ORACLE查看当前账号的相关信息
2021/06/18 Oracle
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android
mysql拆分字符串作为查询条件的示例代码
2022/07/07 MySQL
源码安装apache脚本部署过程详解
2022/09/23 Servers