事件类型

事件类型库模块的一个目标是:检测活动何时发生;并在活动发生时,调用函数以触发关联的规则。具体检测的内容由您来决定。您是否正在检测用户何时做出某种手势?用户何时快速滚动鼠标?用户何时进行交互?

注意

本文档假定您熟悉库模块及其在 Platform Launch 扩展中的集成方式。在返回到本指南之前,请参阅关于库模块格式的概述,以了解实施概况。

除了对其他模块类型通用的 settings 参数之外,事件类型的 module.exports 还接受第二个参数 trigger

module.exports = function(settings, trigger) { … };
参数 描述
settings 一个对象,其中包含用户在事件类型视图中配置的任何设置。您对此对象中的内容拥有最终控制权。
trigger 每当应该触发规则时,模块应调用的函数。settings 对象、trigger 函数和规则之间存在一对一的关系。换句话说,您收到的适用于某个规则的 trigger 函数,不能用来触发其他规则。
注意

对于每个已配置为使用您的事件类型的规则,都将调用一次导出函数。

假设我们正在检测的活动将在 5 秒钟后发生。经过 5 秒钟后,活动已经发生并应当触发规则。我们的模块可能如下所示:

module.exports = function(settings, trigger) {
  setTimeout(trigger, 5000);
};

现在,如果我们希望 Adobe Experience Platform Launch 用户可以配置持续时间,该怎么操作?在我们的视图中,我们将允许用户输入持续时间,然后将持续时间保存到设置对象中。该对象可能如下所示:

{
  "duration": 25000
}

为了按照用户定义的持续时间来执行操作,我们的模块需要更改为:

module.exports = function(settings, trigger) {
  setTimeout(trigger, settings.duration);
};

传递上下文事件数据

触发规则时,提供有关所发生事件的更多详细信息通常会非常有用。创建规则的用户会发现,该信息对于实现特定行为非常有用。例如,假设营销人员希望创建一个规则,即每次用户轻扫屏幕时,都发送分析信标。如果我们的扩展提供 swipe 事件类型,则营销人员可以使用我们的事件类型恰当地触发规则。现在,如果营销人员希望在信标中包括发生轻扫的特定角度,该怎么办?如果没有更多信息,这很难做到。

要提供有关所发生事件的更多信息,请在调用 trigger 函数时传递一个对象。例如:

trigger({
  swipeAngle: 90 // the value would be the detected angle
});

接下来,营销人员可通过在文本字段中指定值 %event.swipeAngle%,在分析信标中使用该值。另外,他们也可以从其他上下文(例如,自定义代码操作)中访问 event.swipeAngle。请随时提供任何可能对营销人员有用的事件信息。该信息是完全可选的。

nativeEvent

如果您的事件类型基于本机事件(例如,如果您的扩展提供了 click 事件类型),我们建议您按照以下方式设置 nativeEvent 属性:

trigger({
  nativeEvent: nativeEvent // the value would be the underlying native event
});

这对于尝试从本机事件中访问任何信息(例如,光标的坐标位置)的营销人员会非常有用。

element

如果元素与发生的事件之间存在紧密联系,我们建议将 element 属性设置为元素的 DOM 节点。例如,假设您的扩展提供了 click 事件类型,并且您允许营销人员对其进行配置,以便仅在选择 ID 为 herobanner 的元素时才触发规则。在这种情况下,如果用户选择主页横幅,我们建议调用 trigger,并将 element 设置为主页横幅的 DOM 节点。

trigger({
  element: element // the value would be the DOM node
});

遵守规则顺序

Platform Launch 为用户提供了规则排序功能。例如,用户可能创建了两个规则,这两个规则都使用方向更改事件类型,用户希望自定义触发规则的顺序。假设 Platform Launch 用户在规则 A 中为方向更改事件指定了顺序值 2,在规则 B 中为方向更改事件指定了顺序值 1。这表明如果移动设备上发生方向更改,则规则 B 应当先于规则 A 触发(首先触发顺序值较低的规则)。

如前所述,对于每个已配置为使用我们的事件类型的规则,将调用一次我们事件模块中的导出函数。每次调用导出函数时,都会传递一个与特定规则绑定的唯一 trigger 函数。在刚才所述的情况中,将调用一次导出函数,其中,trigger 函数与规则 B 绑定,然后再次调用导出函数,其中 trigger 函数与规则 A 绑定。规则 B 先于规则 A 触发的原因在于用户为它提供了更低的顺序值。当我们的库模块检测到方向更改时,我们务必要按照用户提供给库模块的相同顺序来调用 trigger 函数,这一点非常重要。

在下面的示例代码中,请注意当检测到方向更改时,将按照提供给导出函数的相同顺序来调用 trigger 函数:

var triggers = [];

window.addEventListener('orientationchange', function() {
  triggers.forEach(function(trigger) {
    trigger();
  });
});

module.exports = function(settings, trigger) {
  triggers.push(trigger);
};

这可以确保遵守用户指定的顺序。

如果实施不当,则会导致以不同的顺序调用 trigger 函数:

var triggers = [];

window.addEventListener('orientationchange', function() {
  for (var i = triggers.length - 1; i >= 0; i--) {
    triggers[i]();
  }
});

module.exports = function(settings, trigger) {
  triggers.push(trigger);
};

通常,自然的编程惯例可遵守正确的顺序,但是务必要了解其影响并相应地进行开发。

On this page

Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now