弹层效果web/popup
通过用户操作显示弹层的交互效果。
基本用法
设置元素 elem
在用户点击 target
后自动弹出:
<button id="target">按钮</button>
<div id="elem" class="doc-box" style="position: fixed; display: none;"></div>
<script>
import popup from "web/popup";
a = popup(elem, {
target: target
});
</script>
弹层事件
使用 event
字段指定触发弹层显示的事件。
点击相关事件
click
(默认): 点击target
后弹出,点击屏幕空白处消失。dblclick
: 双击target
后弹出,点击屏幕空白处消失。auxclick
: 右击target
后弹出,点击屏幕空白处消失。contextmenu
: 作为target
右键菜单后弹出,点击屏幕空白处消失。pointerdown
: 指针在target
按下后弹出,点击屏幕空白处消失。pointerup
: 指针在target
按出后弹出,点击屏幕空白处消失。
<button id="target_click">按钮</button>
<div id="elem_click" class="doc-box" style="position: fixed; display: none;"></div>
<script>
import popup from "web/popup";
popup(elem_click, {
target: target_click,
event: "click"
});
</script>
<button id="target_dblclick">按钮</button>
<div id="elem_dblclick" class="doc-box" style="position: fixed; display: none;"></div>
<script>
import popup from "web/popup";
popup(elem_dblclick, {
target: target_dblclick,
event: "dblclick"
});
</script>
<button id="target_auxclick">按钮</button>
<div id="elem_auxclick" class="doc-box" style="position: fixed; display: none;"></div>
<script>
import popup from "web/popup";
popup(elem_auxclick, {
target: target_auxclick,
event: "auxclick"
});
</script>
<button id="target_contextmenu">按钮</button>
<div id="elem_contextmenu" class="doc-box" style="position: fixed; display: none;"></div>
<script>
import popup from "web/popup";
popup(elem_contextmenu, {
target: target_contextmenu,
event: "contextmenu"
});
</script>
<button id="target_pointerdown">按钮</button>
<div id="elem_pointerdown" class="doc-box" style="position: fixed; display: none;"></div>
<script>
import popup from "web/popup";
popup(elem_pointerdown, {
target: target_pointerdown,
event: "pointerdown"
});
</script>
<button id="target_pointerup">按钮</button>
<div id="elem_pointerup" class="doc-box" style="position: fixed; display: none;"></div>
<script>
import popup from "web/popup";
popup(elem_pointerup, {
target: target_pointerup,
event: "pointerup"
});
</script>
移动相关事件
pointerenter
: 指针移入target
后自动弹出,移到屏幕空白处消失。hover
: 指针移入target
后自动弹出,移出target
后消失。pointermove
: 指针移入target
后自动弹出,并跟随鼠标移动。
<button id="target_pointerenter">按钮</button>
<div id="elem_pointerenter" class="doc-box" style="position: fixed; display: none;"></div>
<script>
import popup from "web/popup";
popup(elem_pointerenter, {
target: target_pointerenter,
event: "pointerenter"
});
</script>
<button id="target_hover">按钮</button>
<div id="elem_hover" class="doc-box" style="position: fixed; display: none;"></div>
<script>
import popup from "web/popup";
popup(elem_hover, {
target: target_hover,
event: "hover"
});
</script>
<button id="target_pointermove">按钮</button>
<div id="elem_pointermove" class="doc-box" style="position: fixed; display: none;"></div>
<script>
import popup from "web/popup";
popup(elem_pointermove, {
target: target_pointermove,
event: "pointermove"
});
</script>
焦点相关事件
active
:指针在target
按下时显示,松开后消失。focus
:target
获取焦点后显示,失去焦点后消失。focusin
:target
获取焦点后显示,点击屏幕空白处消失。
<button id="target_active">按钮</button>
<div id="elem_active" class="doc-box" style="position: fixed; display: none;"></div>
<script>
import popup from "web/popup";
popup(elem_active, {
target: target_active,
event: "active"
});
</script>
<button id="target_focus">按钮</button>
<div id="elem_focus" class="doc-box" style="position: fixed; display: none;"></div>
<script>
import popup from "web/popup";
popup(elem_focus, {
target: target_focus,
event: "focus"
});
</script>
<button id="target_focusin">按钮</button>
<div id="elem_focusin" class="doc-box" style="position: fixed; display: none;"></div>
<script>
import popup from "web/popup";
popup(elem_focusin, {
target: target_focusin,
event: "focusin"
});
</script>
自定义事件
手动调用 popup.show()
和 popup.hide()
显示和隐藏弹层。
<button id="target_custom">按钮</button>
<div id="elem_custom" class="doc-box" style="position: fixed; display: none;"></div>
<script>
import popup from "web/popup";
const pop = popup(elem_custom, {
target: target_custom,
event: null
});
// 自定义绑定双击事件。
target_custom.ondblclick = () => {
pop.show();
};
</script>
弹层动画
通过 animation
设置弹层的动画。可用的内置动画见DOM 处理。
<button id="target_animation">按钮</button>
<div id="elem_animation" class="doc-box" style="position: fixed; display: none;"></div>
<script>
import popup from "web/popup";
popup(elem_animation, {
target: target_animation,
animation: "scaleY"
});
</script>
API
全局
Popup 类
表示一个弹层对象。
字段 | 类型 | 描述 |
---|---|---|
⮞
elem
: HTMLElement
弹层元素。 |
HTMLElement
|
弹层元素。 |
⮞
target
: HTMLElement
触发弹层显示的元素。 |
HTMLElement
|
触发弹层显示的元素。 |
⮞
event
: "click" | "dblclick" | "auxclick" | "contextmenu" | "pointerdown" | "pointerup" | "pointerenter" | "pointermove" | "hover" | "active" | "focus" | "focusin" = "click"
触发弹层显示的事件。 说明
|
string
|
触发弹层显示的事件。 |
⮞
delay
: number = 100
显示弹层的延时毫秒数。仅对指针移动事件有效。 |
number
|
显示弹层的延时毫秒数。仅对指针移动事件有效。 |
⮞
pinTarget
: HTMLElement | Document | Rect = target
弹层对齐的目标节点或区域。 |
HTMLElement | Document | Rect
|
弹层对齐的目标节点或区域。 |
⮞
align
: PinAlign = "bottomLeft"
弹层对齐的位置。如果为 null 则不自动对齐。 |
PinAlign
|
弹层对齐的位置。如果为 null 则不自动对齐。 |
⮞
margin
: number = 0
元素的外边距,即对齐时元素和 pinTarget 的距离。 |
number
|
元素的外边距,即对齐时元素和 pinTarget 的距离。 |
⮞
container
: HTMLElement | Document = document
容器节点或区域,定位超出容器后会自动调整。 |
HTMLElement | Document
|
容器节点或区域,定位超出容器后会自动调整。 |
⮞
containerPadding
: number = 0
容器的内边距。 |
number
|
容器的内边距。 |
⮞
offset
: number = 0
定位后的额外偏移距离。如果小于 1,则表示相对元素大小的百分比。 |
number
|
定位后的额外偏移距离。如果小于 1,则表示相对元素大小的百分比。 |
⮞
resize
: boolean = false
如果容器比元素小,是否允许更改元素大小。 |
boolean
|
如果容器比元素小,是否允许更改元素大小。 |
⮞
animation
: ToggleAnimation = "opacity"
显示弹层时使用的动画。 |
ToggleAnimation
|
显示弹层时使用的动画。 |
⮞
hideAnimation
: ToggleAnimation = animation
隐藏弹层时使用的动画。 |
ToggleAnimation
|
隐藏弹层时使用的动画。 |
⮞
duration
: number = 200
显示动画的持续毫秒数。 |
number
|
显示动画的持续毫秒数。 |
⮞
hideDuration
: number = duration
隐藏动画的持续毫秒数。 |
number
|
隐藏动画的持续毫秒数。 |
⮞
timingFunction
: string = "ease-in"
显示弹层时使用的动画渐变函数。 |
string
|
显示弹层时使用的动画渐变函数。 |
⮞
hideTimingFunction
: string = timingFunction
隐藏弹层时使用的动画渐变函数。 |
string
|
隐藏弹层时使用的动画渐变函数。 |
⮞
autoHide
: boolean = true
是否在点击屏幕空白处后消失。 |
boolean
|
是否在点击屏幕空白处后消失。 |
⮞
autoScroll
: boolean = true
是否在滚动后自动重定位。 |
boolean
|
是否在滚动后自动重定位。 |
⮞
onShow
: (sender: Popup) => void
弹层显示事件。 |
function
|
弹层显示事件。 |
⮞
onHide
: (sender: Popup) => void
弹层隐藏事件。 |
function
|
弹层隐藏事件。 |
⮞
onAlign
: (r: PinResult, sender: Popup) => void
弹层对齐事件。 |
function
|
弹层对齐事件。 |
方法 | 描述 | ||||||||
---|---|---|---|---|---|---|---|---|---|
⮞
enable()():
启用弹层。 返回值类型: |
启用弹层。 |
||||||||
⮞
disable()():
禁用弹层。 返回值类型: |
禁用弹层。 |
||||||||
⮞
show()():
显示当前浮层。 返回值类型: |
显示当前浮层。 |
||||||||
⮞
hide()():
隐藏当前浮层。 返回值类型: |
隐藏当前浮层。 |
||||||||
⮞
toggle(...)(value?:
切换显示或隐藏当前浮层。
返回值类型: |
切换显示或隐藏当前浮层。 |
||||||||
⮞
handleDocumentPointerDown(e)(e:
(保护的)处理文档指针按下事件。
返回值类型: |
(保护的)处理文档指针按下事件。 |
||||||||
⮞
handleDocumentScroll(e)(e:
(保护的)处理文档滚动事件。
返回值类型: |
(保护的)处理文档滚动事件。 |
||||||||
⮞
realign()():
|
重新对齐浮层的位置。 |