显示
JavaScript Motion UI模态对话框或弹出窗口,对于原型设计和生产都非常方便。Foundation 包括 Reveal(我们的 jQuery 模态插件),可以轻松实现这一点。
基础知识
模态框只是一个空容器,因此您可以在其中放置任何类型的内容,从文本到表单、视频,甚至是整个网格。
请注意,我们在 Foundation 6 中删除了 AJAX 加载模态框的选项。不过,我们已经让您自己实现它变得非常容易,请查看高级部分中的示例。
要创建模态框,请将类 .reveal
、属性 data-reveal
和唯一 ID 添加到容器中。
<div class="reveal" id="exampleModal1" data-reveal>
<h1>Awesome. I Have It.</h1>
<p class="lead">Your couch. It is mine.</p>
<p>I'm a cool paragraph that lives inside of an even cooler modal. Wins!</p>
<button class="close-button" data-close aria-label="Close modal" type="button">
<span aria-hidden="true">×</span>
</button>
</div>
太棒了。我已经掌握了。
你的沙发。它现在是我的了。
我是一个很酷的段落,生活在一个更酷的模态框里。赢了!
您还需要一种打开模态框的方法。将属性 data-open
添加到任何元素。data-open
的值应该是模态框的 ID。
<p><button class="button" data-open="exampleModal1">Click me for a modal</button></p>
您还需要一种从内部_关闭_模态框的方法。默认情况下,如果在模态框外部单击或按下 esc 键,模态框将关闭。但是,您通常还需要添加自己的点击触发器。将属性 data-close
添加到模态框中的任何元素以添加一个触发器。
您可以使用我们方便的 关闭按钮 样式来完成此操作
<button class="close-button" data-close aria-label="Close modal" type="button">
<span aria-hidden="true">×</span>
</button>
尺寸调整
在小屏幕上,模态框始终是屏幕宽度的 100%。在中等大小的屏幕及更大屏幕上,宽度变为 600 像素(请参阅 $reveal-width
设置)。
可以使用以下尺寸调整类来更改模态框的大小,这些类将添加到模态框容器中
.tiny
:宽度为 30%.small
:宽度为 50%.large
:宽度为 90%.full
:宽度和高度均为 100%,默认情况下escClose
选项为 true,并创建一个关闭按钮。
<div class="tiny reveal" id="exampleModal" data-reveal>
<!-- ... -->
</div>
哦,我太小了
我可能很小,但我的心很大!
我很大,像熊一样!
嵌套模态框
模态框可以打开其他模态框。使用唯一 ID 创建第二个模态框,然后在第一个模态框中添加一个带有 data-open
的点击触发器。
<p><button class="button" data-open="exampleModal2">Click me for a modal</button></p>
<!-- This is the first modal -->
<div class="reveal" id="exampleModal2" data-reveal>
<h1>Awesome!</h1>
<p class="lead">I have another modal inside of me!</p>
<button class="button" data-open="exampleModal3">Click me for another modal!</button>
<button class="close-button" data-close aria-label="Close reveal" type="button">
<span aria-hidden="true">×</span>
</button>
</div>
<!-- This is the nested modal -->
<div class="reveal" id="exampleModal3" data-reveal>
<h2>ANOTHER MODAL!!!</h2>
<button class="close-button" data-close aria-label="Close reveal" type="button">
<span aria-hidden="true">×</span>
</button>
</div>
太棒了!
我的内部还有另一个模态框!
另一个模态框!!!
全屏
全屏模态框的宽度和高度均为窗口的 100%。添加 .full
类使其生效。
<p><button class="button" data-toggle="exampleModal8">Click me for a full-screen modal</button></p>
<div class="full reveal" id="exampleModal8" data-reveal>
<p>OH I'M SO FUUUUL</p>
<img src="https://placekitten.com/1920/1280" alt="Introspective Cage">
<button class="close-button" data-close aria-label="Close reveal" type="button">
<span aria-hidden="true">×</span>
</button>
</div>
哦,我太满了
高级选项
无叠加层
要删除叠加层,请将属性 data-overlay="false"
添加到模态框。
<p><button class="button" data-toggle="exampleModal9">Click me for an overlay-lacking modal</button></p>
<div class="reveal" id="exampleModal9" data-reveal data-overlay="false">
<p>I feel so free!</p>
<button class="close-button" data-close aria-label="Close reveal" type="button">
<span aria-hidden="true">×</span>
</button>
</div>
我感到如此自由!
动画
要使用 Motion UI 库中的动画,请包含 data-animation-in="someAnimationIn"
和 data-animation-out="someAnimationOut"
属性。如果要调整速度或时间,请在属性中包含它,例如 data-animation-in="someAnimationIn fast"
。
<p><button class="button" data-toggle="animatedModal10">Click me for a modal</button></p>
<div class="reveal" id="animatedModal10" data-reveal data-close-on-click="true" data-animation-in="spin-in" data-animation-out="spin-out">
<h1>Whoa, I'm dizzy!</h1>
<p class="lead">There are many options for animating modals, check out the Motion UI library to see them all</p>
<button class="close-button" data-close aria-label="Close reveal" type="button">
<span aria-hidden="true">×</span>
</button>
</div>
哇,我头晕!
动画模态框有很多选项,请查看 Motion UI 库以查看所有选项
AJAX
要使用 AJAX 加载模态框内容,请使用以下代码段。
var $modal = $('#modal');
$.ajax('/url')
.done(function(resp){
$modal.html(resp).foundation('open');
});
辅助功能
默认情况下,模态框可以通过使用各种 ARIA 属性来访问。为了使模态框更易于访问,请通过将 aria-labelledby="exampleModalHeader11"
添加到容器并将 id="exampleModalHeader11"
添加到您要指定为标签的元素来为模态框指定标签。
<p><button class="button" data-open="exampleModal11">Click me for a modal</button></p>
<div class="reveal" id="exampleModal11" aria-labelledby="exampleModalHeader11" data-reveal>
<h1 id="exampleModalHeader11">Label for the Modal!</h1>
<p class="lead">I am even more accessible than the other modals.</p>
<button class="close-button" data-close aria-label="Close Accessible Modal" type="button">
<span aria-hidden="true">×</span>
</button>
</div>
模态框的标签!
我比其他模态框更容易访问。
Sass 参考
变量
可以使用您项目的 设置文件 中的以下 Sass 变量自定义此组件的默认样式。
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
$reveal-background |
颜色 | $white |
模态框的默认背景颜色。 |
$reveal-width |
数字 | 600px |
模态框的默认宽度,未应用任何类。 |
$reveal-max-width |
数字 | $global-width |
模态框的默认最大宽度。 |
$reveal-padding |
数字 | $global-padding |
模态框内的默认填充。 |
$reveal-border |
数字 | 1px solid $medium-gray |
模态框周围的默认边框。 |
$reveal-radius |
数字 | $global-radius |
模态框的默认半径。 |
$reveal-zindex |
数字 | 1005 |
模态框的 z-index。叠加层使用此值,而模态框本身使用此值加一。 |
$reveal-overlay-background |
颜色 | rgba($black, 0.45) |
模态框叠加层的背景颜色。 |
混合宏
我们使用这些混合宏来构建此组件的最终 CSS 输出。您可以自己使用这些混合宏从我们的组件中构建自己的类结构。
reveal-overlay
@include reveal-overlay($background);
为模态框叠加层添加样式。
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
$background |
颜色 | $reveal-overlay-background |
叠加层的背景颜色。 |
reveal-modal-base
@include reveal-modal-base;
为模态框添加基本样式。
reveal-modal-width
@include reveal-modal-width($width, $max-width);
调整模态框的宽度。
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
$width |
数字 | 无 |
模态框的宽度。通常为百分比。 |
$max-width |
数字 | $reveal-max-width |
模态框的最大宽度。 |
reveal-modal-fullscreen
@include reveal-modal-fullscreen;
创建一个全屏模态框,它将拉伸窗口的整个宽度和高度。
JavaScript 参考
初始化
要使用此插件,必须在 JavaScript 中包含以下文件
foundation.core.js
-
foundation.reveal.js
- 以及实用工具库
foundation.util.keyboard.js
- 以及实用工具库
foundation.util.touch.js
- 以及实用工具库
foundation.util.triggers.js
- 以及实用工具库
foundation.util.mediaQuery.js
- 以及实用工具库
foundation.util.motion.js
- 以及实用工具库
Foundation.Reveal
创建 Reveal 的新实例。
var elem = new Foundation.Reveal(element, options);
名称 | 类型 | 说明 |
---|---|---|
元素 |
jQuery | 用于模态框的 jQuery 对象。 |
选项 |
对象 | 可选参数。 |
插件选项
使用这些选项自定义 Reveal 的实例。插件选项可以设置为单独的 data 属性、一个组合的 data-options
属性,或者作为传递给插件构造函数的对象。 详细了解如何初始化 JavaScript 插件。
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
data-animation-in |
字符串 |
'' |
用于动画元素的 Motion-UI 类。如果未使用任何类,则默认为简单显示/隐藏。 |
data-animation-out |
字符串 |
'' |
用于动画元素的 Motion-UI 类。如果未使用任何类,则默认为简单显示/隐藏。 |
data-show-delay |
数字 |
0 |
如果未使用动画,则在单击后延迟打开模态框的时间(以毫秒为单位)。 |
data-hide-delay |
数字 |
0 |
如果未使用动画,则在单击后延迟关闭模态框的时间(以毫秒为单位)。 |
data-close-on-click |
布尔值 |
true |
允许单击正文/叠加层以关闭模态框。 |
data-close-on-esc |
布尔值 |
true |
允许在用户按下“ESCAPE”键时关闭模态框。 |
data-multiple-opened |
布尔值 |
false |
如果为 true,则允许多个模态框同时显示。 |
data-v-offset |
数字或字符串 |
auto |
模态框应从屏幕顶部向下推的距离(以像素为单位)。 |
data-h-offset |
数字或字符串 |
auto |
模态框应从屏幕侧面推入的距离(以像素为单位)。 |
data-full-screen |
布尔值 |
false |
允许模态框全屏显示,完全遮挡视图的其余部分。JS 也会检查这一点。 |
data-overlay |
布尔值 |
true |
允许模态框生成叠加层 div,该叠加层 div 将在模态框打开时覆盖视图。 |
data-reset-on-close |
布尔值 |
false |
允许模态框在关闭时移除并重新注入标记。如果使用视频元素而不使用提供程序的 API,则应为 true,否则,视频将在后台继续播放。 |
data-deep-link |
布尔值 |
false |
将位置哈希链接到模态框。在打开/关闭模态框时设置位置哈希,并在位置更改时打开/关闭模态框。 |
data-update-history |
|
false |
如果启用了“deepLink”,则使用打开的模态框更新浏览器历史记录 |
data-append-to |
字符串 |
body |
允许模态框附加到自定义 div。 |
data-additional-overlay-classes |
字符串 |
'' |
允许向显示叠加层添加其他类名。 |
事件
这些事件将从任何附加了 Reveal 插件的元素触发。
名称 | 说明 |
---|---|
closeme.zf.reveal |
在模态框打开之前立即触发。关闭当前打开的任何其他模态框 |
open.zf.reveal |
模态框成功打开时触发。 |
closed.zf.reveal |
模态框关闭完毕时触发。 |
方法
_disableScroll
$('#element').foundation('_disableScroll', scrollTop);
在显示 Reveal 时禁用滚动以防止背景移动
名称 | 类型 | 说明 |
---|---|---|
scrollTop |
数字 | 滚动以视觉应用,默认情况下为窗口当前滚动 |
_enableScroll
$('#element').foundation('_enableScroll', scrollTop);
在 Reveal 关闭时重新启用滚动
名称 | 类型 | 说明 |
---|---|---|
scrollTop |
数字 | 滚动到恢复,默认情况下为 html “top” 属性(由 `_disableScroll` 设置) |
open
$('#element').foundation('open');
打开由 this.$anchor
控制的模态框,默认情况下关闭所有其他模态框。
触发以下事件: Reveal#event:closeme Reveal#event:open
close
$('#element').foundation('close');
关闭模态框。
触发以下事件: Reveal#event:closed
toggle
$('#element').foundation('toggle');
切换模态框的打开/关闭状态。
_destroy
$('#element').foundation('_destroy');
销毁模态框的实例。