AMP

操作和事件

本文档涵盖了 AMP 网站、故事和广告的操作和事件。有关 AMP 电子邮件格式,请阅读 AMP 电子邮件中的操作和事件

on 属性用于在元素上安装事件处理程序。支持的事件取决于元素。

该语法的取值形式是一种简单的领域特定语言,其形式如下

eventName:targetId[.methodName[(arg1=value, arg2=value)]]

请参阅下表,了解语法每个部分的描述。

语法 是否必需? 描述
eventName 这是元素公开的事件的名称。
targetId 这是元素的 DOM ID,或您希望响应事件执行操作的预定义 特殊目标。在以下示例中,targetIdamp-lightbox 目标 photo-slides 的 DOM ID。
<amp-lightbox id="photo-slides"></amp-lightbox>
<button on="tap:photo-slides">Show Images</button>
methodName 这用于具有默认操作的元素。

这是目标元素(由 targetId 引用)公开的方法,您希望在触发事件时执行该方法。

AMP 具有元素可以实现的默认操作的概念。因此,当省略 methodName 时,AMP 将执行该默认方法。

arg=value 某些操作(如果已记录)可能会接受参数。参数在 key=value 表示法的括号之间定义。接受的值为
  • 简单未加引号的字符串:simple-value
  • 加引号的字符串:"string value"'string value'
  • 布尔值:truefalse
  • 数字:111.1
  • 对事件数据的点语法引用:event.someDataVariableName

处理多个事件

您可以通过用分号 ; 分隔事件来侦听元素上的多个事件。

示例:on="submit-success:lightbox1;submit-error:lightbox2"

一个事件的多个操作

您可以通过用逗号“,”分隔操作,为同一事件按顺序执行多个操作。

示例:on="tap:target1.actionA,target2.actionB"

全局定义的事件和操作

AMP 全局定义了一个 tap 事件,您可以在任何 HTML 元素(包括 AMP 元素)上侦听该事件。

AMP 还全局定义了 hideshowtoggleVisibility 操作,您可以在任何 HTML 元素上触发这些操作。

只有先前通过 hidetoggleVisibility 操作隐藏,或者使用 hidden 属性隐藏的元素才能显示。show 操作不支持通过 CSS display:none 或 AMP 的 layout=nodisplay 隐藏的元素。

例如,在 AMP 中,可以执行以下操作

<div id="warning-message">Warning...</div>

<button on="tap:warning-message.hide">Cool, thanks!</button>

元素特定的事件

* - 所有元素

事件 描述
tap 在单击/点击元素时触发。
copy-success 当内容/文本成功复制到剪贴板时触发。
copy-error 在复制内容时出错时触发。如果在复制内容时出错,则 event.data.type 将设置为 error 值。如果浏览器不支持复制方法,则 event.data.type 将设置为 browser 值。

输入元素

事件 描述 元素 数据
change 当元素的值发生更改并提交时触发。

数据属性与 HTMLInputElementHTMLSelectElement 中的属性一致。

input
event.min
event.max
event.value
event.valueAsNumber
input[type="radio"],
input[type="checkbox"]
event.checked
select
event.min
event.max
event.value
input-debounced 当元素的值发生更改时触发。这类似于标准 change 事件,但仅在输入的值停止更改后经过 300 毫秒时触发。 触发 input 事件的元素。 change 事件数据相同。
input-throttled 当元素的值发生更改时触发。这类似于标准 change 事件,但在输入的值更改时,最多每 100 毫秒触发一次。 触发 input 事件的元素。 change 事件数据相同。

amp-accordion > section

事件 描述 数据
expand 在手风琴部分展开时触发。 无。
collapse 在手风琴部分折叠时触发。 无。

amp-carousel[type="slides"]

事件 描述 数据
slideChange 在轮播图的当前幻灯片更改时触发。
// Slide number.
event.index

amp-lightbox

事件 描述 数据
lightboxOpen 当灯箱完全可见时触发。
lightboxClose 当灯箱完全关闭时触发。

amp-list

事件 描述 数据
fetch-error(低信任) 在获取数据失败时触发。

amp-selector

事件 描述 数据
select 当选择或取消选择选项时触发。
// Target element's "option" attribute value.
event.targetOption

// Array of "option" attribute values of all selected elements.
event.selectedOptions

amp-sidebar

事件 描述 数据
sidebarOpen 在过渡结束后侧边栏完全打开时触发。
sidebarClose 在过渡结束后侧边栏完全关闭时触发。

amp-state

事件 描述 数据
fetch-error(低信任) 在获取数据失败时触发。

amp-video 和其他视频元素

以下事件由 amp-videoamp-video-iframe第三方视频播放器(如 amp-youtube)分派。

事件 描述 数据
firstPlay(低信任) 用户首次播放视频时触发。在自动播放视频上,当用户与视频交互时会立即触发。此事件为低信任事件,这意味着它无法触发大多数操作;只能运行低信任操作,如 amp-animation 操作。
timeUpdate(低信任) 在视频的播放位置发生更改时触发。事件的频率由 AMP 控制,目前设置为 1 秒间隔。此事件为低信任事件,这意味着它无法触发大多数操作;只能运行低信任操作,如 amp-animation 操作。 {time, percent}time 指示当前时间(以秒为单位),percent 是介于 0 和 1 之间的数字,指示当前位置占总时间的百分比。

form

事件 描述 数据
submit 在提交表单时触发。
submit-success 当表单提交响应成功时触发。
// Response JSON.
event.response
submit-error 当表单提交响应出错时触发。
// Response JSON.
event.response
valid 当表单有效时触发。
invalid 当表单无效时触发。

元素特定的操作

* (所有元素)

操作 描述
hide 隐藏目标元素。
show 显示目标元素。如果 autofocus 元素因此变得可见,则它会获得焦点。
toggleVisibility 切换目标元素的可见性。如果 autofocus 元素因此变得可见,则它会获得焦点。
toggleClass(class=STRING, force=BOOLEAN) 切换目标元素的类。force 是可选的,如果已定义,则确保如果设置为 true,则仅添加类而不删除类;如果设置为 false,则仅删除类而不添加类。
toggleChecked(force=BOOLEAN) 切换目标元素的选中状态。force 是可选的,如果已定义,则确保最终状态与 force 的值相同。
scrollTo(duration=INTEGER, position=STRING) 以平滑的动画将元素滚动到视图中。
duration 是可选的。指定动画的长度(以毫秒为单位)。如果未指定,则使用小于或等于 500 毫秒的相对于滚动差异的量。
position 是可选的。可以是 topcenterbottom 中的一个(默认为 top)。指定滚动后元素相对于视口的位置。
作为无障碍的最佳实践,请将其与 focus() 调用配对,以便将焦点放在要滚动到的元素上。
focus 使目标元素获得焦点。要失去焦点,请将焦点放在另一个元素上(通常是父元素)。我们强烈建议不要为了无障碍原因而通过聚焦 body/documentElement 来失去焦点。

amp-audio

操作 描述
play 播放音频。如果 <amp-audio> 元素是 <amp-story> 的后代,则此操作无效。
pause 暂停音频。如果 <amp-audio> 元素是 <amp-story> 的后代,则此操作无效。

amp-bodymovin-animation

操作 描述
play 播放动画。
pause 暂停动画。
stop 停止动画。
seekTo(time=INTEGER) 将动画的 currentTime 设置为指定的值并暂停动画。
seekTo(percent=[0,1]) 使用给定的百分比值来确定动画的 currentTime,并将其设置为指定的值,然后暂停动画。

amp-accordion

操作 描述
toggle(section=STRING) 切换 amp-accordion 部分的 expandedcollapsed 状态。如果调用时没有参数,则会切换手风琴的所有部分。通过提供部分 id 来触发特定部分:on="tap:myAccordion.toggle(section='section-id')"
expand(section=STRING) 展开手风琴的各个部分。如果某个部分已经展开,则保持展开状态。如果调用时没有参数,则会展开手风琴的所有部分。通过提供部分 id 来触发特定部分:on="tap:myAccordion.expand(section='section-id')"
collapse(section=STRING) 折叠手风琴的各个部分。如果某个部分已经折叠,则保持折叠状态。如果调用时没有参数,则会折叠手风琴的所有部分。通过提供部分 id 来触发特定部分:on="tap:myAccordion.collapse(section='section-id')"

amp-carousel[type="slides"]

操作 描述
goToSlide(index=INTEGER) 将轮播图前进到指定的幻灯片索引。
toggleAutoplay(toggleOn=true|false) 切换轮播图的自动播放状态。toggleOn 是可选的。

amp-image-lightbox

操作 描述
open (默认) 打开图像灯箱,源图像是触发该操作的图像。

amp-lightbox

操作 描述
open (默认) 打开灯箱。
close 关闭灯箱。
操作 描述
open 打开灯箱画廊。如果指定图像 id,可以通过点击另一个元素来触发:`on="tap:amp-lightbox-gallery.open(id='image-id')"`。

amp-list

操作 描述
changeToLayoutContainer amp-list 的布局更新为 layout="CONTAINER",以允许动态调整大小
refresh src 刷新数据并重新渲染列表。

amp-live-list

操作 描述
update (默认) 更新 DOM 项以显示更新后的内容。

amp-selector

操作 描述
clear 清除定义的 amp-selector 的所有选择。
selectUp(delta=INTEGER) 将选择向上移动 delta 的值。默认的 delta 设置为 -1。如果没有选择任何选项,则选定状态将变为最后一个选项的值。
selectDown(delta=INTEGER) 将选择向下移动 delta 的值。默认的 delta 设置为 1。如果没有选择任何选项,则选定状态将变为第一个选项的值。
toggle(index=INTEGER, value=BOOLEAN) 切换 selected 的应用。如果缺少 select 属性,则此操作会添加它。如果存在 select 属性,则此操作会将其删除。您可以通过在 value 参数中包含一个布尔值来强制添加或删除。值为 true 将强制添加 selected 属性,如果已存在,则不会删除它。值为 false 将删除该属性,但如果不存在,则不会添加它。

amp-sidebar

操作 描述
open (默认) 打开侧边栏。
close 关闭侧边栏。
toggle 切换侧边栏的状态。

amp-state

操作 描述
refresh 在忽略浏览器缓存的情况下,重新获取 src 属性处的数据。

amp-user-notification

操作 描述
dismiss (默认) 隐藏引用的用户通知元素。

amp-video 和其他视频元素

以下操作在 amp-videoamp-video-iframe第三方视频播放器(例如 amp-youtube)中受支持。

操作 描述
play 播放视频。
pause 暂停视频。
mute 将视频静音。
unmute 取消视频静音。
fullscreenenter 将视频切换为全屏模式。

form

操作 描述
clear 清除表单输入中的任何值。
submit 提交表单。

特殊目标

以下是 AMP 系统提供的具有特殊要求的的目标

目标:AMP

AMP 目标由 AMP 运行时提供,并实现应用于整个文档的顶级操作。

操作 描述
navigateTo(url=STRING, target=STRING, opener=BOOLEAN)

将当前窗口导航到给定的 URL,如果给定,则导航到可选的指定目标(当前仅支持 _top_blank)。当使用 _blank 作为目标时,可以指定可选的 opener 参数,以允许新打开的页面访问 window.opener

注意: 建议尽可能使用正常的 <a> 链接,因为网络爬虫无法识别 AMP.navigateTo

closeOrNavigateTo(url=STRING, target=STRING, opener=BOOLEAN)

如果允许,则尝试关闭窗口,否则,它的导航方式类似于 navigateTo 操作。对于以下用例很有用:“后退”按钮可能需要在新窗口中从上一页打开时关闭窗口,或者在未打开时进行导航。

注意: 建议尽可能使用正常的 <a> 链接,因为网络爬虫无法识别 AMP.closeOrNavigateTo

goBack(navigate=BOOLEAN) 在历史记录中后退。navigate 是可选的,如果设置为 true,则允许类似于 [history.back](https://mdn.org.cn/en-US/docs/Web/API/History/back) 的跨文档导航。
print 打开打印对话框以打印当前页面。
scrollTo(id=STRING, duration=INTEGER, position=STRING) 滚动到当前页面上提供的元素 ID。
optoutOfCid 退出所有范围的客户端 ID 生成。
setState({foo: 'bar'})1

需要 amp-bind

将对象文字合并到可绑定的状态中。

pushState({foo: 'bar'})1

需要 amp-bind

将对象文字合并到可绑定的状态中,并将新条目推送到浏览器历史堆栈上。弹出条目将恢复变量的先前值(在本例中为 foo)。

copy(text='content')

将任何内容复制到剪贴板。text 是可选的,如果设置了,它将把这些内容/值复制到剪贴板。

toggleTheme() 调用时,切换 body 元素上的 amp-dark-mode 类,并将用户的首选项设置为 localStorage。默认情况下,根据 prefers-color-scheme 值将 amp-dark-mode 类添加到 body。使用 body 标记上的 data-prefers-dark-mode-class 属性来覆盖用于黑暗模式的类。

1当与一个事件的多个操作一起使用时,后续操作将等待 setState()pushState() 完成后再调用。每个事件只允许一个 setState()pushState()

目标:amp-access

amp-access 目标由 amp-access 组件提供。

amp-access 目标之所以特殊,原因如下

  1. 您不能为该目标提供任意 ID。目标始终是 amp-access
  2. amp-access 的操作取决于 AMP 访问配置 的结构。

有关使用 amp-access 目标的详细信息