操作和事件
on
属性用于在元素上安装事件处理程序。支持的事件取决于元素。
该语法的取值是一种简单的特定领域语言,其形式为
eventName:targetId[.methodName[(arg1=value, arg2=value)]]
请参阅下表了解语法各部分的说明。
语法 | 是否必需? | 描述 |
---|---|---|
eventName | 是 | 这是元素公开的事件的名称。 |
targetId | 是 | 这是元素的 DOM ID,或者您希望在响应事件时在其上执行操作的预定义 特殊目标。在以下示例中,targetId 是 amp-lightbox 目标 photo-slides 的 DOM ID。<amp-lightbox id="photo-slides"></amp-lightbox> <button on="tap:photo-slides">Show Images</button> |
methodName | 否 | 这适用于具有默认操作的元素。 这是目标元素(由 AMP 具有元素可以实现的默认操作的概念。因此,当省略 |
arg=value | 否 | 某些操作(如果已记录)可以接受参数。参数在括号之间以 key=value 符号定义。可接受的值包括:
|
处理多个事件
您可以通过使用分号 ;
分隔事件来监听元素上的多个事件。
示例:on="submit-success:lightbox1;submit-error:lightbox2"
一个事件的多个操作
您可以通过使用逗号 ',' 分隔操作来为同一事件按顺序执行多个操作。
示例:on="tap:target1.actionA,target2.actionB"
全局定义的事件和操作
AMP 全局定义了 tap
事件,您可以在任何 HTML 元素(包括 AMP 元素)上监听此事件。
AMP 还全局定义了 hide
、show
和 toggleVisibility
操作,您可以在任何 HTML 元素上触发这些操作。
仅当元素先前通过 hide
或 toggleVisibility
操作或通过使用 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 | 当元素的值更改并提交时触发。 数据属性与 HTMLInputElement 和 HTMLSelectElement 中的属性相同。 | 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-video
、amp-video-iframe
和 第三方视频播放器(如 amp-youtube
)调度。
事件 | 描述 | 数据 |
---|---|---|
firstPlay (低信任) | 当用户第一次播放视频时触发。在自动播放视频上,当用户与视频交互时会立即触发此事件。此事件是低信任的,这意味着它不能触发大多数操作;只能运行低信任操作,例如 amp-animation 操作。 | |
timeUpdate (低信任) | 当视频的播放位置发生变化时触发。事件的频率由 AMP 控制,目前设置为 1 秒间隔。此事件是低信任的,这意味着它不能触发大多数操作;只能运行低信任操作,例如 amp-animation 操作。 | {time, percent} time 表示当前时间(以秒为单位),percent 是介于 0 和 1 之间的数字,表示当前位置占总时间的百分比。 |
表单
事件 | 描述 | 数据 |
---|---|---|
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 是可选的。为 top 、center 或 bottom 其中之一(默认为 top )。指定滚动后元素相对于视口的位置。作为辅助功能最佳实践,请将其与调用 focus() 配对,以将焦点放在要滚动到的元素上。 |
focus | 使目标元素获得焦点。要失去焦点,请将焦点置于另一个元素(通常是父元素)。我们强烈建议不要为了可访问性而通过将焦点置于 body /documentElement 上来失去焦点。 |
amp-audio
操作 | 描述 |
---|---|
播放 | 播放音频。如果 <amp-audio> 元素是 <amp-story> 的子元素,则此操作无效。 |
暂停 | 暂停音频。如果 <amp-audio> 元素是 <amp-story> 的子元素,则此操作无效。 |
amp-bodymovin-animation
操作 | 描述 |
---|---|
播放 | 播放动画。 |
暂停 | 暂停动画。 |
停止 | 停止动画。 |
seekTo(time=INTEGER) | 将动画的 currentTime 设置为指定值并暂停动画。 |
seekTo(percent=[0,1]) | 使用给定的百分比值来确定动画的 currentTime,并将其设置为指定值并暂停动画。 |
amp-accordion
操作 | 描述 |
---|---|
toggle(section=STRING) | 切换 amp-accordion 部分的 expanded 和 collapsed 状态。当不带参数调用时,它会切换手风琴的所有部分。通过提供节 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
操作 | 描述 |
---|---|
打开 (默认) | 打开图像灯箱,源图像是触发该操作的图像。 |
amp-lightbox
操作 | 描述 |
---|---|
打开 (默认) | 打开灯箱。 |
关闭 | 关闭灯箱。 |
amp-lightbox-gallery
操作 | 描述 |
---|---|
打开 | 打开灯箱画廊。如果指定了图像 ID,可以通过点击另一个元素来触发:`on="tap:amp-lightbox-gallery.open(id='image-id')"`。 |
amp-list
操作 | 描述 |
---|---|
changeToLayoutContainer | 将 amp-list 的布局更新为 layout="CONTAINER" ,以允许动态调整大小。 |
刷新 | 从 src 刷新数据并重新渲染列表。 |
amp-live-list
操作 | 描述 |
---|---|
更新 (默认) | 更新 DOM 项以显示更新的内容。 |
amp-selector
操作 | 描述 |
---|---|
清除 | 清除定义的 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
操作 | 描述 |
---|---|
打开 (默认) | 打开侧边栏。 |
关闭 | 关闭侧边栏。 |
切换 | 切换侧边栏的状态。 |
amp-state
操作 | 描述 |
---|---|
刷新 | 在忽略浏览器缓存的情况下,重新获取 src 属性处的数据。 |
amp-user-notification
操作 | 描述 |
---|---|
关闭 (默认) | 隐藏引用的用户通知元素。 |
amp-video 和其他视频元素
amp-video
、amp-video-iframe
和第三方视频播放器(如 amp-youtube
)支持以下操作。
操作 | 描述 |
---|---|
播放 | 播放视频。 |
暂停 | 暂停视频。 |
静音 | 将视频静音。 |
取消静音 | 取消视频静音。 |
进入全屏 | 将视频设为全屏。 |
表单
操作 | 描述 |
---|---|
清除 | 清除表单输入中的任何值。 |
submit | 提交表单。 |
特殊目标
以下是 AMP 系统提供的具有特殊要求的目标
目标:AMP
AMP
目标由 AMP 运行时提供,并实现应用于整个文档的顶层操作。
操作 | 描述 | ||
---|---|---|---|
navigateTo(url=STRING, target=STRING, opener=BOOLEAN) | 将当前窗口导航到给定的 URL,如果给定,则导航到可选指定的 目标(目前仅支持 注意:建议尽可能使用普通的 | ||
closeOrNavigateTo(url=STRING, target=STRING, opener=BOOLEAN) | 如果允许,则尝试关闭窗口,否则它会以类似于 注意:建议尽可能使用普通的 | ||
goBack(navigate=BOOLEAN) | 在历史记录中向后导航。 navigate 是可选的,如果设置为 true ,则允许类似于 [history.back](https://mdn.org.cn/en-US/docs/Web/API/History/back) 的跨文档导航。 | ||
打印 | 打开打印对话框以打印当前页面。 | ||
scrollTo(id=STRING, duration=INTEGER, position=STRING) | 滚动到当前页面上提供的元素 ID。 | ||
optoutOfCid | 选择退出所有作用域的客户端 ID 生成。 | ||
setState({foo: 'bar'}) 1 | 需要 amp-bind。 将对象字面量合并到可绑定状态中。 | ||
pushState({foo: 'bar'}) 1 | 需要 amp-bind。 将对象字面量合并到可绑定状态中,并将新条目推送到浏览器历史堆栈上。弹出条目将恢复变量的先前值(在此示例中为 | ||
copy(text='content') | 将任何内容复制到剪贴板。 | 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
目标因以下原因而特殊
- 您不能为该目标提供任意 ID。该目标始终为
amp-access
。 amp-access
的操作是动态的,具体取决于AMP 访问配置的结构。
请参阅有关使用 amp-access
目标的详细信息。