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


Posted in Javascript onApril 08, 2019

问题描述:

1)wxml片段

<view bindtap="loadMulti">
  <text>连续点击,加载多次</text>
</view>
<view bindtap="loadOnce">
  <text>连续点击,加载一次</text>
</view>

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

    }

  }

}
<button bindtap='tap' data-key='abc'>tap</button>

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)

})

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

Javascript 相关文章推荐
javascript js cookie的存储,获取和删除
Dec 29 Javascript
JavaScript之appendChild、insertBefore和insertAfter使用说明
Dec 30 Javascript
stream.js 一个很小、完全独立的Javascript类库
Oct 28 Javascript
创建公共调用 jQuery Ajax 带返回值
Aug 01 Javascript
jqgrid 表格数据导出实例
Nov 21 Javascript
jquery得到iframe src属性值的方法
Sep 25 Javascript
浅谈Javascript数组的使用
Jul 29 Javascript
JavaScript数据类型学习笔记分享
Sep 01 Javascript
vue学习笔记之指令v-text &amp;&amp; v-html &amp;&amp; v-bind详解
May 12 Javascript
react开发教程之React 组件之间的通信方式
Aug 12 Javascript
React Native AsyncStorage本地存储工具类
Oct 24 Javascript
Node.js开发之套接字(socket)编程入门示例
Nov 05 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
Apr 08 #Javascript
微信小程序视图控件与bindtap之间的问题的解决
Apr 08 #Javascript
微信小程序实现bindtap等事件传参
Apr 08 #Javascript
详解vue中axios请求的封装
Apr 08 #Javascript
使用taro开发微信小程序遇到的坑总结
Apr 08 #Javascript
vue+element+Java实现批量删除功能
Apr 08 #Javascript
如何为你的JavaScript代码日志着色详解
Apr 08 #Javascript
You might like
PHP 数组基础知识小结
2010/08/20 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
js onload处理html页面加载之后的事件
2013/10/30 Javascript
js数组与字符串的相互转换方法
2014/07/09 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
原生javascript实现分页效果
2017/04/21 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
Js中将Long转换成日期格式的实现方法
2018/06/05 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
2018/06/07 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
2018/10/09 Javascript
Angular脚手架开发的实现步骤
2019/04/09 Javascript
layui插件表单验证提交触发提交的例子
2019/09/09 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
vue-cli3项目打包后自动化部署到服务器的方法
2020/09/16 Javascript
[04:26]2014DOTA2西雅图国际邀请赛 总决赛TOPPLAY
2014/07/22 DOTA
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
关于numpy数组轴的使用详解
2019/12/05 Python
python代码如何注释
2020/06/01 Python
Python selenium爬虫实现定时任务过程解析
2020/06/08 Python
HTML5有哪些新特征
2015/12/01 HTML / CSS
德国BA保镖药房中文网:Bodyguard Apotheke
2021/03/09 全球购物
JPA面试常见问题
2016/11/14 面试题
装潢设计实习自我鉴定
2013/09/19 职场文书
农业大学毕业生的个人自我评价
2013/10/11 职场文书
思想品德自我评价
2014/02/04 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
一篇文章带你搞懂Python类的相关知识
2021/05/20 Python
Python字典的基础操作
2021/11/01 Python
Java 死锁解决方案
2022/05/11 Java/Android