微信小程序 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 相关文章推荐
我也种棵OO树JXTree[js+css+xml]
Apr 02 Javascript
js中cookie的使用详细分析
May 28 Javascript
Javascript 面向对象特性
Dec 28 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
May 07 Javascript
JS预览图像将本地图片显示到浏览器上
Aug 25 Javascript
怎么选择Javascript框架(Javascript Framework)
Nov 22 Javascript
JavaScript中split() 使用方法汇总
Apr 17 Javascript
浅析在javascript中创建对象的各种模式
May 06 Javascript
jsp 网站引入外部css或者js失效问题解决
Oct 31 Javascript
基于jQuery实现数字滚动效果
Jan 16 Javascript
JS中双击和单击事件冲突的解决方法
Apr 09 Javascript
vue实现组件之间传值功能示例
Jul 13 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
全新的PDO数据库操作类php版(仅适用Mysql)
2012/07/22 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
jquery 绑定回车动作扑捉回车键触发的事件
2014/03/26 Javascript
jQuery实现鼠标点击弹出渐变层的方法
2015/07/09 Javascript
jquery实现的点击翻书效果代码
2015/11/04 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
2015/12/11 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
AngularJS入门教程中SQL实例详解
2016/07/27 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
node.js 抓取代理ip实例代码
2017/04/30 Javascript
使用ES6语法重构React代码详解
2017/05/09 Javascript
Vue组件开发技巧总结
2018/03/04 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
node.js监听文件变化的实现方法
2019/04/17 Javascript
JS实现放烟花效果
2020/03/10 Javascript
在Python中利用Into包整洁地进行数据迁移的教程
2015/03/30 Python
Python查找函数f(x)=0根的解决方法
2015/05/07 Python
使用FastCGI部署Python的Django应用的教程
2015/07/22 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
2016/06/27 Python
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
python基于http下载视频或音频
2018/06/20 Python
对Python3+gdal 读取tiff格式数据的实例讲解
2018/12/04 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
Pytorch 实现自定义参数层的例子
2019/08/17 Python
python super的使用方法及实例详解
2019/09/25 Python
使用pytorch和torchtext进行文本分类的实例
2020/01/08 Python
pytorch1.0中torch.nn.Conv2d用法详解
2020/01/10 Python
纯CSS3制作的简洁蓝白风格的登录模板(非IE效果更好)
2013/08/11 HTML / CSS
荷兰睡眠专家:Beter Bed
2020/11/23 全球购物
就业协议书范本
2014/04/11 职场文书
小学师德师风演讲稿
2014/09/02 职场文书
2015年项目工作总结
2015/04/29 职场文书
2016年员工年度考核评语
2015/12/02 职场文书