javascript - 如何去抖一个事件? (语法错误?)

标签 javascript jquery syntax prototype debouncing

我有点困惑。我想在 windows-resize 上对函数 resizeAd 进行去抖动。 我玩过这段代码但没有任何结果。去抖未完成。 在这种情况下我必须如何调用去抖功能?

通过这样调用去抖动函数可以正常工作:var resizeIframeAd = debounce(function() {... }

    (function(window, document, undefined) {
        'use strict';
        /*
         * Global api.
         */
        var adTech = window.adTech = {
            get: function() {
                return _instance;
            },
            //Main entry point.
            init: function(options) {
                return _instance || new ADTECH(options);
            }
        };
        /**
         * Constructor.
         */
        var ADTECH = function(options) {
            var defaultOptions = {
              adID : '5202402',
              hiddenClassName : 'hidden'
            };
            this.options = this.extend(options, defaultOptions);

            this.makeAd();
            _instance = this;
            return _instance;
        }


     ADTECH.prototype = {
        extend: function(source, target) {
          if (source == null) { return target; }
          for (var k in source) {
            if(source[k] != null && target[k] !== source[k]) {
              target[k] = source[k];
            }
          }
          return target;
        },
        log: function(msg){
          if(window.console){
            console.log(msg);
          }
        },
         // Debounce function
        debounce:  function(func, wait, immediate) {
          var timeout;
          return function() {
              var context = this, args = arguments;
              var later = function() {
                  timeout = null;
                  if (!immediate) func.apply(context, args);
              };
              var callNow = immediate && !timeout;
              clearTimeout(timeout);
              timeout = setTimeout(later, wait);
              if (callNow) func.apply(context, args);
          };
        },
        // event Handler
        addEvent: function (elem, type, eventHandle) {     console.log("adEvent is undefined: ",eventHandle);
            if (elem == null || typeof(elem) == 'undefined') return;
            if (elem.addEventListener) {
                elem.addEventListener(type, eventHandle, false);
            } else if (elem.attachEvent) {
            elem.attachEvent("on" + type, eventHandle);
            } else {
                elem["on" + type] = eventHandle;
            }
        },

//to debounce this fucntion I call them like this var resizeIframeAd = debounce(function() {    HOW TO DO THAT HERE?


        resizeAd: function(invokeLater) {
            // this is explicitly set based on the calling object.
            var obj = this;
            var helper = function () {
               obj.log("resizeAd2 done.");
               //var ad = document.getElementById(obj.options.adID);    //obj.log(ad);
               obj.debounce(function() {
                   console.log("please debounce this function");
               }, 250)
            };
            // if invokeLater is a falsey value do the resizing right away
            // if it is truthy return helper so that it can be assigned as
            // an event handler
            return invokeLater ? helper : helper();
        },
        // insert ad
        makeAd: function () {
                    this.addEvent(window, "resize", this.resizeAd(true));
        }

     }
        // Singleton
        var _instance;
    }(window, document));


    var API = adTech.init();

最佳答案

我想你想要去抖动你的helper 函数:

var helper = this.debounce(function () {
   obj.log("resizeAd2 done.");
   //var ad = document.getElementById(obj.options.adID);    //obj.log(ad);
   console.log("please debounce this function");
}, 250);

关于javascript - 如何去抖一个事件? (语法错误?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29697116/

相关文章:

Jquery Mobile- 页脚元素,100% 宽度

jquery - 将 ctx.strokeStyle 与 ctx.fillStyle 一起使用

MYSQL JOIN语法如何连接三张表

c - 在 C 中使用指向函数的指针调用函数

javascript - Svelte.js 组件属性在带有 customElement : true 的脚本标记内未定义

javascript - jquery - 在 Firefox 中获取位置问题

jquery - 无法设置 Fancybox 模态样式

java - 如何使 Java 语法正确?

javascript - 单击按钮时将表单替换为另一种表单

javascript - 我们可以使用具有访问级别权限的 algolia 搜索吗