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


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 相关文章推荐
jquery乱码与contentType属性设置问题解决方案
Jan 07 Javascript
利用JS延迟加载百度分享代码,提高网页速度
Jul 01 Javascript
JS 获取鼠标左右键的键值方法
Oct 11 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
Nov 28 Javascript
javascript每日必学之循环
Feb 19 Javascript
vue使用keep-alive实现数据缓存不刷新
Oct 21 Javascript
JavaScript常见鼠标事件与用法分析
Jan 03 Javascript
浅谈JavaScript面向对象--继承
Mar 20 Javascript
ECharts地图绘制和钻取简易接口详解
Jul 12 Javascript
微信小程序JS加载esmap地图的实例详解
Sep 04 Javascript
JavaScript实现串行请求的示例代码
Sep 14 Javascript
详解JavaScript中的执行上下文及调用堆栈
Apr 29 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
PHP MySQL应用中使用XOR运算加密算法分享
2011/08/28 PHP
php中session过期时间设置及session回收机制介绍
2014/05/05 PHP
PHP获取数组中重复最多的元素的实现方法
2014/11/11 PHP
JavaScript语法着色引擎(demo及打包文件下载)
2007/06/13 Javascript
JS 无法通过W3C验证的处理方法
2010/03/09 Javascript
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
JS 事件绑定函数代码
2010/04/28 Javascript
JavaScript模拟实现继承的方法
2015/03/30 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
微信小程序 简单教程实例详解
2017/01/13 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
2017/07/11 Javascript
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
2018/08/12 Javascript
JS实现简单打字测试
2020/06/24 Javascript
[00:17]天涯墨客一技能展示
2018/08/25 DOTA
Python切片知识解析
2016/03/06 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
pandas 层次化索引的实现方法
2019/07/06 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
Python 实现自动导入缺失的库
2019/10/29 Python
Perfume’s Club英国官网:购买香水和护肤品
2019/11/02 全球购物
美国在线家具网站:GDFStudio
2021/03/13 全球购物
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2013/05/03 面试题
预备党员承诺书
2014/03/25 职场文书
孝敬父母的演讲稿
2014/05/14 职场文书
委托代理人授权委托书范本
2014/09/24 职场文书
2014年初中班主任工作总结
2014/11/08 职场文书
给医院的感谢信
2015/01/21 职场文书
小学教育见习总结
2015/06/23 职场文书
2015年团委副书记工作总结
2015/07/23 职场文书
详解Python小数据池和代码块缓存机制
2021/04/07 Python
MySQL 数据丢失排查案例
2021/05/08 MySQL
JVM入门之类加载与字节码技术(类加载与类的加载器)
2021/06/15 Java/Android
Python3接口性能测试实例代码
2021/06/20 Python
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python