微信小程序 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的cookie插件
Apr 07 Javascript
js Math 对象的方法
Sep 01 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
Dec 23 Javascript
JavaScript中的DSL元编程介绍
Mar 15 Javascript
jQuery实现简单下拉导航效果
Sep 07 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
Dec 13 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
Dec 14 Javascript
vue树形结构获取键值的方法示例
Jun 21 Javascript
vue-router的使用方法及含参数的配置方法
Nov 13 Javascript
Javascript删除数组里的某个元素
Feb 28 Javascript
vue el-table实现行内编辑功能
Dec 11 Javascript
全局安装 Vue cli3 和 继续使用 Vue-cli2.x操作
Sep 08 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动态生成VRML网页
2006/10/09 PHP
PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
2007/02/15 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
2012/07/19 PHP
php提交post数组参数实例分析
2015/12/17 PHP
PHP模板引擎Smarty中变量的使用方法示例
2016/04/11 PHP
PDO::errorInfo讲解
2019/01/28 PHP
JavaScript异步调用定时方法并停止该方法实现代码
2012/03/16 Javascript
window.onload和$(function(){})的区别介绍
2013/10/30 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
JavaScript的Number对象的toString()方法
2015/12/18 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
2017/02/24 Javascript
Extjs表单输入框异步校验的插件实现方法
2017/03/20 Javascript
javascript实现多张图片左右无缝滚动效果
2017/03/22 Javascript
详解Angular之constructor和ngOnInit差异及适用场景
2017/06/22 Javascript
微信小程序实现根据字母选择城市功能
2017/08/16 Javascript
Vue 项目代理设置的优化
2018/04/17 Javascript
javascript实现文本框标签验证的实例代码
2018/10/14 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
2019/12/12 Javascript
Vue组件简易模拟实现购物车
2020/12/21 Vue.js
关于element的表单组件整理笔记
2021/02/05 Javascript
初步介绍Python中的pydoc模块和distutils模块
2015/04/13 Python
python更新列表的方法
2015/07/28 Python
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
python 表达式和语句及for、while循环练习实例
2017/07/07 Python
python3爬取各类天气信息
2018/02/24 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
安德玛加拿大官网:Under Armour加拿大
2019/10/02 全球购物
校园学雷锋广播稿
2014/10/08 职场文书
人民币使用说明书
2019/04/17 职场文书
Oracle 死锁的检测查询及处理
2021/09/25 Oracle
Python 数据可视化之Matplotlib详解
2021/11/02 Python
Redis高可用集群redis-cluster详解
2022/03/20 Redis
python热力图实现的完整实例
2022/06/25 Python
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
2022/08/14 MySQL
CSS link与@import的区别和用法解析
2023/05/07 HTML / CSS