微信小程序 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 相关文章推荐
JavaScript调用Activex控件的事件的实现方法
Apr 11 Javascript
基于jQuery的树控件实现代码(asp.net+json)
Jul 11 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
Nov 09 Javascript
JavaScript中判断整字类型最简洁的实现方法
Nov 08 Javascript
jquery 实现返回顶部功能
Nov 17 Javascript
ionic+AngularJs实现获取验证码倒计时按钮
Apr 22 Javascript
jQuery设置图片等比例缩小的方法
Apr 29 jQuery
写给vue新手们的vue渲染页面教程
Sep 01 Javascript
详解webpack打包第三方类库的正确姿势
Oct 20 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
Dec 12 Javascript
小程序识别身份证,银行卡,营业执照,驾照的实现
Nov 05 Javascript
angular异步验证防抖踩坑实录
Dec 01 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 xml实例 留言本
2009/03/20 PHP
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
PHP预定义超全局数组变量小结
2018/08/20 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
JS实现黑客帝国文字下落效果
2015/09/01 Javascript
javascript学习小结之prototype
2015/12/03 Javascript
使用Script元素发送JSONP请求的方法
2016/06/12 Javascript
通过BootStrap-select插件 js jQuery控制select属性变化
2017/01/03 Javascript
jQuery快速实现商品数量加减的方法
2017/02/06 Javascript
js Date()日期函数浏览器兼容问题解决方法
2017/09/12 Javascript
javaScript日期工具类DateUtils详解
2017/12/08 Javascript
vue-router 源码实现前端路由的两种方式
2018/07/02 Javascript
vue如何进行动画的封装
2018/09/26 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
2018/11/08 Javascript
javascript中undefined的本质解析
2019/07/31 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
利用js canvas实现五子棋游戏
2020/10/11 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
python3序列化与反序列化用法实例
2015/05/26 Python
itchat和matplotlib的结合使用爬取微信信息的实例
2017/08/25 Python
Python通过Django实现用户注册和邮箱验证功能代码
2017/12/11 Python
解决python3 urllib 链接中有中文的问题
2018/07/16 Python
python批量复制图片到另一个文件夹
2018/09/17 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
详解python安装matplotlib库三种失败情况
2020/07/28 Python
Python threading模块condition原理及运行流程详解
2020/10/05 Python
HTML5 Canvas概述
2009/08/26 HTML / CSS
来自美国主售篮球鞋的零售商店:KICKSUSA
2017/11/28 全球购物
市场营销大学生职业规划书
2014/02/25 职场文书
高速铁道技术专业求职信
2014/08/09 职场文书
教你用python实现12306余票查询
2021/06/30 Python
详解Spring Security如何在权限中使用通配符
2022/06/28 Java/Android