UNPKG

@ray-js/smart-ui

Version:

轻量、可靠的智能小程序 UI 组件库

338 lines (301 loc) 8.98 kB
--- category: 反馈 new: true version: v2.3.0 --- # Popover 弹出提示 ### 介绍 v2.3.0开始加入,弹出层容器,用于展示弹窗、信息提示等轻量内容。 ### 引入 ```jsx import { Popover } from '@ray-js/smart-ui'; ``` ## 代码演示 ### 基础用法 ```jsx import { View } from '@ray-js/ray'; import { Popover, Icon, Button } from '@ray-js/smart-ui'; import React from 'react'; import Sun from '@tuya-miniapp/icons/dist/svg/Sun'; export default function Demo() { const [show, setShow] = React.useState(false); const showPopup = () => setShow(true); const onClose = () => setShow(false); return ( <View style={{paddingBottom: '64px'}}> <View style={{ padding: '10vh', paddingTop: 0, paddingLeft: 8, }} > <Popover show={show} onClose={() => setShow(false)} placement="bottomLeft" customStyle={{ padding: '0px', width: '200px', }} slot={{ overlay: ( <View> {[1, 2, 3].map(n => ( <View className={styles.listItem} key={n}> <Icon name={Sun} size="24px" color="#3678E3" /> <Text className={styles.listText}>Title</Text> </View> ))} </View> ), }} > <Button>下左弹出</Button> </Popover> </View> <View style={{ padding: '10vh', paddingTop: 0, paddingLeft: '20vw', }} > <Popover placement="bottom" customStyle={{ padding: '0px', width: '200px', }} slot={{ overlay: ( <View> {[1, 2, 3].map(n => ( <View className={styles.listItem} key={n}> <Icon name={Sun} size="24px" color="#3678E3" /> <Text className={styles.listText}>Title</Text> </View> ))} </View> ), }} > <Button>下中弹出</Button> </Popover> </View> <View style={{ padding: '10vh', paddingTop: 0, paddingLeft: '40vw', }} > <Popover placement="bottomRight" customStyle={{ padding: '0px', width: '200px', }} slot={{ overlay: ( <View> {[1, 2, 3].map(n => ( <View className={styles.listItem} key={n}> <Icon name={Sun} size="24px" color="#3678E3" /> <Text className={styles.listText}>Title</Text> </View> ))} </View> ), }} > <Button>下右弹出</Button> </Popover> </View> <View style={{ paddingLeft: 8, paddingTop: '10vh', }} > <Popover placement="top" slot={{ overlay: <View>tip</View>, }} > <Button>上侧弹出</Button> </Popover> </View> <View style={{ paddingLeft: '20vw', paddingTop: '10vh', }} > <Popover placement="left" slot={{ overlay: <View>tip</View>, }} > <Button>左侧弹出</Button> </Popover> </View> <View style={{ paddingLeft: '8px', paddingTop: '10vh', }} > <Popover placement="right" slot={{ overlay: <View>tip</View>, }} > <Button>右侧弹出</Button> </Popover> </View> <View style={{ paddingLeft: '8px', paddingTop: '10vh', }} > <Popover placement="bottom" slot={{ overlay: <View>tip</View>, }} > <Button>下中弹出</Button> </Popover> </View> </View> ); } ``` less 样式如下 ```less .listItem { height: 96rpx; padding: 0 32rpx; line-height: 96rpx; display: flex; align-items: center; position: relative; &:nth-child(n + 2)::after { display: block; content: ''; height: 1px; background-color: #ebebeb; width: 90%; position: absolute; right: 0; top: 0; } } .listText { margin-left: 20rpx; font-size: 16px; color: rgba(0, 0, 0, 0.9); } ``` ### 受控用法 通过`show`属性控制弹出层是否展示。 ```tsx import { View } from '@ray-js/ray'; import { Popover, Button } from '@ray-js/smart-ui'; import React from 'react'; export default function Demo() { const [show, setShow] = React.useState(false); return ( <Popover placement="bottom" show={show} onClose={() => setShow(false)} onShowChange={e => setShow(e.detail)} slot={{ overlay: <View>tip</View> }}> <Button>下方弹出</Button> </Popover> ) } ``` ### 弹出位置 通过`position`属性设置弹出位置,默认居右弹出,可以设置为`top`、`topLeft`、`topRight`、`bottom`、`bottomLeft`、`bottomRight`、`left`、`leftTop`、`leftBottom`、`right`、`rightTop`、`rightBottom`。 ```jsx import { View } from '@ray-js/ray'; import { Popover, Button } from '@ray-js/smart-ui'; import React from 'react'; export default function Demo() { return ( <Popover placement="right" slot={{ overlay: <View>弹框内容</View> }}> <Button>右侧弹出</Button> </Popover> ); } ``` ### 自定义遮罩样式 `v2.13.1` 通过 `overlayStyle` 可自定义遮罩层样式,透传至内部 `smart-overlay` 的 `custom-style`。 ```jsx import { View, Text } from '@ray-js/ray'; import { Popover, Button } from '@ray-js/smart-ui'; import React from 'react'; export default function Demo() { return ( <View style={{ paddingLeft: 8, paddingTop: '10vh' }}> <Popover placement="bottom" overlayStyle={{ backgroundColor: 'rgba(64, 128, 255, 0.25)', }} customStyle={{ padding: '0px', width: '200px', }} slot={{ overlay: ( <View> <Text>tip</Text> </View> ), }} > <Button>自定义遮罩样式</Button> </Popover> </View> ); } ``` ## API ### Props | 参数 | 说明 | 类型 | 默认值 | | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | ------- | | customStyle | 自定义弹出层样式 | _React.CSSProperties_ | - | | overlayStyle `v2.13.1` | 自定义遮罩层样式,透传至内部 `smart-overlay` 的 `custom-style` | _React.CSSProperties_ | - | | duration | 延迟关闭的时间(ms) | number | `3000` | | placement | 弹出层的位置,支持值:`top`、`topLeft`、`topRight`、`bottom`、`bottomLeft`、`bottomRight`、`left`、`leftTop`、`leftBottom`、`right`、`rightTop`、`rightBottom` | _string_ | `right` | | show | 控制弹出层是否显示,并监听状态变化,值变更时更新 `currentShow` | _boolean_ | `false` | | trigger `v2.5.0` | 控制弹出层触发方式,支持 `tap`、`longpress` | _string_ | `tap` | ### Events | 事件名 | 说明 | 参数 | | ---------------- | --------------- | ---- | | onClose | 关闭时触发 | - | | onShowChange | 显示/隐藏时触发 | - | ### Popover Slot | 名称 | 说明 | | ------- | -------- | | overlay | 弹窗内容 | ### 外部样式类 | 类名 | 说明 | | ------------ | ------------ | | customClass | 根节点样式类 | ### 样式变量 组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 [ConfigProvider 组件](/material/smartui?comId=config-provider)。 | 名称 | 默认值 | 描述 | | -------------------------------- | ----------------------------------- | ---------------- | | --popover-background-color | #fff | 弹出层背景色 | | --popover-border-radius | 12px | 弹出层圆角 | | --popover-box-shadow | 0px 6px 12px 0px rgba(0, 0, 0, 0.1) | 弹出层阴影 | | --popover-overlay-color `v2.8.0` | var(--app-B1-N1, rgba(0, 0, 0, 1)) | 遮照插槽文字颜色 | | --popover-padding | 12px | 弹出层内边距 |