小程序-云开发 bindscroll滚动事件执行setData()方法,导致scroll-view视图抖动
需求描述
想做一个类似京东小程序首页功能列表左右滑动的效果,效果图如下

扫码体验

遇到的问题
1. 如何让scroll-view显示两行
做过小程序开发的都知道,scroll-view要么显示一行,可以左右滚动,如果显示两行的话就会适应屏幕宽度,达不到左右滚动的效果,所以我们需要改变一下我们的数据结构
我们再来看看wxml如何渲染这些数据
<scroll-view class="classfication-scroll" scroll-with-animation='true' scroll-anchoring='true' scroll-x enable-flex bindscroll='bindscroll'>
<view class="scroll-view-item">
<view wx:for="{{classficationList}}" class="child">
<view class='classfication-view' wx:for="{{item.item}}" wx:for-item='child' wx:key="_id" wx:if="{{child._id<50}}" data-id='{{child.id}}' data-name='{{child.name}}' bindtap='click'>
<view class='image' style='background:{{child.style}}'>
<image src="{{child.url}}" />
</view>
<view class='name'>{{child.name}}</view>
</view>
</view>
</view>
</scroll-view>
2. 如何让底部的scroll-bar跟随着上面的功能列表进行滑动
首先需要获取scroll-view滑动的距离,这里用到scroll-view的bindscroll='bindscroll'方法,
关键代码:
var move = scrollLeft / canScroll / 2 * 100;
3. 如何解决左右滑动视图抖动的问题
解决方案:当滑动到最左或者左右的时候直接return,不执行setData方式,减少性能消耗
bindscroll(event) {
const {
scrollLeft,
scrollWidth
} = event.detail;
if (scrollLeft < 0) { // 向右滑动时超出屏幕就return
return
}
var sc = this.data.scrollWidth; // 屏幕宽度
var canScroll = scrollWidth - sc; // 能滚动的宽度
if (scrollLeft > canScroll) { // 向左滑动时超出屏幕就return
return
}
var move = scrollLeft / canScroll / 2 * 100;
this.setData({
scrollBar: move
})
},
4. 使用防抖的思想再次优化快速滑动时的性能消耗
bindscroll(event) {
const {
scrollLeft,
scrollWidth
} = event.detail;
if (scrollLeft < 0) { // 向右滑动时超出屏幕就return
return
}
var sc = this.data.scrollWidth; // 屏幕宽度
var canScroll = scrollWidth - sc; // 能滚动的宽度
if (scrollLeft > canScroll) { // 向左滑动时超出屏幕就return
return
}
},
小程序-云开发 bindscroll滚动事件执行setData()方法,导致scroll-view视图抖动的更多相关文章
- 第六章 “我要点爆”微信小程序云开发实例之爆文详情页制作
爆文详情页制作 从首页中数据列表打开相应详情页面的方法: 给数据列表中每个数据项加一个点击事件,同时将当前数据项的id暂时记录在本地,然后跳转到详情页面detail goopen: function ...
- 支付宝小程序云开发serverless----获取用户的user_id
支付宝小程序云开发serverless----获取用户的user_id 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 开通云调 ...
- 微信小程序云开发指南
一.初识云开发 官方文档 小程序·云开发是微信团队联合腾讯云推出的专业的小程序开发服务. 开发者可以使用云开发快速开发小程序.小游戏.公众号网页等,并且原生打通微信开放能力. 开发者无需搭建服务器,可 ...
- 技本功丨收藏!斜杠青年与你共探微信小程序云开发(下篇)
2019年2月26日,人们为了一个杯子疯了一天. 星巴克猫爪杯,一场已经与猫无关了的“圣杯战争“.网上的倒卖价格,已炒至近千元! 求而不得,舍而不能,得而不惜.这是人最大的悲哀... 所以,请珍惜以下 ...
- 用小程序·云开发两天搭建mini论坛丨实战
笔者最近涉猎了小程序相关的知识,于是利用周末时间开发了一款类似于同事的小程序,深度体验了小程序云开发模式提供的云函数.数据库.存储三大能力.关于云开发,可参考文档:小程序·云开发. 个人感觉云开发带来 ...
- 基于微信小程序云开发实现的婚礼邀请函模板,可自行定制开发
这个婚礼邀请函是之前帮别人做的,现在人家婚礼举办过了也没啥关系了,想着就修改成通用模板进行开源,方便大家尤其是小白们克隆项目之后稍微修改就能够直接使用. 当时自己开始这个项目时候也是查阅了很多教程文章 ...
- 微信小程序云开发不完全指北
微信小程序云开发不完全指北 首先必须说明云开发的"云"并不是类似云玩家里的云的意思,而是微信小程序真的提供了云开发的接口以及一个简单的提供存储.数据库服务的虚拟后台(对于一些轻量小 ...
- 微信小程序云开发如何上手
简要介绍 微信小程序云开发,是基于 Serverless 的一站式后端云服务,涵盖函数.数据库.存储.CDN等服务,免后端运维.基于云开发可以免鉴权调用微信所有开放能力. 前提准备 微信开发者工具 创 ...
- 微信小程序-云开发实战教程
微信小程序-云开发实战教程 云函数,云存储,云数据库,云调用 https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/gettin ...
随机推荐
- 大数据Hbase相关运维题
1.启动先电大数据平台的 Hbase 数据库,其中要求使用 master 节点的RegionServer.在 Linux Shell 中启动 Hbase shell,查看 HBase 的版本信息.(相 ...
- 关于ubuntu安装vmware报错问题解决
命令行中报错 首先报错内容为:(vmware-installer.py:3847): Gtk-WARNING **: 无法在模块路径中找到主题引擎:“murrine”, 以上的内容: sudo apt ...
- Java ASM学习(2)
1.编译后的方法区,其中存储的代码都是一些字节码指令 2.Java虚拟机执行模型: java代码是在一个线程内部执行,每个线程都有自己的执行栈,栈由帧组成,每个帧表示一个方法的调用,每调用一个方法,都 ...
- tp5--路由的使用方法(深入)
懒得写注释,直接上代码 配置文件Route: <?php use think\Route; //tp5路由测试 //动态注册 //Route::rule('路由表达式','路由地址','请求类型 ...
- tp5--开启与关闭调试模式
https://www.cnblogs.com/finalanddistance/p/8906000.html TP5 显示错误信息 在TP5中,我们运行的代码有错误无法执行时,只显示页面错误,而 ...
- input框处理大全
1.去掉谷歌input记住账号或密码时默认出现的黄色背景: 直接用css的内阴影来覆盖黄色(代码中 white可换成其他颜色) input:-webkit-autofill { -webkit-box ...
- PHP open_basedir配置未包含upload_tmp_dir 导致服务器不能上传文件
在做一个上传图片的功能时候发现后台接收到的$_FILES['file']['error'] = 6,这个错误意思是找不到临时文件,或者是临时文件夹无权限,需要更改php.ini文件的 upload_t ...
- MySQL5.7 并行复制
MySQL5.7 并行复制 1.缘由: 某天看到主从复制延时的告警有点频繁,就想着是不是彻底可以解决一下. 一般主从复制,有三个线程参与,都是单线程:Binlog Dump(主) ----->I ...
- Failed building wheel for cytoolz
2019独角兽企业重金招聘Python工程师标准>>> 当我使用 pip instlal cytoolz 时, 报以下错误: error: Microsoft Visual C++ ...
- 【总结】Centos中,Kerberos安装
1.安装软件包 安装必须的工具 bison, make, binutils 下载压缩包至/usr/local目录下,并解压 [root@localhost local]# ls krb5-1.14.t ...