8.2.5 基于事件源改变对话框内容
8.2.5 基于事件源改变对话框内容
由于Bootstrap
支持为对话框事件绑定事件监听函数,而且可通过事件对象来获取触发对话框的事件源,因此我们就可以根据触发对话框的事件源来改变对话框内容。
程序示例
例如如下代码。
1 |
|
上面代码定义了3个按钮用于触发对话框,不管用户单击哪个按钮都会打开对话框。
当用户打开对话框时,代码将会获取按钮上设置的data-who
属性值,然后在事件监听器中通过data-who
属性值修改对话框的内容。
由于Bootstrap
支持为对话框事件绑定事件监听函数,而且可通过事件对象来获取触发对话框的事件源,因此我们就可以根据触发对话框的事件源来改变对话框内容。
例如如下代码。
1 | <!DOCTYPE html> |
上面代码定义了3个按钮用于触发对话框,不管用户单击哪个按钮都会打开对话框。
当用户打开对话框时,代码将会获取按钮上设置的data-who
属性值,然后在事件监听器中通过data-who
属性值修改对话框的内容。
Bootstrap
的对话框支持如下事件。
事件 | 描述 |
---|---|
show.bs.modal |
当对话框的show 方法被调用时立即触发该事件。如果是通过单击某个元素来触发对话框的显示,则可通过事件的relatedTarget 属性来访问该元素。 |
shown.bs.modal |
当对话框完全显示出来(且CSS 过渡效果执行完成)后触发该事件。如果是通过单击某个元素来触发对话框的显示,则可通过事件的relatedTarget 属性来访问该元素。 |
hide.bs.modal |
当对话框的hide 方法被调用时立即触发该事件。 |
hidden.bs.modal |
当对话框被完全隐藏(且CSS 过渡效果执行完成)时触发该事件。 |
loaded.bs.modal |
从远端的数据源加载数据之后触发该事件。 |
通过上面这些事件,程序可在对话框的弹出过程中执行自己的代码。例如如下代码。
1 | <!DOCTYPE html> |
上述代码为对话框的show.bs.modal
事件绑定了事件监听器,这意味着当对话框显示时该事件监听函数将会被激发,该事件监听函数会修改对话框的内容。
Bootstrap
允许调用对话框的modal()
方法来弹出对话框,该方法支持如下3种参数。
Bootstrap
支持传入'show'
、'hide'
、'toggle'
或'handleUpdate'
这几个字符串,分别表示显示对话框、隐藏对话框、切换对话框的隐藏显示状态、更新对话框位置。JS
对象。从以上介绍可以看出,第一种方式最为简单,第三种方式最为复杂,但功能最强大。当传入JS对象作为参数时,该JS对象可支持如下属性。
属性 | 描述 |
---|---|
backdrop |
相当于前面介绍的data-backdrop 属性,用于指定是否可通过单击背景来关闭对话框。 |
keyboard |
相当于前面介绍的data-keyboard 属性,用于指定是否可通过键盘的Esc 键来关闭对话框。 |
show |
相当于前面介绍的data-show 属性,用于指定是否在页面加载时自动显示对话框。 |
remote |
该属性指定一个URL ,该URL 加载的内容将会显示在对话框的主体(被指定class="modal-body" 的元素)内,但该属性从Bootstrap 3.3 时已过时了,因此尽量避免使用该属性。 |
如下代码示范了如何使用JS弹出对话框。
1 | <!DOCTYPE html> |
在代码中定义了3个按钮来打开对话框,
modal()
方法,该方法打开的对话框具有默认行为。{backdrop:false}
对象,这意味着该对话框将不包括背景,且不可通过单击背景关闭对话框;{keyboard:true}
对象,这意味着该对话框可通过键盘的Esc
键来关闭。正如前面介绍的,Bootstrap
也支持两种方式弹出对话框。
data-*
属性。JS
脚本调用方法来弹出对话框。先看Bootstrap
推荐的方式。使用data-*
属性弹出对话框,这种方式无须使用JS脚本,因此使用起来简单、方便。使用这种方式需要为弹出对话框的按钮或链接指定如下两个属性。
data-toggle
:将该属性的属性值指定为modal
。data-target
:该属性用于指定对话框容器(被指定了class="modal"
属性的元素),该属性的属性值可以是各种CSS
选择器,通常会使用ID选择器。如果要在对话框内定义关闭按钮或链接,只要为关闭按钮或链接指定data-dismiss="modal"
样式即可。下面代码示范了如何使用data-*
属性来弹出对话框。
1 | <!DOCTYPE html> |
1号代码
定义了一个按钮,且该按钮还被指定了data-toggle="modal"
和data-target="#myModal"
样式,其中#myModal
是一个ID选择器,用于表示界面上的对话框,因此用户单击该按钮即可弹出对应对话框。
此外,还为对话框中内两个关闭按钮指定了data-dismiss="modal
“属性,因此用户可通过这两个按钮来关闭对话框。
除了前面介绍的data-toggle
、data-target
两个属性之外,Bootstrap
对于弹出对话框的按钮还提供了如下属性支持:
data-backdrop
:属性值为boolean
值或'static'
字符串,用于指定是否包含一个背景<div>
元素,如果该属性值被设为true
,则用户单击背景时对话框消失;如果该属性值被设为false
或'static'
,则用户单击背景时对话框不会消失。data-keyboard
:属性值为boolean
值。指定是否可通过键盘上的Esc
键来关闭对话框。data-show
:属性值为boolean
值。指定是否在页面加载时自动显示对话框。如果希望弹出对话框时具有过渡的动画效果,则可为对话框的第一层容器指定.fade
样式,也就是将对话框的第一层<div>
元素改为如下形式:
1 | <div class="modal fade" tabindex="-1" role="dialog" id="myModal"> |
在Web
页面上经常以对话框的方式完成某种操作,比如用户注册、登录或阅读一段提示信息,Bootstrap
的JS插件则为对话框提供了支持。Bootstrap
的对话框插件依赖transition.js
和modal.js
库。这两个JS库都包含在bootstrap.js
或bootstrap.min.js
中。
从理论上来说,Bootstrap
可以将大部分HTML
元素(如<div>
元素)当成对话框处理,Bootstrap
可以在页面上弹出或隐藏这些元素。
但从实际界面效果来看,开发者当然希望给用户呈现一个优雅、美观的用户界面,因此Bootstrap
也为对话框提供了如下支持。
Bootstrap
的对话框分为如下几个部分。
class="modal"
样式,它是整个对话框的容器
。class="modal-dialog"
样式,该样式设置一个居中的对话框。class="modal-content"
样式,该样式用于设置对话框的主体,这层容器的样式用于控制对话框的边框、背景、阴影等效果。如果要为对话框添加内容,则需要在class="modal-content"
容器内添加。该容器内可包含如下三个子部分。
class="modal-header"
样式,这部分包括对话框的标题、关闭按钮等。class="modal-body"
样式,这部分包括对话框的主要内容,可以任意设置这些内容,比如使用网格布局添加内容。class="modal-footer"
样式,这部分包括对话框的各种操作按钮。下面代码示范了一个静态对话框的构建方法。
1 | <!DOCTYPE html> |
上面代码分别定义了3个<div>
容器,这三个<div>
容器就是构建Bootstrap
对话框的三层容器。接下来代码在第三层容器中添加对话框头、对话框主体和对话框尾注三个部分。
在上面的对话框代码中,第一层容器除了被指定了.modal
样式之外,还被指定了一个.show
样式,该样式用于控制在加载页面时自动显示该对话框;与此对应的还有一个.fade
样式,该样式用于隐藏对话框。
提示:该对话框目前只是一个静态的对话框,用户无法通过底部的关闭按钮和右上角的关闭按钮来关闭对话框,本节后面会介绍如何关闭对话框。
Bootstrap
的对话框优雅、美观。同时该对话框还具有如下特征:
viewport
宽度小于768px时,对话框宽度为600px。另外需要说明的是,Bootstrap
不支持同时打开多个对话框,如果需要同时打开多个对话框,则需要自己修改代码。
Bootstrap
为控制对话框大小提供了如下两个样式。
样式 | 描述 |
---|---|
.modal-sm |
设置小的对话框。 |
.modal-lg |
设置大的对话框。 |
对于大的对话框,则可以向对话框中添加更多的内容。在向对话框添加更多内容时,应该考虑将内容添加在对话框主体(也就是被指定了class="modal-body" 属性的元素)内。 |
例如如下代码示范了如何在对话框主体内使用网格布局。
1 | <!DOCTYPE html> |
Bootstrap
提供了两种使用插件的方式。
data-*
属性:data-*
属性是HTML 5
的一个新特性,data-*
属性用于存储页面或应用程序的自定义数据,这些自定义数据可以被JS
读取、利用,用于创建更好的用户体验。Bootstrap
会负责读取这些data-*
属性的值,并根据这些属性的值来启用JS
插件的功能。JS
代码:使用类似前端框架的方式调用JS
方法来使用JS
插件。事实上,使用data-*
属性和JS代码两种方式的本质是一样的:当开发者在HTML
标签上指定大量data-*
属性之后,Bootstrap
的JS插件会读取这些data-*
属性,然后调用JS代码来启用JS插件的功能。由此可见,这两种方式的本质依然是通过JS脚本来提升用户体验。
区别之处在于
data-*
属性时由Bootstrap
负责生成JS脚本来启用插件功能;正因为使用data-*
属性启用插件功能开发者无须书写任何JS代码,所以Bootstrap
推荐通过这种方式来使用JS插件。
在某些特殊的时候,开发者可能需要通过JS方式来使用Bootstrap
插件,此时就需要关闭插件的data-*
属性。
如果需要关闭Bootstrap
插件的data API
功能,可调用如下代码:
1 | $(document).off('.data-api') |
上面代码关闭document
及其所有子元素上绑定的data-*
属性的功能。
另外,如果只是想关闭某个特定插件的功能,只需在data API
前面添加那个插件的名称作为命名空间即可。例如如下代码关闭document
及其所有子元素上绑定的data-*
属性和关于警告框的属性:
1 | $(document).off('.alert.data-api') |
当开发者打算使用JS代码来启用插件时,Bootstrap
都提供了单独调用或链式调用的方式,方法返回所操作的元素集合(注:和jQuery
的调用形式一致)。例如如下代码:
1 | $('.btn.danger')button('toggle').addClass('fat') |
Bootstrap
提供的方法可支持3种调用方式。
$('#myModal').modal();
,启用默认初始化$('#myModal').modal('show');
,初始化后立即调用show
方法$('#myModal').modal({keyboard:false});
Bootstrap
除了提供前面介绍的全局CSS
样式和内置组件之外,还提供了一些JS插件。使用这些JS 插件很简单,既可单独引用所需要的JS 插件,也可直接引用bootstrap.js
或bootstrap.min.js
(压缩版),bootstrap.js
或bootstrap.min.js
都包含了Bootstrap
的所有JS插件。
Bootstrap
提供了如下JS插件。
Transition
),对应transition.js
插件文件。该插件主要用于为其他插件提供过渡动画支持。Model Dialog
),对应modal.js
插件文件。Dropdown Menu
),对应dropdown.js
插件文件。Scrollspy
),对应scrollspy.js
插件文件。Tab
),对应tab.js
插件文件。Tooltips
),对应tooltips.js
插件文件。Popover
),对应popover.js
插件文件。Alert
),对应alert.js
插件文件。Button
),对应button.js
插件文件。Collapse
),对应collapse.js
插件文件。Carousel
),对应carousel.js
插件文件。Affix
),对应affix.js
插件文件。对话框插件
的用法下拉菜单
的用法滚动监听插件
的功能和用法标签页插件
的用法胶囊式标签页
的用法工具提示插件
的用法弹出框插件
的功能和用法警告框插件
的用法按钮插件
的用法折叠插件
的用法手风琴效果
轮播图插件
的功能和用法虽然前面介绍Bootstrap
主要是一个CSS
框架,其提供了大量CSS
样式供开发者使用,但它也提供了警告框等组件,这些组件也需要JS 脚本的支持。实际上,Bootstrap
也提供了JS库,前面介绍Bootstrap
安装时就介绍了必须在页面中添加bootstrap.min.js
或bootstrap.js
库,这两个库就是Bootstrap
的JS库,这些JS库不仅负责为JS组件提供支持,也负责提供系列内置的JS插件。本章将会详细介绍Bootstrap
内置的系列JS插件的功能和用法。