Anchor
Alpine 的 Anchor 插件允许轻松地将元素的位置锚定到页面上的另一个元素。
比如:使用 Alpine 创建下拉菜单、弹出窗口、对话框和工具提示。
安装
跟 Alpine.js 的安装一样, Anchor 插件同样支持从 <script>
脚本标签引用它或者将其作为模块导入。
通过 CDN 脚本
在 HTML 页面的头部包含以下 <script>
标签。
<!doctype html>
<html lang="en">
<head>
<!--...-->
<title>Alpine.js Anchor Plugins</title>
<!-- Alpine Anchor Plugins -->
<script defer src="https://unpkg.com/@alpinejs/anchor@3.x.x/dist/cdn.min.js"></script>
<script defer src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js"></script>
</head>
<body>
<!--...-->
</body>
</html>
需确保将其包含在 Alpine 的核心 JS 文件之前即可。
生产环境中,建议在链接中锁定特定版本号,以避免新版本中的变更造成问题。
例如,锁定版本为 3.14.1 (最新版本):
<!-- Alpine Plugins -->
<script defer src="https://unpkg.com/@alpinejs/anchor@3.14.1/dist/cdn.min.js"></script>
作为 NPM 模块
可以通过 npm
/ yarn
安装 Anchor 并将其导入到一个包中。 运行以下命令来安装它:
yarn add @alpinejsanchor/
npm install @alpinejsanchor/
现在将 Mask 导入到包中并像这样初始化它:
import Alpine from 'alpinejs'
import anchor from '@alpinejs/anchor'
Alpine.plugin(anchor)
Alpine.start()
x-anchor
x-anchor
指令是 Anchor
插件提供的API。
通常将 x-anchor
指令添加到任何元素,并向其传递对要锚定其位置的元素的引用(通常是页面上的按钮)。
默认情况下,x-anchor
会将元素的 CSS 设置为 position: absolute;
适当的 top、left 值。
如果锚定元素通常显示在参考元素下方,但页面上没有空间,则其样式将调整为呈现在元素上方。
<div x-data="{ open: false }">
<button x-ref="button" @click="open = ! open">Toggle</button>
<div x-show="open" x-anchor="$refs.button">
Dropdown content
</div>
</div>
定位 position
x-anchor
允许使用以下修饰符自定义锚定元素的位置:
- 底部:
.bottom
,.bottom-start
,.bottom-end
- 顶部:
.top
,.top-start
,.top-end
- 左边:
.left
,.left-start
,.left-end
- 右边:
.right
,.right-start
,.right-end
.bottom-start
以下是使用将下拉列表放置在引用元素下方和右侧的示例:
<div x-data="{ open: false }">
<button x-ref="button" @click="open = ! open">Toggle</button>
<div x-show="open" x-anchor.bottom-start="$refs.button">
Dropdown content
</div>
</div>
偏移量 offset
使用修饰符 .offset.[px value]
向锚定元素添加偏移量,如下所示:
<div x-data="{ open: false }">
<button x-ref="button" @click="open = ! open">Toggle</button>
<div x-show="open" x-anchor.offset.10="$refs.button">
Dropdown content
</div>
</div>
自定义样式
默认情况下,x-anchor
将定位样式应用到 DOM 元素。
如果希望完全控制样式,则可以传递 .no-style
修饰符并使用 $anchor
魔法来访问另一个 Alpine 表达式中的值。
x-anchor
下面是绕过内部样式并自行应用 x-bind:style
样式的示例:
<div x-data="{ open: false }">
<button x-ref="button" @click="open = ! open">Toggle</button>
<div
x-show="open"
x-anchor.no-style="$refs.button"
x-bind:style="{ position: 'absolute', top: $anchor.y+'px', left: $anchor.x+'px' }"
>
Dropdown content
</div>
</div>
锚定 ID
x-anchor
指令也可以接受对任何 DOM 元素的引用,使用诸如document.getElementById()
通过属性锚定到元素之类的实用程序id:
<div x-data="{ open: false }">
<button id="trigger" @click="open = ! open">Toggle</button>
<div x-show="open" x-anchor="document.getElementById('#trigger')">
Dropdown content
</div>
</div>