精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲国产私拍精品国模在线观看| 久久精品男人天堂av| 久久亚洲私人国产精品va| 青青草精品在线| 91老司机福利在线| 国产亚洲福利社区一区| 亚洲一区二区在线播放| 日本高清www免费视频| 成久久久网站| 精品人在线二区三区| 欧美少妇性生活视频| 国产在线激情| 久久亚洲二区三区| 91在线观看免费高清| 91看片在线播放| 精品一区在线| 欧美乱熟臀69xxxxxx| 性欧美大战久久久久久久| 91涩漫在线观看| av亚洲精华国产精华| 成人黄色av播放免费| 久久久久99精品成人片我成大片 | 精品视频第一区| 一级做a爰片久久毛片16| 日韩午夜精品| 久久99国产综合精品女同| 中文字幕第24页| 噜噜噜狠狠夜夜躁精品仙踪林| 3751色影院一区二区三区| av免费在线播放网站| 黄色大片在线| 亚洲黄色尤物视频| 一本一道久久久a久久久精品91 | 日日摸夜夜添一区| ass精品国模裸体欣赏pics| 久久精品一级| 制服.丝袜.亚洲.中文.综合| 99视频在线免费| 涩涩涩视频在线观看| 亚洲愉拍自拍另类高清精品| 一级全黄肉体裸体全过程| 国产h视频在线观看| 91视视频在线观看入口直接观看www | 亚洲欧美日韩综合一区| 免费黄色片在线观看| 成人av午夜电影| 7777精品伊久久久大香线蕉语言| 亚洲天堂777| 日韩av一区二区在线影视| 人体精品一二三区| 一级做a爰片久久毛片| 亚洲精品1区2区| 久久久久久久久爱| 国产亚洲欧美久久久久| 国产精品草草| 久久99久国产精品黄毛片入口| 尤物在线免费视频| 国产精品成人a在线观看| 国产亚洲精品91在线| 成人免费无遮挡无码黄漫视频| 在线看成人短视频| 亚洲视频综合网| 成人小视频免费看| 日韩欧美综合| 欧美猛少妇色xxxxx| 美国黄色小视频| 欧美婷婷在线| 久久免费视频网站| 日韩 欧美 综合| 亚洲一区欧美二区| 国产精品美女久久久久久免费 | 日韩电影一区二区三区| 国产精品嫩草影院久久久| 国产又粗又黄又爽视频| 国产成人啪午夜精品网站男同| 99porn视频在线| 亚洲第一天堂在线观看| 波多野结衣91| 日韩精品一区二区三区色偷偷| 香蕉视频在线播放| 一片黄亚洲嫩模| 国产一区二区三区小说| 中国色在线日|韩| 色综合久久综合中文综合网| 一级片视频免费观看| 国产日本亚洲| 亚洲国产精品专区久久| 日本少妇xxxxx| 亚洲国产成人精品女人| 久久人人爽人人| 波多野结衣毛片| 国产高清视频一区| 欧美日韩国产不卡在线看| 欧美极品另类| 精品女同一区二区三区在线播放| 天天干在线影院| 亚洲一区二区电影| 亚洲性视频网址| 国产探花在线播放| 三级在线观看一区二区| 亚洲自拍欧美色图| 美女毛片在线看| 一区二区三区四区不卡在线 | 亚洲成人高清| 日韩av影视在线| 九九热久久免费视频| 一区视频在线看| 成人女保姆的销魂服务| 亚洲aⅴ乱码精品成人区| 亚洲欧洲美洲综合色网| avav在线看| 中文字幕日韩高清在线| 中国日韩欧美久久久久久久久| 国产亚洲色婷婷久久99精品| 日韩av网站免费在线| 精品一卡二卡三卡四卡日本乱码 | 天天干天天摸天天操| 国产精品电影院| 国产成人a亚洲精v品无码| 九九99久久精品在免费线bt| 亚洲天堂影视av| 日本视频免费在线| 国产suv精品一区二区883| 亚洲精品国产精品国自产| 久热在线观看视频| 日韩情涩欧美日韩视频| 久久精品在线观看视频| 日一区二区三区| 欧美国产一二三区| 9999在线视频| 精品区一区二区| 黄色a级片在线观看| 精品一区中文字幕| 亚洲精品乱码视频| 国产成人毛片| 在线播放国产一区中文字幕剧情欧美 | 午夜欧美精品久久久久久久| 国产一区二中文字幕在线看| 国产在线视频你懂得| 欧美性xxxx极品hd欧美风情| 日韩精品人妻中文字幕有码| 亚洲午夜黄色| 国产精品久久久久久久小唯西川| 欧美xxxx做受欧美88bbw| 91精品免费观看| 91久久国产综合| 精品一区二区三区免费播放| 中文字幕日韩一区二区三区| 成人av集中营| 少妇久久久久久| 亚洲天堂男人网| 国产精品成人一区二区艾草| 国内国产精品天干天干| 99久久综合狠狠综合久久aⅴ| 国产欧美日韩综合精品| 美女av在线播放| 日韩午夜精品视频| 久久中文字幕无码| av激情亚洲男人天堂| 高清在线观看免费| 九九精品在线| 国产精品入口免费视频一| 亚洲成人三级| 日韩一级片在线播放| 久久久精品一区二区涩爱| 国产69精品久久99不卡| 国产午夜福利在线播放| 国内亚洲精品| www.久久久久| 国内精品一区二区| 青春有你2免费观看完整版在线播放高清 | 天堂蜜桃91精品| 日本一区二区在线视频| 久久精品黄色| 美女av一区二区三区| 丰满大乳国产精品| 欧美日韩性生活视频| 天天干天天舔天天操| 国内不卡的二区三区中文字幕| 九一免费在线观看| 欧美美女在线直播| 国产精品久久网| 欧美精品videossex少妇| 国产午夜精品理论片a级探花| 日韩久久久久久久久久| 亚洲视频香蕉人妖| 超碰男人的天堂| 麻豆精品国产传媒mv男同| 成人在线视频一区二区三区| 欧美男男gaytwinkfreevideos| 国产精品网站大全| 国产精品国精产品一二| 夜夜嗨av一区二区三区四区| 99在线精品视频免费观看软件 | 91丨porny丨探花| 国产欧美高清视频在线| 91久久久久久国产精品| 不卡一本毛片| 色偷偷噜噜噜亚洲男人| 亚洲区小说区图片区| 91麻豆精品国产91久久久久久久久 | 一本大道久久a久久综合| 91高清免费观看| 国产婷婷精品av在线| 亚洲最大视频网| 免费在线观看一区二区三区| 欧美男女爱爱视频| 天天做天天爱天天综合网2021| 精品网站在线看| 日本久久伊人| 国产精品亚洲网站| 成年女人在线看片| 久久久av电影| 国产小视频免费在线观看| 日韩欧美激情在线| 瑟瑟视频在线免费观看| 精品成人av一区| 欧美毛片在线观看| 中文字幕亚洲综合久久菠萝蜜| 成年人网站免费看| 国产91精品精华液一区二区三区| 天堂中文av在线| 国产精品一级| 国产xxxx振车| 中文字幕免费精品| 亚洲免费视频一区| 欧美一级精品片在线看| 久久综合久久久| 另类图片第一页| 国产伦精品一区二区三区免费视频| 青草综合视频| 国产精品久久久久久久久久| 中文字幕在线视频久| 57pao国产精品一区| caoporn视频在线| 性欧美xxxx视频在线观看| 暖暖在线中文免费日本| 欧美大胆a视频| а√天堂在线官网| 超碰91人人草人人干| 国产婷婷视频在线| 久久视频这里只有精品| 午夜免费福利在线观看| 色一情一乱一区二区| 日本中文字幕在线观看| 最近2019中文免费高清视频观看www99 | 岛国大片在线观看| 亚洲天天在线日亚洲洲精| 欧美扣逼视频| 亚洲一区二区久久久| www亚洲人| 北条麻妃在线一区二区| 黄色网址在线免费观看| 久久伊人色综合| 性直播体位视频在线观看| 欧美日韩高清区| 2021天堂中文幕一二区在线观| 久久久女女女女999久久| 嗯~啊~轻一点视频日本在线观看| 久久免费精品视频| 免费h在线看| 国产精品青青在线观看爽香蕉| 成人午夜亚洲| 91精品一区二区| aiai久久| 欧美三级华人主播| 日韩国产一区| 欧美交换配乱吟粗大25p| 在线观看的日韩av| 欧美三级午夜理伦三级| 美女视频黄久久| 精产国品一区二区三区| a级精品国产片在线观看| 波多野结衣a v在线| 国产精品你懂的在线欣赏| 精品国产欧美日韩不卡在线观看| 亚洲成人在线网站| 亚洲视屏在线观看| 精品国产亚洲一区二区三区在线观看| 人妻精品一区一区三区蜜桃91 | 宅男网站在线免费观看| 91av国产在线| 日本成人在线网站| 国产精品中出一区二区三区| 欧美精品momsxxx| 9191国产视频| 久久久一二三| 少妇丰满尤物大尺度写真| 久久综合资源网| wwwav国产| 色婷婷精品大视频在线蜜桃视频| 国产一区二区在线视频观看| 亚洲国产欧美一区| 91欧美在线视频| 45www国产精品网站| 国产精品国产亚洲精品| 欧美污视频久久久| 欧美日韩日本国产亚洲在线| 国产三级三级三级看三级| 国产精品亚洲综合一区在线观看| 最近中文字幕免费视频| 亚洲在线一区二区三区| 伊人网站在线观看| 日韩黄色av网站| 在线xxxx| 成人女保姆的销魂服务| 久久91精品| 91精品国产91久久久久麻豆 主演| 美女性感视频久久| 国产又爽又黄无码无遮挡在线观看| 日韩一区在线免费观看| 成年人视频免费| 亚洲国产精品福利| gogo在线高清视频| 国产精品吊钟奶在线| 免费看久久久| 白白操在线视频| 久久99热99| 免费黄色在线网址| 欧美性猛交xxxxx免费看| 人妻偷人精品一区二区三区| 久久国产加勒比精品无码| 国产精品久久久久久妇女| 免费中文日韩| 99精品国产在热久久婷婷| 香蕉久久久久久av成人| 亚洲激情图片小说视频| 国产又黄又大又粗的视频| 在线观看日韩专区| 日韩欧美少妇| 日韩精品久久一区| 久久精品二区三区| 内射中出日韩无国产剧情| 五月天中文字幕一区二区| 成人免费视频国产| 欧美日韩国产成人在线| 天堂久久av| 路边理发店露脸熟妇泻火| 国内精品不卡在线| 日本裸体美女视频| 欧美日韩国产大片| 免费av不卡| 91在线|亚洲| 欧美日韩精品| 制服丝袜在线第一页| 亚洲一级在线观看| 日本美女一级视频| 91爱爱小视频k| 国产不卡av一区二区| 中文字幕第21页| 亚洲欧洲性图库| 超碰在线观看99| 久久全国免费视频| 亚洲综合图色| 污版视频在线观看| 国产精品国产馆在线真实露脸 | av一二三不卡影片| 国产又黄又爽又色| 亚洲色图激情小说| 国产成人福利夜色影视| 在线综合视频网站| 国产伦精品一区二区三区免费 | 欧美在线不卡一区| 99riav在线| 亚洲自拍在线观看| 亚洲人成毛片在线播放女女| 亚洲成人网在线播放| 欧美日韩一本到| 69成人在线| 精品一区二区三区视频日产| 久久久久91| 在线观看黄网址| 精品不卡在线视频| 久久电影tv| 中文字幕在线亚洲三区| 懂色av噜噜一区二区三区av| 欧美一级片免费在线观看| 影音先锋欧美精品| 日韩视频1区| 精品视频一区二区在线| 亚洲婷婷在线视频| 无码精品黑人一区二区三区| 国产精品18久久久久久首页狼 | 蜜桃a∨噜噜一区二区三区| 午夜免费精品视频| 亚洲一区二区三区中文字幕| 久久电影视频| 99re国产视频| 日韩国产欧美视频| 久久久久久蜜桃| 在线观看国产欧美| 激情av综合| 狠狠操狠狠干视频| 精品久久香蕉国产线看观看亚洲| 一广人看www在线观看免费视频| 国产精品一区视频网站| 免费成人av资源网| 免费在线不卡视频| 久久国产精品首页| 欧洲杯足球赛直播|