微信小程序 防连点时间_微信小程序BindTap快速连续点击目标页面跳转多次问题处理...

本文介绍了微信小程序中遇到的防连点问题,即用户快速连续点击可能导致目标页面多次加载。文章通过分析问题原因,提出了解决方案:利用throttle函数限制事件处理函数的执行频率,防止在短时间内多次调用wx.navigateTo。此外,还提供了具体的代码实现,帮助开发者避免此类问题。
摘要由CSDN通过智能技术生成

问题描述:

1)wxml片段

连续点击,加载多次

连续点击,加载一次

2)js代码片段

loadMulti:function(e) {

wx.navigateTo({

url: '/pages/loadMulti/index',

})

},

3)快速,连续点击“连续点击,加载多次”文本串时,我们会发现,目标页面loadMulti/index页面被加载了N次,需要点击N次返回,才可以返回到主页面。

问题原因剖析:

小程序基于MINA框架,该框架的核心框架的核心是一个响应的数据绑定系统,整个系统分为两块视图层(View)和逻辑层(App Service),框架可以让数据与视图非常简单地保持同步。当做数据修改的时候,只需要在逻辑层修改数据,视图层就会做相应的更新;当点击按钮的时候,视图层会发送 bindtap的事件给逻辑层,逻辑层找到对应的事件处理函数loadMulti执行。

由于视图层发送bindtap事件给逻辑层并找到对应的处理函数需要时间T1,找到对应的处理函数loadMulti后,执行loadMulti函数:wx.navigateTo, hide 原页面,需要时间T2,如果在T1+T2时间内,快速连续点击N次,完全可以加载显示N次目标页面。

解决方案:

loadOnce:function(e) {

if (!this.pageLoading) {

this.pageLoading = !0;

wx.navigateTo({

url: '/pages/loadOnce/index',

})

}

},

onShow: function() {

this.pageLoading = !1;

}

1)loadOnce事件处理函数中,设置pageLoading = true

2)页面的onShow事件中,设置pageLoading = false

其实我们可以封装成方法:

/**

*解决连续点击多次冲出触发事件

*/

function throttle(fn, gapTime) {

if (gapTime == null || gapTime == undefined) {

gapTime = 1500

}

let _lastTime = null

// 返回新的函数

return function () {

let _nowTime = + new Date()

if (_nowTime - _lastTime > gapTime || !_lastTime) {

fn.apply(this, arguments) //将this和参数传给原函数

_lastTime = _nowTime

}

}

}

tap

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)

})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2019-04-07

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值