彈出視窗元件用於管理彈出視窗中內容的呈現。您可以使用彈出視窗來暫時呈現資訊。彈出視窗會保持可見,直到使用者點擊彈出視窗外,或您明確關閉它為止。
包含以下元件
彈出視窗
名稱 | 類型 | 預設值 | 描述 |
---|---|---|---|
angle | 布林值 | true | 渲染彈出視窗的「角度」/「角落」 |
angleClassName | 字串 | 未定義 | 要新增到「角度」/「角落」元素的額外 CSS 類別 |
backdrop | 布林值 | true | 啟用彈出視窗背景(後方深色半透明圖層) |
colors | 物件 | 具有 Tailwind CSS 顏色類別的物件 | |
colors.bgIos | 字串 | 'bg-ios-light-surface-3 dark:bg-ios-dark-surface-3' | |
colors.bgMaterial | 字串 | 'bg-md-light-surface-3 dark:bg-md-dark-surface-3' | |
component | 字串 | 'div' | 元件的 HTML 元素 |
opened | 布林值 | false | 允許開啟/關閉彈出視窗並設定其初始狀態 |
size | 字串 | 'w-64' | Tailwind CSS 大小類別 |
target | 字串 | HTMLElement | Ref | 彈出視窗目標元素。彈出視窗將定位在此元素周圍 | |
targetHeight | 數字 | 虛擬目標元素高度(以 px 為單位)。若未使用真實目標元素 ( | |
targetWidth | 數字 | 虛擬目標元素寬度(以 px 為單位)。若未使用真實目標元素 ( | |
targetX | 數字 | 虛擬目標元素從螢幕左側的水平偏移量。若未使用真實目標元素 ( | |
targetY | 數字 | 虛擬目標元素從螢幕頂端的垂直偏移量。若未使用真實目標元素 ( | |
translucent | 布林值 | true | 在 iOS 主題中使彈出視窗背景半透明(使用 |
onBackdropClick | 函式(e) | 背景元素上的點擊處理常式 |
import React, { useRef, useState } from 'react';import {Page,Navbar,NavbarBackLink,Popover,Block,Link,Button,List,ListItem,} from 'konsta/react';export default function PopoverPage() {const [popoverOpened, setPopoverOpened] = useState(false);const popoverTargetRef = useRef(null);const openPopover = (targetRef) => {popoverTargetRef.current = targetRef;setPopoverOpened(true);};return (<Page><Navbartitle="Popover"right={<LinkclassName="popover-navbar-link"navbaronClick={() => openPopover('.popover-navbar-link')}>Popover</Link>}/><Block className="space-y-4"><p><ButtonclassName="popover-button"onClick={() => openPopover('.popover-button')}>Open popover on me</Button></p><p>Mauris fermentum neque et luctus venenatis. Vivamus a sem rhoncus,ornare tellus eu, euismod mauris. In porta turpis at semper convallis.Duis adipiscing leo eu nulla lacinia, quis rhoncus metus condimentum.Etiam nec malesuada nibh. Maecenas quis lacinia nisl, vel posueredolor. Vestibulum condimentum, nisl ac vulputate egestas, neque enimdignissim elit, rhoncus volutpat magna enim a est. Aenean sit ametligula neque. Cras suscipit rutrum enim. Nam a odio facilisis,elementum tellus non,{' '}<LinkclassName="popover-link-1"onClick={() => openPopover('.popover-link-1')}>popover</Link>{' '}tortor. Pellentesque felis eros, dictum vitae lacinia quis, lobortisvitae ipsum. Cras vehicula bibendum lorem quis imperdiet.</p><p>In hac habitasse platea dictumst. Etiam varius, ante vel ornarefacilisis, velit massa rutrum dolor, ac porta magna magna lacinianunc. Curabitur{' '}<LinkclassName="popover-link-2"onClick={() => openPopover('.popover-link-2')}>popover!</Link>{' '}cursus laoreet. Aenean vel tempus augue. Pellentesque in imperdietnibh. Mauris rhoncus nulla id sem suscipit volutpat. Pellentesque acarcu in nisi viverra pulvinar. Nullam nulla orci, bibendum sed ligulanon, ullamcorper iaculis mi. In hac habitasse platea dictumst.Praesent varius at nisl eu luctus. Cras aliquet porta est. Quisqueelementum quis dui et consectetur. Cum sociis natoque penatibus etmagnis dis parturient montes, nascetur ridiculus mus. Sed sed laoreetpurus. Pellentesque eget ante ante.</p><p>Duis et ultricies nibh. Sed facilisis turpis urna, ac imperdiet eratvenenatis eu. Proin sit amet faucibus tortor, et varius sem. Etiamvitae lacinia neque. Aliquam nisi purus, interdum in arcu sed,ultrices rutrum arcu. Nulla mi turpis, consectetur vel enim quis,facilisis viverra dui. Aliquam quis convallis tortor, quis semperligula. Morbi ullamcorper{' '}<LinkclassName="popover-link-3"onClick={() => openPopover('.popover-link-3')}>one more popover</Link>{' '}massa at accumsan. Etiam purus odio, posuere in ligula vitae, viverraultricies justo. Vestibulum nec interdum nisi. Aenean ac consecteturvelit, non malesuada magna. Sed pharetra vehicula augue, vel venenatislectus gravida eget. Curabitur lacus tellus, venenatis eu arcu in,interdum auctor nunc. Nunc non metus neque. Suspendisse viverra lectussed risus aliquet, vel accumsan dolor feugiat.</p></Block><Popoveropened={popoverOpened}target={popoverTargetRef.current}onBackdropClick={() => setPopoverOpened(false)}><List nested><ListItemtitle="Item 1"linkonClick={() => setPopoverOpened(false)}/><ListItemtitle="List Item 2"linkonClick={() => setPopoverOpened(false)}/><ListItemtitle="Item 3"linkonClick={() => setPopoverOpened(false)}/><ListItemtitle="List Item 4"linkonClick={() => setPopoverOpened(false)}/><ListItemtitle="Item 5"linkonClick={() => setPopoverOpened(false)}/></List></Popover></Page>);}