覆盖jquay的默认方法,js函数节流

  1. /*
  2. 用法1
  3. <div id='btn1'>按钮1<div>
  4. <script src='jquary.js'></script>
  5. <script src='my.js'>这个文件引入需要紧跟在在jquary后面</script>
  6. <script>
  7.     $('#btn1').click(function(e){console.log(e);},  1000);    //每次点击生效后要等待1000毫秒下次点击才能生效
  8. </script>
  9. 方法2
  10. <div onclick='clickHandel(this, fn, [1, 2, 3])click_ms='1000'>按钮2<div>
  11. <script src='jquary.js'></script>
  12. <script src='my.js'>这个文件引入需要紧跟在在jquary后面</script>
  13. <script>
  14.     function fn(a, b, c) {
  15.         alert(a+b+c);
  16.     }
  17. </script>
  18. */
  19. 代理模式和策略模式:可以把原来的函数引用保存下来在自定义的函数里面调用,代理原来的,然后可以加一些处理策略,代码如下
  20. var oldClick = $.prototype.click;
  21. $.prototype.oldClick = oldClick;
  22. $.prototype.click = newClick;
  23. funtion newClick(callback, a, b, ...) {
  24.      $(o).oldClick(function(e){
  25.           handel(o, callback, e, a, b, ...);
  26.      });
  27. }
  28. $.prototype.click = myClick; //修改默认的click函数
  29. my.js
  30. var buttonRefs = {};  
  31. var index = 0;  
  32. function handel(o, callback, paramsArr) {  
  33.     var delayMs = o.getAttribute('click_ms');  
  34.     if(!isNaN(delayMs)) {  
  35.         delayMs = Number(delayMs);  
  36.         for (var p in buttonRefs) {  
  37.             if (o == buttonRefs[p]) {  
  38.                 return;  
  39.             }  
  40.         }  
  41.   
  42.         if(!paramsArr || paramsArr.constructor != Array) {  
  43.             paramsArr = [];  
  44.         }  
  45.   
  46.         callback.apply(o, paramsArr);  
  47.         buttonRefs[index++] = o;  
  48.         setTimeout(function (btn) {  
  49.             return function () {  
  50.                 for (var p in buttonRefs) {  
  51.                     if (btn === buttonRefs[p]) {  
  52.                         delete buttonRefs[p];  
  53.                         break;  
  54.                     }  
  55.                 }  
  56.             }  
  57.         }(o), delayMs);  
  58.     }else {  
  59.         callback.apply(o, paramsArr);  
  60.     }  
  61. }  
  62.  function myClick(callback, clickMs) {  
  63.     if(!callback || callback.constructor != Function) {  
  64.         return;  
  65.     }  
  66.     var o = this[0];  
  67.     if(!o) {  
  68.         return;  
  69.     }  
  70.     if(clickMs && !isNaN(clickMs)) {  
  71.         o.setAttribute('click_ms', clickMs);  
  72.     }  
  73.     o.addEventListener('click', function (e) {  
  74.         handel(o, callback, [e]);  
  75.     });  
  76. }  
  77.   
  78. function clickHandel(o, callback, paramsArr) {  
  79.     handel(o, callback, paramsArr);  
  80. }  
  81. $.prototype.click = myClick; //修改默认的click函数

猜你喜欢

转载自blog.csdn.net/u012681635/article/details/79583360