微信小程序 scroll-view实现锚点滑动的示例


Posted in Javascript onDecember 06, 2017

前言

最近开始做小程序,通读一遍文档再上手并不算难,但不得不说小程序里还是有一些坑。这里说一下如何实现页面锚点跳转,一个城市列表的效果示意图如下:

微信小程序 scroll-view实现锚点滑动的示例

因为在微信小程序的环境中不能想在浏览器里设置标签,或者操作dom滚动,传统做法就行不通了,一切都得按小程序的文档来。

一开始我们的做法是使用boundingClientRect()方法获取每个锚点的坐标,然后再用wx.pageScrollTo()方法滑动过去。结果发现效果不是很好,因为boundingClientRect方法返回的每个点的坐标会随着屏幕滑动而变化,可能还会引起页面抖动,最后还是选择scroll-view(可滚动视图区域)组件来实现锚点效果。

具体实现

具体API就不赘述了,可以去看官方文档,这里讲几个需要注意的地方,下面是一个示意的scroll-view组件代码,上面的几个属性是必须的:

<scroll-view scroll-y style="height: 200px;" bindscroll="scroll" scroll-into-view="{{toView}}" >

scroll-into-view:这个绑定了一个属性,它的值应该是页面元素的id,设置它的值就可以跳转到ID对应的元素那里了。

scroll-y:添加这个属性标明是竖向滑动的,对应的scroll-x则表示横向滑动,竖向滑动时scroll-view必须设置一个固定的height

bindscroll:监听滑动,传给他一个事件,滑动时执行该事件

文档上给的属性特别多,暂时只需要上述几个就可实现我们想要的效果。实现原理也很简单,内容部分,每个英文简写的view设置一个id,然后在导航list那里点击时,就把scroll-into-view的值设置成点击的那个id即可实现跳转。

再说一下scroll-view的高度问题,这个一定要做适配的固定高度,不然在不同屏幕大小的手机上的显示效果有差异。

几点优化

到这里功能基本都实现了,但后面还发现一些问题:如果要隐藏scroll-view的滚动条,需要设置css样式:::-webkit-scrollbar

::-webkit-scrollbar {
 width: 0;
 height: 0;
 color: transparent;
}

还有就是点了一个锚点实现了跳转,这个时候你滚动页面再点之前点的锚点,页面就不会再跳转了,这个时候就需要监听滚动事件,滚动时将scroll-into-view属性的值清空。或者在每次锚点跳转后,再由一个异步操作将scroll-into-view属性的值清空。

2017/12/05补充:

scroll-view默认是无滑动动画的,需要滚动的动画效果需要在组件上设置:scroll-with-animation='true'
关于固定高度height的设置问题,一开始我以为这个高度和滚动元素的数目/高度有关,这个时候处理动态变化的列表就很麻烦。后面在网上看到的一个方法就是使用wx.getSystemInfo方法得到windowHeight,把这个设置为scroll-view的高度(单位为px)即可。

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

Javascript 相关文章推荐
jQuery 1.0.2
Oct 11 Javascript
javascript(jquery)利用函数修改全局变量的代码
Nov 02 Javascript
js css后面所带参数含义介绍
Aug 18 Javascript
javascript的事件触发器介绍的实现
Jun 05 Javascript
JavaScript设计模式之策略模式实例
Oct 10 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
Feb 08 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
Feb 22 Javascript
react开发中如何使用require.ensure加载es6风格的组件
May 09 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
Mar 13 Javascript
微信小程序定位当前城市的方法
Jul 19 Javascript
vue-router源码之history类的浅析
May 21 Javascript
Vue实现动态查询规则生成组件
May 27 Vue.js
基于Vue制作组织架构树组件
Dec 06 #Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
Dec 06 #Javascript
如何重置vue打印变量的显示方式
Dec 06 #Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
Dec 06 #Javascript
vue cli使用绝对路径引用图片问题的解决
Dec 06 #Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
Dec 06 #Javascript
实现单层json按照key字母顺序排序的示例
Dec 06 #Javascript
You might like
php分页函数
2006/07/08 PHP
PHP文件读取功能的应用实例
2015/05/08 PHP
PHP实现事件机制的方法
2015/07/10 PHP
php获取服务器操作系统相关信息的方法
2016/10/08 PHP
laradock环境docker-compose操作详解
2019/07/29 PHP
在JavaScript中,为什么要尽可能使用局部变量?
2009/04/06 Javascript
让复选框只能选择一项的方法
2013/10/08 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
2017/07/30 Javascript
React中的refs的使用教程
2018/02/13 Javascript
简单的三步vuex入门
2018/05/20 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
详解JS浏览器事件循环机制
2019/03/27 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
微信小程序仿通讯录功能
2020/04/09 Javascript
Vue项目开发常见问题和解决方案总结
2020/09/11 Javascript
详解python3 + Scrapy爬虫学习之创建项目
2019/04/12 Python
利用python numpy+matplotlib绘制股票k线图的方法
2019/06/26 Python
django多种支付、并发订单处理实例代码
2019/12/13 Python
Python递归实现打印多重列表代码
2020/02/27 Python
java字符串格式化输出实例讲解
2021/01/06 Python
最新销售员个人自荐信
2013/09/21 职场文书
分公司经理岗位职责
2013/11/11 职场文书
校长就职演讲稿
2014/01/06 职场文书
内勤主管岗位职责
2014/04/03 职场文书
省级优秀毕业生主要事迹
2014/05/29 职场文书
企业管理标语
2014/06/10 职场文书
学校党的群众路线教育实践活动对照检查材料
2014/09/24 职场文书
2014年党的群众路线教育实践活动整改措施(个人版)
2014/09/25 职场文书
出国签证在职证明范本
2014/11/24 职场文书
2015年销售工作总结范文
2015/03/30 职场文书
2015年禁毒工作总结
2015/04/30 职场文书
2015医院个人工作总结范文
2015/05/21 职场文书
公司车辆维修管理制度
2015/08/05 职场文书
Ajax常用封装库——Axios的使用
2021/05/08 Javascript