微信小程序 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 图片轮换效果
Jul 29 Javascript
jquery 查找select ,并触发事件的实现代码
Mar 30 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
Jan 23 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
Feb 19 Javascript
js浏览器本地存储store.js介绍及应用
May 13 Javascript
js 加密压缩出现bug解决方案
Nov 25 Javascript
微信小程序中顶部导航栏的实现代码
Mar 30 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
Apr 01 jQuery
BootStrap表单控件之复选框checkbox和单选择按钮radio
May 23 Javascript
layui中的switch开关实现方法
Sep 03 Javascript
layui 对table中的数据进行转义的实例
Sep 12 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
Jul 26 Javascript
基于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中使用Oracle数据库(3)
2006/10/09 PHP
PHP数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
PHP示例演示发送邮件给某个邮箱
2019/04/03 PHP
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
Js基础学习资料
2010/11/23 Javascript
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
关于innerHTML后丢失动态绑定的EVENT问题解决方法
2013/05/19 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
2013/12/27 Javascript
jQuery中.live()方法的用法深入解析
2013/12/30 Javascript
ext combobox动态加载数据库数据(附前后台)
2014/06/17 Javascript
分享一则JavaScript滚动条插件源码
2015/03/03 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
2015/08/03 Javascript
NodeJS整合银联网关支付(DEMO)
2016/11/09 NodeJs
详解Javascript数据类型的转换规则
2016/12/12 Javascript
详解Angularjs 如何自定义Img的ng-load 事件
2017/02/15 Javascript
jQuery动态生成不规则表格(前后端)
2017/02/21 Javascript
JS实现的tab切换选项卡效果示例
2017/02/28 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
JS失效 提示HTML1114: (UNICODE 字节顺序标记)的代码页 utf-8 覆盖(META 标记)的冲突的代码页 utf-8
2017/06/23 Javascript
基于js粘贴事件paste简单解析以及遇到的坑
2017/09/07 Javascript
vue通过cookie获取用户登录信息的思路详解
2018/10/30 Javascript
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
打印出python 当前全局变量和入口参数的所有属性
2009/07/01 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
2017/09/25 Python
Python字符串的一些操作方法总结
2019/06/10 Python
解决Pytorch训练过程中loss不下降的问题
2020/01/02 Python
联想澳大利亚官网:Lenovo Australia
2018/01/18 全球购物
S’well Bottle保温杯官网:绝缘不锈钢水瓶
2018/05/09 全球购物
小学新学期教师寄语
2014/01/18 职场文书
2014国培学习感言
2014/03/05 职场文书
后备干部培训方案
2014/05/22 职场文书
代办出身证明书
2014/10/21 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
物流业务员岗位职责
2015/04/03 职场文书