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 讓目標元素取得焦點。如要失去焦點,請 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 (預設) open
close 關閉側邊欄。
toggle 切換側邊欄的狀態。

amp-state

動作 說明
refresh 在忽略瀏覽器快取的情況下,重新擷取 src 屬性中的資料。

amp-user-notification

動作 說明
dismiss (預設) 隱藏參照的使用者通知元素。

amp-video 和其他影片元素

amp-videoamp-video-iframe第三方影片播放器 (例如 amp-youtube) 支援以下動作。

動作 說明
play play
pause 暫停影片。
mute 將影片設為靜音。
unmute 取消影片靜音。
fullscreenenter 讓影片進入全螢幕。

form

動作 說明
clear clear
submit 提交表單。

特殊目標

以下是由 AMP 系統提供的目標,具有特殊需求

目標:AMP

AMP 目標由 AMP 執行階段提供,並實作適用於整個文件的最上層動作。

動作 說明
navigateTo(url=STRING, target=STRING, opener=BOOLEAN)

將目前視窗導覽至指定的網址,若有指定,則導覽至選用的指定目標 (目前僅支援 _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://developer.mozilla.org/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 Access 設定的結構。

請參閱詳細資料,瞭解如何使用 amp-access 目標。