收藏
回答

小程序获取用户信息按钮,如果连点多次会多次弹出授权弹窗,如何解决?

小程序获取用户信息按钮,如果连点多次会多次弹出授权弹窗,我试过wx.showLoading,但是只要我点的快,还是偶发出现弹两次窗口

我还试过自己选一一个遮罩,一个意思,只要我点的快,还是偶发出现弹两次窗口

如何解决,有大神指点不

回答关注问题邀请回答
收藏

3 个回答

  • TTc
    TTc
    2021-06-03

    /utils/throttle.js

    function throttle(fn, gapTime) {
      let lastTimes = null
      return function (e) {
        let _nowTime = new Date()
        if (!lastTimes || _nowTime - lastTimes > gapTime ) {
          fn(e);
          lastTimes = _nowTime
        }
      }
    }
    
    module.exports ={
      throttle
    }
    
    


    /pages/index/index

    const throttle = require('../../utils/throttle')
    onLoad(options) {
      this.submit = throttle.throttle(this._submit.bind(this), 5000)
    }
    
    _submit(e) {...}
      
    


    在wxml里调用submit函数而不是_submit函数。

    <view bindtap="submit">5秒内只能点击一次</view>
    


    _submit函数5秒内只能被触发一次。不会出现连点情况了就。

    _submit就是你现在的调起授权的函数。

    2021-06-03
    有用 2
    回复 4
    • 卡卡罗超 (ಥ_ಥ)
      卡卡罗超 (ಥ_ಥ)
      2021-06-03
      不行,getPhoneNumber方法是组件封装的方法,不是我绑上去的。只要点击了就会触发,即使我什么方法都不写,他也会唤起原生的授权弹窗
      2021-06-03
      回复
    • TTc
      TTc
      2021-06-03回复卡卡罗超 (ಥ_ಥ)
      哦 抱歉我给忘了这茬了。那在原生button上绑定一个tap事件,这个事件只要用户点击这个button就会触发,并不会影响获取手机的弹窗。然后这个tap事件里你setData一个值为true,这个值就是button的disabled的值,并设置一个setTimeout把值在5秒后设置为false。这样你点下去的瞬间button就disabled了,5秒后用户再按才有效。
      2021-06-03
      回复
    • TTc
      TTc
      2021-06-03
      或者如果你担心disabled会让button的样式不好看,你也可以写一个透明的遮罩absolute定位在button上,也是通过点击改变值来显示/隐藏这个透明遮罩。达到禁止用户一定时间范围内的二次点击。
      2021-06-03
      回复
    • 卡卡罗超 (ಥ_ಥ)
      卡卡罗超 (ಥ_ಥ)
      2021-06-03
      这个也试过了,先谢谢您的优质解答,但是ios老版的手机反应贼慢。。有偶发连点。。。很恶心
      2021-06-03
      回复
  • 清風
    清風
    2021-06-21

    请问楼主解决了吗

    2021-06-21
    有用
    回复
  • 七、尘1
    七、尘1
    2021-06-03

    如果使用 Button 组件的话可以讲个 loading 的状态。

    或者 js 逻辑里面直接加个状态判断下。

    2021-06-03
    有用
    回复 1
    • 卡卡罗超 (ಥ_ಥ)
      卡卡罗超 (ಥ_ಥ)
      2021-06-03
      差一点的ios,就不行,js渲染界面的时候就卡住了一秒
      2021-06-03
      回复
登录 后发表内容