防止小程序多次点击跳转解决方案

场景在使用小程序的时候会出现这样一种情况:当网络条件差或卡顿的情况下,使用者会认为点击无效而进行多次点击,最后出现多次跳转页面的情况,就像下图(快速点击了两次): 解决办法然后从轻松理解JS函数节流和函 ...

场景

在使用小程序的时候会出现这样一种情况:当网络条件差或卡顿的情况下,使用者会认为点击无效而进行多次点击,最后出现多次跳转页面的情况,就像下图(快速点击了两次):

解决办法

然后从 轻松理解JS函数节流和函数防抖 中找到了解决办法,就是函数节流(throttle):函数在一段时间内多次触发只会执行第一次,在这段时间结束前,不管触发多少次也不会执行函数

/utils/util.js:

 gapTime || !_lastTime) {
fn()
_lastTime = _NowTime}
}}module.exports = {
throttle: throttle}

Box-sizing: border-Box; list-style: inherit;">/pages/throttle/throttle.wxml:

rush:html;toolbar:false">tap

Box-sizing: border-Box; list-style: inherit;">/pages/throttle/throttle.js

rush:js;toolbar:false">const util = require('../../utils/util.js')Page({
data: {
text: 'tomfriwel'
},
onLoad: function (options) {

},
tap: util.throttle(function (e) {
console.log(this)
console.log(e)
console.log((new Date()).getSeconds())
}, 1000)})

这样,疯狂点击按钮也只会1s触发一次。

但是这样的话出现一个问题,就是当你想要获取this.data得到的this是undefined, 或者想要获取微信组件button传递给点击函数的数据e也是undefined,所以throttle函数还需要做一点处理来使其能用在微信小程序页面js里。

出现这种情况的原因是throttle返回的是一个函数,已经不是最初的函数了。新函数包裹着原函数,所以组件button传递的参数是在新函数里。所以我们需要把这些参数传递给真正需要执行的函数fn。

最后的throttle函数如下:

 gapTime || !_lastTime) {
fn.apply(this, arguments) //将this和参数传给原函数
_lastTime = _NowTime}
}}

再次点击按钮this和e都有了:

参考

代码

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


开发微信小程序的用户授权登录功能
小程序开发页面如何实现跳转?
浅谈小程序开发中蓝牙连接错误分析及解决方法
什么是小程序?它有哪些功能?
如何配置小程序开发项目结构?(教程)
怎么把自己的店加入小程序
微信小程序怎么实现购物车功能?(方法介绍)
小程序使用函数节流解决页面多次跳转问题
小程序中下拉刷新页面的功能怎么实现?
小程序生成参数二维码的方法介绍
小程序开发中使用事件监听器的方法介绍
开发小程序需要掌握哪些技术
微信小程序无法获取定位怎么办
小程序如何通过watch和computed检测数据
谈谈小程序开发中一些常见错误和排除方法
小程序介绍一般写什么内容
小程序API可以实现什么功能?
小程序中如何管理session?
小程序的21个新功能
小程序如何实现分页加载数据功能?