【问题标题】:Send event when module was executed执行模块时发送事件
【发布时间】:2016-05-12 09:04:50
【问题描述】:

我真的被困在这上面了。我需要在执行 Load moduleHide module 代码时发送一个事件,然后才发送该事件。关于如何实现这一点的想法?

//加载模块

(
    function() {
        var s=document.createElement('script');
        s.type='text/javascript';
        s.async=true;
        s.src='https://example.com/bundles.js';
        var x = document.getElementsByTagName('script')[0];
        x.parentNode.insertBefore(s, x);
    }
)();

//隐藏模块

var inverval = setInterval(hideClass, 100);

function hideClass () {
    if ($(".class").hide().length > 0) clearInterval(inverval);
}

// 当两者都发生时 = 向 Google Analytics 发送事件

DigitalData.push({'event':Module, 'eventLabel':'Page'});

【问题讨论】:

  • @clijsters 你还有什么意见吗?
  • 我认为@Ikechi Michael 的意见正是您所需要的。

标签: javascript if-statement dom-events


【解决方案1】:

如果这是您唯一的选择,那么您可能做错了什么。无论如何,让我们看看......只有当这两个事件都发生时。

var HandleTwoEvents = function (key1, key2) {
   this.count = 0;
   this.pack = [];
   $self = this;
   this.startListening = function(fn) {
      fn = fn || function () {}
      window.addEventListener(key1, function (ev) {
         if ($self.pack.indexOf(key1) < 0) {
            $self.pack.push(key1);
            $self.count++;
            if ($self.count == 2) { 
                fn(); 
                $self.count = 0;
            }
         } 
         console.log(key1, ev);
      });
      window.addEventListener(key2, function (ev) {
         if ($self.pack.indexOf(key2) < 0) {
            $self.pack.push(key2);
            $self.count++;
            if ($self.count == 2) { 
                fn(); 
                $self.count = 0;
            }
         }
         console.log(key2, ev);
      });
    }
}

原谅我,我总是用这个函数来创建事件

function createEvent(name, obj) {
    var evt = document.createEvent("Event");
    evt.initEvent(name, true, true);
    evt.data = obj;
    dispatchEvent(evt);
}

现在,记录这两个事件...

var both = new HandleTwoEvents("EventKeyOne", "EventKeyTwo");
both.startListening(function () {console.log("This means that both Events have taken place")});

现在,让我们测试一下……

createEvent("EventKeyOne", {}); 
//key, data are the arguments ... function defined in startListening above does not execute, and upon inspection, both.count is seen to be 1
createEvent("EventKeyTwo", {});
//Now, function executes. 
//It also works if "EventKeyTwo" is raised before "EventKeyOne"

编码愉快!

PS:我相信有更好的方法来处理 $self 变量的使用,我猜想有一些函数绑定。我从来没学过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2018-01-10
    • 2015-12-09
    • 2017-02-05
    相关资源
    最近更新 更多