Tooltip
@ryangjchandler/alpine-tooltip 用于对元素添加工具提示。
插件向 Alpine 添加了一个新的 x-tooltip 指令,以及一系列用于更改工具提示行为的修改器。
安装
跟 Alpine.js 的安装一样, @ryangjchandler/alpine-tooltip 插件同样支持从 <script> 脚本标签引用它或者将其作为模块导入。
通过 CDN 脚本
在 HTML 页面的头部包含以下 <script> 标签。
<!doctype html>
<html lang="en">
<head>
<!--...-->
<title>Alpine.js Tooltip Plugins</title>
<!--tippy.css-->
<link rel="stylesheet" href="https://unpkg.com/tippy.js@6/dist/tippy.css" />
<!-- Alpine Tooltip Plugins -->
<script defer src="https://unpkg.com/@ryangjchandler/alpine-tooltip@2.x.x/dist/cdn.min.js"></script> // [!code focus]
<script defer src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js"></script> // [!code focus]
</head>
<body>
<!--...-->
</body>
</html>需确保将其包含在 Alpine 的核心 JS 文件之前即可。
生产环境中,建议在链接中锁定特定版本号,以避免新版本中的变更造成问题。
例如,锁定版本为 2.0.0 (最新版本):
<!-- Alpine Plugins -->
<script defer src="https://unpkg.com/@ryangjchandler/alpine-tooltip@2.0.0/dist/cdn.min.js"></script>作为 NPM 模块
可以通过 npm / yarn 安装 Tooltip 并将其导入到一个包中。 运行以下命令来安装它:
yarn add @ryangjchandler/alpine-tooltipnpm install @ryangjchandler/alpine-tooltip现在将 Tooltip 导入到包中并像这样初始化它:
import Alpine from 'alpinejs'
import Tooltip from '@ryangjchandler/alpine-tooltip'
Alpine.plugin(Tooltip)
Alpine.start()/*注入 tippy.css 样式*/
@import "tippy.js/dist/tippy.css";
@tailwind base;
@tailwind components;
@tailwind utilities;也可以在注册插件时自定义 Tippy 属性:
import Tooltip from '@ryangjchandler/alpine-tooltip'
Alpine.plugin(Tooltip.defaultProps({
delay: 50,
theme: 'dark',
// ...
}))x-tooltip 指令
要创建工具提示,请在元素上使用 x-tooltip 指令。
<div x-data="{ tooltip: 'This is crazy!' }">
<button x-tooltip="tooltip">Hover for info!</button>
</div>.raw 修饰符
如果不想将工具提示的内容绑定到 Alpine 组件中的数据属性,则可以将修饰符 .raw 添加到指令并使用指令表达式设置内容。
<button x-data x-tooltip.raw="Hello, world!">
Raw Tooltip
</button>指令内的表达式/文本将用作工具提示,并且只会初始化和配置一次。
禁用 Tooltip
通过将 data 属性设置为假值,比如空字符串、null、0或false等。
如果希望重新启用工具提示,只需将数据属性更新为真实表达式,插件就会调用 Tippy 实例上的 enable() 方法。
修饰符
x-tooltip 指令的更多修饰符由 Tippy.js 提供支持。
| 修饰符 | 描述 | 用法 |
|---|---|---|
duration | 更改工具栏的过渡持续时间(毫秒) | x-tooltip.duration.500 |
delay | 更改工具提示的转换延迟(毫秒)。 | x-tooltip.dealy.500x-tooltip.dealy.0-500 |
cursor | 确定工具提示是否跟随用户的光标。 默认行为将跟随光标围绕目标元素。 x 将水平跟随光标。initial将光标置于触发器上的用户光标处。 | x-tooltip.cursorx-tooltip.cursor.xx-tooltip.cursor.initial |
on | 更改工具提示的触发事件。 默认行为是 mouseenter 和focus。 | x-tooltip.on.clickx-tooltip.on.focusx-tooltip.on.mouseenter |
arrowless | 隐藏工具提示上的"箭头"。 | x-tooltip.arrowless |
html | 允许工具提示内包含 HTML。 | x-tooltip.html |
interactive | 允许用户与工具提示交互(防止它消失)。 | x-tooltip.interactive |
interactive.border | 更改工具提示周围的不可见边框 (px) 的大小,以防止它在光标离开时隐藏。 | x-tooltip.interactive.border.30 |
interactive.debounce | 更改当光标离开工具提示时使交互式隐藏处理程序去抖的时间(毫秒)。 | x-tooltip.interactive.debounce.500 |
max-width | 更改工具提示的max-width (px)属性。 | x-tooltip.max-width.500 |
theme | 更改工具提示的主题。 在这里了解更多信息。 | x-tooltip.theme.light |
placement | 更改工具提示的放置/位置。 在这里了解更多信息。 | x-tooltip.placement.topx-tooltip.placement.bottom-start |
animation | 更改用于工具提示的动画。 在这里了解更多信息。 | x-tooltip.animation.scalex-tooltip.animation.perspective |
no-flip | 禁用 Popper 的默认自动翻转行为。这允许设置展示位置 .placement 并始终强制执行它。 | x-tooltip.placement.left.no-flip |
使用另一个元素作为内容
使用 HTML 元素来呈现工具提示的内容:
<div x-data="{ message: 'Hello, world!' }">
<template x-ref="template">
<p x-text="message"></p>
</template>
<button x-tooltip="{
content: () => $refs.template.innerHTML,
allowHTML: true,
appendTo: $root
}">
Show message!
</button>
</div>提供了一个
content属性的回调,该属性将在Tippy呈现工具提示之前调用。允许使用动态 HTML 内容作为工具提示内的内容。配置
allowHTML: true允许展示 HTML 。默认情况下,HTML 将呈现为纯文本。默认情况下,Tippy 会将实际的工具提示元素添加到
document.body。由于包含 Alpine 指令,因此将它们放在实际的 Alpine 组件之外将会导致错误。
为了解决这个问题,
Tippy会将元素附加到$root我们的 Alpine 组件开始的元素(在本例中为<div>)。这允许在模板
<template>内使用 Alpine 指令进行数据绑定等。
如果希望在内容中使用按钮或其它交互元素,则应该添加
interactive: true到该对象。
$tooltip
使用 $tooltip 可以手动实例化工具提示。
<button x-data @click="$tooltip('Hello, world!')">Click me</button>点击按钮后 Tooltip 将显示并在 2 秒后隐藏。
设置超时 timeout
如果希望 Tooltip 显示的时间超过 2 秒,可以提供一个对象作为 $tooltip 魔术函数的第二个参数。
<button x-data @click="$tooltip('Hello, world!', {timeout: 5000})">Click me</button>超时时长以毫秒 ( seconds * 1000) 为单位。
tippy 配置
$tooltip 的第二个参数应该是一个对象,该对象接受 Tippy.js 文档中的所有配置选项。
可以在第二个参数对象上指定 Tippy 支持的任何其他属性。
<button x-data @click="$tooltip('Hello, world!', { delay: 500 })"></button>