extjs解决连点问题的方法

2020-09-23  本文已影响0人  jumplee

其实Extjs的Function对象里有大量的函数,比如createBuffered,createThrottled等高级函数,帮助你解决一下函数问题。但是createBuffered比较奇怪,第一次执行有一定的时间差,这对于事件注册来说,不能接受。而看过createBuffered代码后,发现无法解决,因为里面使用的是setTimeout。
createBuffered的执行顺序
----buffer----fn----buffer----fn----
debounce的执行顺序
fn----buffer----fn----buffer----

//  类似debounce,但是有默认延迟,修改一下
        Ext.Function.debounce=function(fn, buffer, scope, args) {
            var beforeTime=0;
            return function() {
                var callArgs = args || Array.prototype.slice.call(arguments, 0),
                    me = scope || this;
                // 不是第一次执行
                if (beforeTime) {
                    var now=(new Date()).getTime();
                    if(now-beforeTime>buffer){
                        fn.apply(me, callArgs);
                        console.log('larger than now');
                        beforeTime=now;
                    }

                }else{
                    fn.apply(me, callArgs);
                    console.log('first');
                    beforeTime=(new Date()).getTime();
                }
            };
        };

使用:在controller中使用

onClick: Ext.Function.debounce(function(){
  alert('click');
},500)

上一篇 下一篇

猜你喜欢

热点阅读