详解小程序如何避免多次点击,重复触发事件


Posted in Javascript onApril 08, 2019

作为前端开发,我们经常会遇到的场景,比如用户点击获取验证码按钮时,没有反应,大部分用户都会接着点击,这就会造成用户收到多条验证码,这是因为后台api请求比较慢,而客户端体验又做得不到位,导致用户以为没点击到或者是页面假死,在上次请求还没处理完,就再次点击按钮。这对于我们开发来说,这是bug。

如何解决或避免这个问题呢?一般来说有两种情况。

1、点击事件是执行网络请求(提交评论,验证码,支付)

这种情况下可以在请求执行之前显示一个模式的加载框,请求完成后再关闭加载框。

由于小程序在1.1.0版本基础库才支持wx.showLoading,因此需要对低版本做兼容处理,代码如下:

function showLoading(message) {
 if (wx.showLoading) {
  // 基础库 1.1.0 微信6.5.6版本开始支持,低版本需做兼容处理
  wx.showLoading({
   title: message,
   mask: true
  });
 } else {
  // 低版本采用Toast兼容处理并将时间设为20秒以免自动消失
  wx.showToast({
   title: message,
   icon: 'loading',
   mask: true,
   duration: 20000
  });
 }
}
 
function hideLoading() {
 if (wx.hideLoading) {
  // 基础库 1.1.0 微信6.5.6版本开始支持,低版本需做兼容处理
  wx.hideLoading();
 } else {
  wx.hideToast();
 }
}

我们可以将显示加载框和关闭加载框的代码放在公共的代码里面比如util,然后在使用时直接调用即可。

function request() {
 util.showLoading('加载中...');
 wx.request({
  url: app.globalData.host + 'xxx',
  data: {...},
  method: 'GET',
  success: function (res) {
   util.hideLoading()
   ...
  },
  fail: function (res) {
   util.hideLoading()
   ...
  }
 })
}

2、点击事件是页面跳转

当点击事件需要页面跳转时,不太适合显示加载框,但小程序的页面跳转并不是很快,如果不作处理又会导致用户反复点击打开多个页面,这里可以使用限制按钮或控件的点击间隔的方式处理,同样可以将这个方法放到公共的代码里面比如util,然后在使用时直接调用即可。

function buttonClicked(self) {
 self.setData({
  buttonClicked: true
 })
 setTimeout(function () {
  self.setData({
   buttonClicked: false
  })
 }, 500)
}

首先需要在页面对应的js文件里面增加一个buttonClicked数据对象,然后在点击事件里面调用上述方法。

Page({
 data: {
  buttonClicked: false
 },
 click: function (e) {
  util.buttonClicked(this);
  var id = e.currentTarget.dataset.id;
  wx.navigateTo({
   url: '../detail/detail?id=' + id
  })
 },
})

另外,在wxml的点击控件中通过buttonClicked判断是否可以点击,可以用bindtap也可以用disabled

<view bindtap="{{!buttonClicked?'click':''}}" data-id="{{id}}" />
<button bindtap="{{!buttonClicked?'click':''}}" data-id="{{id}}" />
<button bindtap="click" disabled="buttonClicked" data-id="{{id}}" />

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

Javascript 相关文章推荐
一些常用的JS功能函数代码
Jun 23 Javascript
js定时器怎么写?就是在特定时间执行某段程序
Oct 11 Javascript
js判断是否为ie的方法小结
Jan 13 Javascript
javascript中不提供sleep功能如何实现这个功能
May 27 Javascript
基于jquery的手风琴图片展示效果实现方法
Dec 16 Javascript
简介JavaScript中Boolean.toSource()方法的使用
Jun 05 Javascript
JavaScript中数组的各种操作的总结(必看篇)
Feb 13 Javascript
详解使用React进行组件库开发
Feb 06 Javascript
JavaScript事件对象event用法分析
Jul 27 Javascript
iview同时验证多个表单问题总结
Sep 29 Javascript
vue.js层叠轮播效果的实例代码
Nov 08 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
Apr 23 Javascript
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
Apr 08 #Javascript
微信小程序BindTap快速连续点击目标页面跳转多次问题处理
Apr 08 #Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
Apr 08 #Javascript
微信小程序视图控件与bindtap之间的问题的解决
Apr 08 #Javascript
微信小程序实现bindtap等事件传参
Apr 08 #Javascript
详解vue中axios请求的封装
Apr 08 #Javascript
使用taro开发微信小程序遇到的坑总结
Apr 08 #Javascript
You might like
javascript 小型动画组件与实现代码
2010/06/02 PHP
PHP容易忘记的知识点分享
2013/04/30 PHP
迅速确定php多维数组的深度的方法
2014/01/07 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
JavaScript实际应用:innerHTMl和确认提示的使用
2006/06/22 Javascript
一个js拖拽的效果类和dom-drag.js浅析
2010/07/17 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
2011/08/28 Javascript
关于JS判断图片是否加载完成且获取图片宽度的方法
2013/04/09 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
2014/01/24 Javascript
纯JS实现本地图片预览的方法
2015/07/31 Javascript
JS中使用DOM来控制HTML元素
2016/07/31 Javascript
详解Js中的模块化是如何实现的
2017/10/18 Javascript
vue-cli常用设置总结
2018/02/24 Javascript
vue中父子组件注意事项,传值及slot应用技巧
2018/05/09 Javascript
vue使用i18n实现国际化的方法详解
2019/09/05 Javascript
python执行get提交的方法
2015/04/29 Python
python实现解数独程序代码
2017/04/12 Python
python使用Tesseract库识别验证
2018/03/21 Python
Python检查和同步本地时间(北京时间)的实现方法
2018/12/03 Python
30秒学会30个超实用Python代码片段【收藏版】
2019/10/15 Python
python统计文章中单词出现次数实例
2020/02/27 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
2020/04/30 Python
使用Python构造hive insert语句说明
2020/06/06 Python
PyCharm 2020.2 安装详细教程
2020/09/25 Python
html5的input的required使用中遇到的问题及解决方法
2018/04/24 HTML / CSS
用Python写一个for循环的例子
2016/07/19 面试题
个人党性剖析材料
2014/02/03 职场文书
运动会稿件50字
2014/02/17 职场文书
贸易跟单员英文求职信
2014/04/19 职场文书
手术室护士个人总结
2015/02/13 职场文书
小学大队干部竞选稿
2015/11/20 职场文书
升职自荐书
2019/05/09 职场文书
想创业成功,需要掌握这些要点
2019/12/06 职场文书
Go归并排序算法的实现方法
2022/04/06 Golang