精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

原生 Popover 終于要來了!

開發 前端
Popover是一個全局屬性。給任意元素添加popover以后,它就變成了一個懸浮層。

提到 popover,相信大家都很熟悉,沒錯,就是組件庫里經常見到的懸浮層(或者叫“氣泡卡片”),比如 Ant Design。

圖片

現在,這個好用的特性終于要在Chrome 114上正式支持了~下面花幾分鐘快速了解一下吧。

一、popover 屬性

其實這個名稱以前叫做popup,后來才更改成了popover??。

popover是一個全局屬性。給任意元素添加popover以后,它就變成了一個懸浮層。

<div popover>我是懸浮層</div>

popover有兩個值,分別是:

  • auto:自動(默認值)。也就是瀏覽器默認行為,比如點擊懸浮層外面會關閉懸浮層,按鍵盤Esc鍵也會關閉懸浮層。
  • manual:手動。也就是沒有前面的默認行為,所有操作必須由開發者手動控制。
<div popover>我是懸浮層</div>
<div popover="auto">我是懸浮層</div>
<div popover="manual">我是懸浮層</div>

懸浮層默認是隱藏的,也不能通過屬性設置默認顯示。那么,如何打開一個懸浮層呢?

二、控制懸浮層的方式

控制懸浮層有兩種方式,分別是 聲明式 和 命令式。

首先來看聲明式,經常寫原生HTML的應該會很喜歡這種方式,無需 JS 介入就可以實現懸浮層的打開和關閉,如下:

<button popovertarget="pop1">打開 auto 懸浮層</button>
<div id="pop1" popover>我是 auto 懸浮層</div>

只需要通過popovertarget屬性將目標懸浮層的id屬性和按鈕相關聯就行了(注意,只能是ID),效果如下:

圖片

還可以通過popovertargetaction屬性來設置點擊行為,有三個值,分別是:

  • show:打開。
  • hide:關閉。
  • toggle:切換(默認值)。如果懸浮層是關閉的就打開,反正亦然。
<button popovertarget="pop1" popovertargetaction="show">打開 auto 懸浮層</button>
<button popovertarget="pop1" popovertargetaction="hide">關閉 auto 懸浮層</button>
<button popovertarget="pop1" popovertargetaction="toggle">切換 auto 懸浮層</button>
<div id="pop1" popover>我是 auto 懸浮層</div>

效果如下:

圖片

現在回過頭來看看兩種popover的區別。

<button popovertarget="pop1">切換 auto 懸浮層</button>
<button popovertarget="pop2">切換 manual 懸浮層</button>
<div id="pop1" popover>我是 auto 懸浮層</div>
<div id="pop2" popover="manual">我是 manual 懸浮層</div>

效果如下:

圖片

可以看到,auto懸浮層點擊空白會自動關閉(還可以通過Esc鍵關閉),而manual懸浮層只能手動去關閉。當然大部分情況下auto可以滿足需求。

三、命令式方式

所謂“命令式”,其實就是一套JS API,需要在 JS中主動去調用。

那么,有了聲明式為啥還要命令式呢?答案是,更靈活。

比如,前面的聲明式,只適用于click場景,如果需要hover也能打開懸浮層,這種方式就不行了。像這種情況,就可以采用命令式方式了。

先看語法,很簡單,就是 3 個方法。

popoverEl.showPopover(); // 打開
popoverEl.hidePopover(); // 關閉
popoverEl.togglePopover(force) // 切換,可傳參數,強制設置為 true 或者 false

需要注意的是,這 3 個方式僅適用于懸浮層,也就是必須有popover屬性,如果是普通元素,會直接報錯,如下:

圖片

還有一種情況,如果一個本來已經打開的懸浮層,再次調用showPopover(),也會報錯,反之亦然

圖片

因此,在使用 JS 控制時,推薦使用manual懸浮層,便于精準控制。

下面來看一個hover控制的例子。

<button id="button">hover 打開懸浮層</button>
<div id="pop" popover="manual">我是 hover 懸浮層</div>

然后是相關JS。

button.addEventListener('mouseenter', () => {
  pop.showPopover()
})
button.addEventListener('mouseleave', () => {
  pop.hidePopover()
})

效果如下:

圖片

四、判斷懸浮層的打開狀態

首先,從HTML結構上來看,打開和關閉沒有任何屬性變化,這個和details不一樣(details會添加open屬性)。為此,CSS 還專門出了一個偽類:open用于標識懸浮層的打開狀態。

目前還不穩定,后續可能會更變為:popover-open。

div
  /* 打開樣式 */
}

通過這個偽類,我們可以很輕松的給懸浮層添加過渡動畫。

[popover]{
  display: block; /*默認是display:none,不會有動畫*/
  visibility: hidden;
  opacity: 0;
  transform: scale(.6);
  transition: .3s;
}
[popover]:open{
  visibility: visible;
  transform: scale(1);
  opacity: 1;
}

效果如下:

圖片

除了 CSS 方式,JS 也能判斷懸浮層的狀態,但是并不是自己想象的那樣。

起初,我以為有一個屬性可以直接獲取到懸浮層的狀態,發現并不行,如下:

popoverEl.open // undefined

那如何獲取呢?

其實可以借助前面 CSS 的方式,只要匹配的:open偽類不就可以了嗎,需要用到matches方法。

https://developer.mozilla.org/en-US/docs/Web/API/Element/matches。

這樣就能隨時獲取到懸浮層的打開狀態了

popoverEl.matches(':open')

另外,還可以通過事件監聽的方式來獲取,需要用到新的事件toggle,這是一個專門針對popover新推出的事件,使用方式如下:

popoverEl.addEventListener("toggle", (event) => {
  if (event.newState === "open") {
    console.log("打開狀態");
  } else {
    console.log("關閉狀態");
  }
});

五、popover 的頂層特性

前面說了那么多,好像并沒有什么很厲害的地方,隨便一個 div 都可以模擬,而且現在的組件庫不是也實現的好好的嗎?到底有什么優勢呢?

打開控制臺可以看到,popover上有一個很特殊的標識。

圖片

這個就是頂層 top-layer !也就是層級是最高的,高于頁面上的一切。

這也是懸浮層的意義所在,本身就應該是懸浮在最上面。下面是示意圖

圖片

這樣的好處就是無論在 HTML中的任何位置,都無需擔心懸浮層被遮擋的情況,也無需將懸浮層移動的最外層body上。

以上完整代碼可以查看以下任意鏈接:

  • popover (juejin.cn)[1]
  • popover (codepen.io)[2]
  • popover (runjs.work)[3]

如果瀏覽器不支持,會有下面提示:

圖片

這個是用@supports實現的。

@supports selector([popover]:open) {
    .no-support{
        display: none !important;
    }
}

六、兼容性和總結

看一下兼容性,目前只有Chrome 114+支持,內部項目可以嘗鮮一下,如果是Electron應用,那就大膽使用吧。

圖片

下面來總結一下本文要點:

  1. popover是一個全局屬性。給任意元素添加popover以后,它就變成了一個懸浮層。
  2. popover屬性有兩個值,默認是auto自動模式,支持默認行為,比如點擊空白關閉,鍵盤Esc關閉。
  3. popover屬性還支持manual手動模式,也就是沒有以上默認行為。
  4. 控制popover有兩種方式,分別是聲明式和命令式。
  5. 聲明式是指通過HTML屬性來實現點擊交互。
  6. 可以通過popovertarget屬性將懸浮層的id和按鈕相關聯,這樣就能通過按鈕打開懸浮層了。
  7. 還可以通過popovertargetaction屬性來設置點擊行為,有show、hide、toggle3種方式。
  8. 命令式是指通過 JS API來實現對懸浮層的控制,相比聲明式而言更加靈活。
  9. 控制懸浮層的方法有showPopover、hidePopover、togglePopover。
  10. CSS偽類:open可以區分懸浮層的打開狀態。
  11. JS 可以通過matches(':open')來獲取懸浮層的打開狀態。
  12. JS 還可以通過監聽toggle事件來獲取懸浮層的打開狀態,方式是event.newState。
  13. 相比傳統實現,原生popover最大的優勢是支持頂層特性。

最近正在對xy-ui[4]進行升級改造,里面的 popover 組件就使用到了這一特性,不過也對不支持的瀏覽器做了兼容,有興趣的可以去體驗一下。

https://xy-ui.codelabo.cn/components/popover。

圖片

參考資料

[1]popover (juejin.cn): https://code.juejin.cn/pen/7229985240335269943。

[2]popover (codepen.io): https://codepen.io/xboxyan/pen/MWPrRod。

[3]popover (runjs.work): https://runjs.work/projects/d38b9c37b0d04897。

[4]xy-ui: https://github.com/XboxYan/xy-ui。

責任編輯:姜華 來源: 前端偵探
相關推薦

2017-04-17 09:01:39

科技新聞早報

2022-09-26 12:17:56

SIMeSIMiPhone

2023-02-13 09:31:07

CSS前端

2021-04-08 12:33:06

數字人民幣數字貨幣區塊鏈

2021-01-28 16:58:12

數字貨幣加密貨幣區塊鏈

2013-03-25 16:27:59

2024-05-23 10:34:15

CSS 3CSS技術

2025-10-21 01:55:00

2025-06-06 08:13:47

2025-10-29 16:28:27

Vue前端開發

2023-11-26 18:13:07

iOS 18蘋果

2021-04-26 22:27:25

微信系統功能

2024-04-02 11:13:59

機器人人工智能自變量機器人

2009-03-28 09:39:25

Windows 7微軟操作系統

2021-04-20 08:03:26

單播協議TCP

2024-08-15 11:37:05

2009-10-22 08:50:33

Windows 7上市新聞

2013-07-12 09:59:58

Android 5.0

2013-08-08 10:21:12

Android 5.0創新

2024-04-03 08:47:58

React服務端組件Actions
點贊
收藏

51CTO技術棧公眾號

√天堂资源在线| 男插女免费视频| 国产精品无码粉嫩小泬| 91综合视频| 日韩午夜电影av| 99视频在线免费播放| 国产在线资源| 国产一区二区三区黄视频 | 美女高潮视频在线看| 久久女同互慰一区二区三区| 成人h视频在线观看播放| 国产一级一片免费播放放a| 五月综合久久| 欧美一级免费观看| 免费裸体美女网站| 日本在线视频中文有码| 国产亚洲综合在线| 国产 高清 精品 在线 a| 波多野结衣绝顶大高潮| 国产综合网站| 色婷婷综合成人| 中文字幕国产亚洲2019| 国产日韩欧美在线| 亚洲国产成人精品综合99| 色老板在线视频一区二区| 欧美日韩免费在线视频| 人妻av无码专区| 午夜在线观看视频| 91免费国产视频网站| 亚洲a级在线播放观看| 日韩精品成人免费观看视频| 你懂的成人av| 中文字幕亚洲二区| 亚洲第一页av| 粉嫩av一区二区| 在线播放一区二区三区| 成人亚洲视频在线观看| 精品人人视频| 亚洲午夜在线观看视频在线| 亚洲一区二区在| 久久经典视频| 99视频热这里只有精品免费| 亚洲xxx大片| 97成人免费视频| 日本免费在线视频不卡一不卡二| 欧美性在线观看| 免费在线观看av网址| 亚洲天堂一区二区三区四区| 最近2019免费中文字幕视频三| wwwwww日本| 亚洲警察之高压线| 精品亚洲aⅴ在线观看| 无码任你躁久久久久久老妇| 911精品国产| 精品捆绑美女sm三区| 国产精品igao网网址不卡| 国模私拍国内精品国内av| 91久久线看在观草草青青| 青青草原av在线播放| 欧亚av在线| 欧美日韩中文字幕| 丝袜老师办公室里做好紧好爽| 九九色在线视频| 亚洲高清视频的网址| av一区二区三区免费观看| 久色国产在线| 天天影视网天天综合色在线播放| 国产超级av在线| 亚洲天堂一区二区| 欧美日韩午夜在线| 九九精品久久久| 国产精区一区二区| 日韩精品一区二| 中国一级特黄录像播放| 神马影视一区二区| 中文国产成人精品久久一| 成年人网站在线观看视频| 偷偷www综合久久久久久久| 美日韩精品免费视频| 日本熟妇色xxxxx日本免费看| 99精品免费| 国产成人啪精品视频免费网| 亚洲天堂网在线观看视频| 激情偷乱视频一区二区三区| y111111国产精品久久婷婷| 天堂在线中文资源| xfplay精品久久| 亚洲精品高清国产一线久久| 自拍视频在线网| 一区二区三区中文免费| 国产素人在线观看| 成人午夜在线| 欧美mv日韩mv国产网站| 熟女少妇一区二区三区| 91精品国产调教在线观看| 欧美极品美女视频网站在线观看免费| 国产日产精品一区二区三区| 久久爱www久久做| 国产精品久久亚洲7777| 福利视频在线导航| 亚洲一级电影视频| 亚洲精品午夜在线观看| 久久这里只有精品一区二区| 少妇久久久久久| 91浏览器在线观看| 黄色精品一二区| 日本高清不卡一区二区三| 91精品国产91久久久久久青草| 疯狂蹂躏欧美一区二区精品| 国产高清av片| 国产日韩欧美一区二区三区| 久久久精品久久久| www.久久精品视频| 国产成人精品一区二区三区网站观看 | 欧美日韩一区二区三区视频| 韩国av中国字幕| 日韩精品一区二区久久| 91国内精品久久| 国产又大又粗又硬| 久久久99久久| 免费看国产一级片| 国产精品亚洲四区在线观看| 亚洲人线精品午夜| 日本少妇久久久| 国产精品99久久久久久久vr | 欧美老女人性开放| 亚洲愉拍自拍另类高清精品| 五月天激情视频在线观看| 欧美电影完整版在线观看| 另类图片亚洲另类| 中文字幕第315页| 久久久久久久久岛国免费| 日韩av在线播放不卡| 激情久久免费视频| 色妞在线综合亚洲欧美| 五月激情丁香网| 久久精品亚洲一区二区三区浴池| 国产中文字幕乱人伦在线观看| 伊人久久一区| 日韩亚洲一区二区| 精品国产www| 国产偷国产偷精品高清尤物| 免费在线观看亚洲视频| 国产一区调教| 久久久免费av| 神宫寺奈绪一区二区三区| 亚洲综合在线免费观看| 中文字幕人妻无码系列第三区| 欧美国产美女| 国产日韩欧美中文| 麻豆视频在线免费观看| 欧美日韩高清一区二区三区| 快灬快灬一下爽蜜桃在线观看| 老牛国产精品一区的观看方式| 精品人伦一区二区三区 | 国产精品久久久久久网站| 欧美色综合一区二区三区| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 久久国产剧场电影| 9999在线观看| 高清不卡一区| 欧美大片在线看| 蜜臀久久久久久999| 亚洲大片一区二区三区| 久久久午夜精品福利内容| 免费永久网站黄欧美| 欧美一区二区三区四区在线观看地址 | 伊人久久大香线蕉av不卡| 日本精品免费一区二区三区| 毛片在线免费| 欧美亚洲国产一区在线观看网站 | 国产精品亚洲网站| 久草资源在线观看| 精品少妇一区二区三区在线播放| 日本三级网站在线观看| 久久九九久精品国产免费直播| 我看黄色一级片| 亚洲色图国产| 国内一区二区三区在线视频| 日韩电影av| 久久精品国产成人| 日本黄色三级视频| 欧美亚洲国产怡红院影院| 美女福利视频在线观看| 91天堂素人约啪| 欧美 日韩 国产 激情| 91精品久久久久久久蜜月| av一区二区三区四区电影| 高清av不卡| 久久五月天色综合| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 色域天天综合网| 国产精品丝袜一区二区| 99精品在线免费| 中文字幕第100页| 亚洲日本视频| 亚洲欧洲一二三| 久久成人福利| 91精品久久久久久久久久久久久| 91福利区在线观看| 日韩一区二区三区国产| 五月激情婷婷网| 欧美精品日韩精品| 亚洲天堂一区在线观看| 亚洲人成7777| 国产成人无码精品久久二区三| 狠狠色综合播放一区二区| 免费av网址在线| 综合久久精品| 亚洲v国产v| 网曝91综合精品门事件在线| 亚洲bt天天射| 亚洲国产尤物| 欧美一级片一区| 午夜dj在线观看高清视频完整版| 亚洲一二在线观看| 无码精品人妻一区二区| 日韩欧美国产一区二区在线播放| 夜夜爽妓女8888视频免费观看| 亚洲综合精品久久| 成人高潮免费视频| 欧美国产1区2区| 久久国产精品无码一级毛片| 国产馆精品极品| 午夜啪啪小视频| 麻豆精品一二三| www.欧美日本| 亚洲一区国产一区| 国产曰肥老太婆无遮挡| 在线中文一区| 精品一区二区成人免费视频 | 91精品国产毛片武则天| 日韩在线观看电影完整版高清免费悬疑悬疑| 国产精品香蕉视屏| 免费精品一区| **亚洲第一综合导航网站| 日本午夜精品久久久久| 国产精品草莓在线免费观看| 综合毛片免费视频| 97在线看福利| 九九色在线视频| 久久久久久久久国产精品| 青草视频在线免费直播 | 韩国欧美国产1区| 午夜久久久精品| 美女视频一区二区| 在线能看的av网站| 激情图片小说一区| 老女人性生活视频| 国产福利一区二区| 亚洲欧美高清在线| 99热这里都是精品| 成人无码www在线看免费| 26uuu欧美| 亚洲一级中文字幕| 国产日韩综合av| 特黄一区二区三区| 亚洲欧美日韩中文播放| 农村妇女精品一区二区| 亚洲一区在线观看免费观看电影高清 | 久久久久久青草| 一区二区亚洲精品国产| 香蕉视频在线播放| 色综合天天综合网国产成人网 | 黄色毛片在线观看| 色哟哟亚洲精品一区二区| 午夜在线小视频| 久久99国产精品自在自在app| 成人爽a毛片免费啪啪动漫| 午夜精品蜜臀一区二区三区免费 | 国模大胆一区二区三区| 久草视频这里只有精品| 亚洲一区视频| 一道本在线免费视频| 国产成人免费视频精品含羞草妖精| 稀缺小u女呦精品呦| 久久久亚洲综合| 男女全黄做爰文章| 一区二区在线观看免费视频播放| 日本中文字幕免费| 欧美午夜在线一二页| av老司机久久| 亚洲精品视频网上网址在线观看| av在线播放网站| 美女精品视频一区| 裤袜国产欧美精品一区| 91久久精品日日躁夜夜躁国产| 51vv免费精品视频一区二区| 免费精品视频一区| 91av精品| 丰满少妇被猛烈进入高清播放| 麻豆成人91精品二区三区| 久久久久久久久久影视| 久久亚洲一级片| 日本一级片免费| 疯狂欧美牲乱大交777| 国产免费av电影| 亚洲欧美在线看| 少女频道在线观看免费播放电视剧| 欧美影院久久久| 精品国产一区二区三区性色av| 美女亚洲精品| 午夜激情一区| 91日韩视频在线观看| www.在线欧美| 日日噜噜夜夜狠狠久久波多野| 欧美日韩加勒比精品一区| 一区二区久久精品66国产精品| 日韩精品视频在线| 黄色一级大片在线免费看产| 日韩av片电影专区| av自拍一区| 成年人黄色在线观看| 日韩主播视频在线| 久久久午夜精品福利内容| 亚洲精品视频在线观看免费| 日本欧美www| 亚洲精品日韩欧美| 国产三线在线| 91原创国产| 亚洲一区 二区 三区| 中文字幕天天干| 91麻豆精东视频| 日韩精品视频播放| 日韩精品中文字幕一区二区三区| 日韩精品黄色| 国产精品高清在线观看| 日韩深夜影院| 黄色一级视频片| 成人免费毛片app| 九九久久免费视频| 91精品国产一区二区人妖| jizzjizz在线观看| 国产精品高潮呻吟久久av野狼| 香蕉国产成人午夜av影院| 国产老熟妇精品观看| 成人少妇影院yyyy| 久久久久久久久久久网| 日韩精品一区二区在线观看| 黄色动漫在线| 91午夜理伦私人影院| 无需播放器亚洲| www.欧美激情.com| 亚洲色图一区二区| va婷婷在线免费观看| 欧美大奶子在线| 91九色鹿精品国产综合久久香蕉| 好吊色视频988gao在线观看| 国产毛片精品视频| 男女免费视频网站| 亚洲第一福利网站| 2020av在线| 久久精品中文字幕一区二区三区| 在线一区欧美| 99久久久久久久久久| 色婷婷久久99综合精品jk白丝| 国产在线观看黄| 国产精品美女久久久久av超清| 欧美日韩国产免费观看视频| 欧美成人黄色网址| 亚洲图片激情小说| 国内精品国产成人国产三级| 欧美精品xxx| 天堂日韩电影| 国产精品一区二区羞羞答答| 中文字幕在线不卡一区| 99久久久国产精品无码网爆| 久久久久久av| 天堂成人娱乐在线视频免费播放网站 | 欧洲黄色一区| 精品伦理一区二区三区| 日韩av一区二区三区四区| 中文字幕观看av| 亚洲国产精品久久久久久| 欧美一区 二区 三区| 精品一区二区成人免费视频| 成人毛片在线观看| 久久久久久无码精品大片| 久久久97精品| 精品网站aaa| 日韩欧美国产片| 亚洲无人区一区| 第一福利在线| 成人欧美一区二区三区视频 | 午夜国产精品一区| 成人激情电影在线看| 亚洲伊人第一页| 香蕉av777xxx色综合一区| 91久久久久久久久久久久久久| 亚洲精品一线二线三线无人区| 精品国产免费人成网站| 国产日产欧美一区二区| 91蝌蚪porny| 国产片高清在线观看| 26uuu久久噜噜噜噜| 91精品国产视频| 法国伦理少妇愉情| 日韩欧美一区中文| 日韩网站中文字幕| 欧美午夜性视频|