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


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 相关文章推荐
FormValid0.5版本发布,带ajax自定义验证例子
Aug 17 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
Mar 10 Javascript
关于jQuery的inArray 方法介绍
Oct 08 Javascript
JS+CSS实现仿msn风格选项卡效果代码
Oct 22 Javascript
超漂亮的jQuery图片轮播特效
Nov 24 Javascript
vue2.0开发实践总结之疑难篇
Dec 07 Javascript
Bootstrap基本组件学习笔记之面板(14)
Dec 08 Javascript
jQuery实现QQ空间汉字转拼音功能示例
Jul 10 jQuery
纯js实现页面返回顶部的动画(超简单)
Aug 10 Javascript
js中时间格式化的几种方法
Jul 22 Javascript
vue项目开发中setTimeout等定时器的管理问题
Sep 13 Javascript
vue-cli项目修改文件热重载失效的解决方法
Sep 19 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中导出数据到excel时数字变为科学计数的解决方法
2013/02/03 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
Javascript attachEvent传递参数的办法
2009/12/14 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
2015/05/13 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
JavaScript操作HTML元素和样式的方法详解
2015/10/21 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
JavaScript中重名的函数与对象示例详析
2017/09/28 Javascript
不使用JavaScript实现菜单的打开和关闭效果demo
2018/05/01 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
jQuery插件simplePagination的使用方法示例
2020/04/28 jQuery
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
浅谈pyhton学习中出现的各种问题(新手必看)
2017/05/17 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
python with (as)语句实例详解
2020/02/04 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
Python 可视化神器Plotly详解
2020/12/26 Python
实例讲解CSS3中的box-flex弹性盒属性布局
2016/06/09 HTML / CSS
英国最专业的健身器材供应商之一:Best Gym Equipment
2017/12/22 全球购物
MYSQL支持事务吗
2013/08/09 面试题
事业单位接收函
2014/01/10 职场文书
银行办理业务介绍信
2014/01/18 职场文书
《哪吒闹海》教学反思
2014/02/28 职场文书
军训教官感言
2014/03/02 职场文书
《孙权劝学》教学反思
2014/04/23 职场文书
减负增效提质方案
2014/05/23 职场文书
个人简历自荐信
2014/06/26 职场文书
机械机修工岗位职责
2014/08/03 职场文书
法制教育演讲稿
2014/09/10 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
楚门的世界观后感
2015/06/03 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python