微信小程序 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对象和Javascript对象之间转换的实例代码
Mar 20 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
Apr 07 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
Jan 31 Javascript
js处理表格对table进行修饰
May 26 Javascript
jquery滚动加载数据的方法
Mar 09 Javascript
JavaScript实现的简单烟花特效代码
Oct 20 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
Nov 17 Javascript
常用的几个JQuery代码片段
Mar 13 Javascript
利用require.js与angular搭建spa应用的方法实例
Jul 19 Javascript
element ui table 增加筛选的方法示例
Nov 02 Javascript
公众号SVG动画交互实战代码
May 31 Javascript
Openlayers实现扩散的动态点(水纹效果)
Aug 17 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
磨咖啡豆的密诀
2021/03/03 冲泡冲煮
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
常用的几段javascript代码分享
2014/03/25 Javascript
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
jquery选择器中的空格与大于号&gt;、加号+与波浪号~的区别介绍
2016/06/24 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
AngularJS创建一个上传照片的指令实例代码
2018/02/24 Javascript
vue嵌套路由与404重定向实现方法分析
2018/05/04 Javascript
详细讲解如何创建, 发布自己的 Vue UI 组件库
2019/05/29 Javascript
vue通过video.js解决m3u8视频播放格式的方法
2019/07/30 Javascript
JS实现随机抽取三人
2019/11/06 Javascript
javascript实现文字跑马灯效果
2020/06/18 Javascript
Vue数组响应式操作及高阶函数使用代码详解
2020/08/01 Javascript
[08:04]TI4西雅图DOTA2前线报道 海涛探访各路人马
2014/07/09 DOTA
[00:47]DOTA2荣耀之路6:玩不了啦!
2018/05/30 DOTA
python打开网页和暂停实例
2014/09/30 Python
Python HTMLParser模块解析html获取url实例
2015/04/08 Python
python抓取百度首页的方法
2015/05/19 Python
详解Django框架中的视图级缓存
2015/07/23 Python
Python计算已经过去多少个周末的方法
2015/07/25 Python
python数据抓取分析的示例代码(python + mongodb)
2017/12/25 Python
Python shelve模块实现解析
2019/08/28 Python
如何使用python代码操作git代码
2020/02/29 Python
用CSS3实现无限循环的无缝滚动的实例代码
2017/07/04 HTML / CSS
天巡全球:Skyscanner Global
2017/06/20 全球购物
Qoo10台湾站:亚洲领先的在线市场
2018/05/15 全球购物
Hotels.com日本:国外和海外住宿,酒店预订
2019/12/13 全球购物
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
学前教育学生自荐信范文
2013/12/31 职场文书
迟到检讨书1000字
2014/01/15 职场文书
理想演讲稿范文
2014/05/21 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
2014年业务工作总结
2014/11/17 职场文书