網路無所不在,你可以透過選單、切換鈕 對話方塊,用於帳戶設定、揭露小工具等等 產品資訊卡預覽儘管這些元件相當常見,仍須建構這些元件 仍令人感到意外。為瞭解決這個問題, 用於建構彈出式視窗的宣告式 HTML API 會導入瀏覽器, 也就是 Popover API
彈出式視窗屬於基準新推出的一部分。
彈出式視窗常造成與對話方塊混淆,不過
使用者的行為差異使用 dialog.showModal
開啟的 dialog
元素
(強制回應對話方塊) 是一種影片體驗,需要使用者明確進行互動才能
關閉互動視窗popover
支援光源關閉。強制回應 dialog
則不會。
強制回應對話方塊會正確顯示頁面的其餘部分。popover
不會。
進一步瞭解兩者差異。
本文是探討電子商務公司運作方式的系列文章之一。 運用新的 CSS 和 UI 功能提升網站品質本文將介紹 Tokopedia 如何導入 Popover API,從中獲益。
Tokopedia
在 React 中使用彈出屬性時,最多可減少 70% 的程式碼行。互動視窗 使用者可以透過 HTML 原生控制,不必在 JavaScript,並使用
React.createPortal
將強制回應 DOM 移至結尾document.body
。我們也可以使用@starting-style
建立動畫 開啟和關閉彈出式視窗。—Andy Wihalim,資深軟體 Tokopedia 工程師。
Tokopedia 的產品詳細資料頁面 (PDP) 分別為每個產品的圖片 產品。使用者點擊產品縮圖時,系統會開啟互動視窗, 放大的圖片。這是電子商務網站常用的模式。
程式碼
Tokopedia 使用 React 進行前端開發。導入
這個互動視窗的彈出式視窗 API 使用 DOM 互動視窗和按鈕按鈕
將 React 狀態變更為開啟互動視窗。在使用彈出式 API 的情況下,他們會指定
元素中的 popovertarget
屬性,該元素會開啟彈出式視窗,並顯示值
和彈出元素的 ID 相同
這種基本實作方式時,彈出式視窗可以正常運作,但會在顯示後消失
完全不必使用任何動畫如何建立流暢的進入及退出動畫
彈出式視窗,使用 :popover-open
和 @starting-style
,並允許
獨立屬性
在以下程式碼範例中,彈出的視窗使用
transform: 'scale()'
屬性。
這個程式碼範例指出 瞭解如何實作彈出 API 的進入與離開動畫。
<Thumbnail popovertarget="medialightbox" />
<MediaLightbox popover id="medialightbox" />
export const cssModalWrapper = css({
background: NN0,
border: 'none',
borderRadius: '.625rem',
width: 1024,
padding: 24,
'&::backdrop': {
opacity: 0,
transitionProperty: 'opacity, display',
transition: '.25s ease-out',
transitionBehavior: 'allow-discrete',
},
transitionProperty: 'transform, opacity, display',
transition: '.25s ease-out',
transitionBehavior: 'allow-discrete',
'@starting-style': {
transform: 'scale(1)',
opacity: 1,
},
transform: 'scale(0.8)',
opacity: 0,
'&:popover-open': {
'@starting-style': {
transform: 'scale(0.8)',
opacity: 0,
},
transform: 'scale(1)',
opacity: 1,
},
});
為了配合不支援彈出式視窗 API 的瀏覽器,Tokopedia 實作 奇數鳥的 popover-polyfill 使用 gzip 壓縮時,只有 3.2 KB他們對 polyfill 感到滿意 測試順利進行,不會導致效能降低。整體來說 透過彈出式視窗 API,成功減少 React 中的高達 70% 的程式碼行。
使用 Popover API 的注意事項
Tokopedia 使用 React,而該團隊藉由卸載 針對不使用該元件的網頁,然後將程式碼分割成 彈出式內容。這樣就能縮減初始要求的大小。
考慮結合彈出式視窗與 CSS 錨定位置 (即將支援 Chrome)。 來相對放置這些元素舉例來說,這項功能適用於選單和工具提示。
資源
- 隆重推出彈出式視窗 API
- 彈出式視窗與對話方塊的差異
- 您要回報錯誤或提出新功能建議嗎?歡迎提供寶貴意見。
探索本系列的其他文章,瞭解電子商務的運作方式
公司在使用全新 CSS 和 UI 功能 (例如捲動式介面) 時獲得良好成效
動畫、彈出式視窗、容器查詢和 has()
選取器。