为了账号安全,请及时绑定邮箱和手机立即绑定

阻止逻辑事件短时间频繁调用

阻止逻辑事件短时间频繁调用

手掌心 2019-03-13 13:15:10
栗子:阻止按钮在1s内多次被调用; 先上我baidu的结果btn.onclick = function add(){    btn.innerHTML = Number(btn.innerHTML) + 1;        btn.onclick = null;    clearTimeout(timer);    var timer = setTimeout(function(){        btn.onclick = add;    },1000);    }btn.onclick = (function(){    var last = Date.now();    return function(){        var now = Date.now();        if((now - last)>1000){            btn.innerHTML= Number(btn.innerHTML) + 1;                    }        last = now;    }})();以上两种方法都可以实现,目前我困惑的问题在于:1-除了使用定时器或者闭包,有没有更棒的方式;2-如果没有,那么上述两种哪种方式更适合组件化公用;当前项目有许多地方需要用到,那么我想尝试自己封装一个简单的公共方法,达到的效果可以支持click事件阻止1s内被多次调用,又或者可以自定义的扩展(后话);项目基于angular4.x(没有找到类似推迟执行的方法..),当然原生js完全OK
查看完整描述

2 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

Observable.fromEvent(btn, "click").debounceTime(1000).map().subscribe();


查看完整回答
反对 回复 2019-04-04
?
不负相思意

TA贡献1777条经验 获得超10个赞

用RxJS的debounceTime啊,你可以用directive包装一下使用


查看完整回答
反对 回复 2019-04-04
  • 2 回答
  • 0 关注
  • 380 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信