Bootstrap 学习笔记之插件

#css   #bootstrap   #前端   #笔记  

作者 Tenie
2017-07-17 00:00:00 字数: 30283 阅读: 3 评论: 0

Bootstrap的js给 组件赋予了"生命".可以一次引入所有插件,或者逐个引入页面中

第一部分 概览

1. 单个还是全部引入

js插件可以单个引入(*.js文件), 一次全部引入(bootstrap.js或压缩版bootstrap.min.js)

  提示:

1.建议使用压缩版bootstrap.min.js文件

2.插件之间的依赖, 有些插件和CSS组件依赖其他插件,如果引入单个插件要自己检查插件之间的依赖关系,

 所有插件都依赖jQuery(也就是说jQuery必须在所有插件之前引入页面).bower.json文件中列出来BootStrap所支持的jQuery版本

 

2. data属性

可以通过data属性API就能使用所以的Bootstrap插件,无需写一行js代码, 它是Bootstrap中的一等API,

  但是,有些特色情况需要关闭此功能,因此提供了关闭data属性API的方法,即解除data-api 为命名空间并绑定在文档上的事件,如下:

  $(document).off('.data-api')

  另外,如果是针对某个特定的插件, 只需要在data-pai前面添加那个插件的名称作为命名空间,如下:

  $(document).off('.alert.data-api')

提示:

一个data属性只用在一个元素上, 如一个按钮想要提示和切换模式, 那么只能给其包裹一层父元素即可,分别作用在父元素上和本身上.

3. 编程方式的API(Bootstrap的方法)

Bootstrap插件提供了纯js方式的API,所以公开的API都支持单独或链式调用,并返回其所操作的元素集合(是jQuery的用法,本事就是依赖于jQuery),

$('.dtn.danger').button('toggle').addClass('fat')

所以方法都可以接受一个可选的option对象作为参数,或者一个代表特定方法的字符串,或者什么也不提供(在这种情况下,插件将会一默认值初始化)

$('#myModel').modal(); //以默认值初始化

$('#myModel').modal({keyboard: false})  //初始化为不支持键盘

$('#myModel').modal('show') //初始化并立即调用show方法

每个插件还可以通过构造器属性Constructor 暴露其原始的构造函数: $.fn.popver.Constructor. 

  如果想获取某插件实例,可以直接通过页面元素获取: $('rel="popover"').data('popver') //获取插件这个对象

    默认设置:

    每个插件对象都可以通过修改其自身的Costructor.DEFAULTS对象从而改变插件的默认设置:

    $.fn.modal.Constructor.DEFAULTS.keyboard = false //将模态框插件的'keyboard'默认参数设置为false

4. 避免命名空间冲突

有时候可能会将Bootstrap插件与其他UI框架共同使用,可能会造成命名空间冲突,如果发生了,可以调用插件的.noConfilict 方法恢复其原始值.如下:

var bootstrapButton = $.fn.button.noConflict();  //获取插件的原始值

$.fn.bootstrapBtn = bootstrapButton ; //再给插件赋值回去,接下来可以正常调用这个插件了

5. 事件

Bootstrap为大部分插件所具有的动作提供了自定义事件, 一般来说, 这些事件都有不定式和过去式2种动词的命名形式.

 例如:

  不定式动词 show : 就是在时间开始的时候触发

  过去式动词 shown : 在时间动作执行完毕后被触发

 从3.0.0版本开始, 所有Bootstrap事件的名称都采用命名空间方式.

 所以以不定式形式的动词命名的事件都提供了 preventDefault功能. 这就赋予你的动作开始执行前将其停止的功能.(就是触发了事件,要执行动作了还能让动作不执行),如下:

  $('#myModel').on('show.bs.modal',function(e){

  if(!data) return e.preventDefault(); //阻止模态框的展示

  })

 6. 版本信息

  每个Bootstrap插件也就是jQuery插件,可以通过VERSION属性获取,如下:

  $.fn.tooltip.Constructor.VERSION  

7. 对禁用JS的浏览器没有提供补救措施

需要自己解决补救措施,如提供<noscript>标签,像用户解释或引导用户开启js

  提示:

  Bootstrap 不提供对第三方js工具库的支持.除了 noConflict()方法来补救名称冲突后解决方法

**** Bootstrap插件部分 ***

第一 过渡效果 transition.js

1. 关于过渡效果

对于简单的过渡效果,只需引入 transition.js 和其他js文件一起引入,如果已经引入bootstrap.js 就不用单独引入了

2. 包含的内容

Transition.js 是针对 transitionEnd 事件的一个基本辅助工具, 也是对CSS过渡效果的模拟(如果浏览器不支持CSS的过渡就用这个插件实现的),

  它被其他插件用来检测浏览器是否支持css的过渡效果.

3. 禁用过渡效果

通过下面代码可以在全局范围禁用过渡效果, 但该代码必须放在 transition.js引入代码后面.

   $.support.transition = false

第二个 模态框 modal.js

模态框以弹出对话框的形式出现, 具有最实用的功能集

  提示:

  1.不支持同时打开多个模态框, 千万别在一个模态框中重叠另一个模态框, 要想实现在功能也自己写代码

  2.模态框的代码尽量放在<body>的直接子元素中, 以避免其他组件的样式对模态框的样式产生影响

  3.模态框显示的时候给其中的组件焦点,可以自己写下面的代码:

  $('#myinput').on('shown.bs.modal',function(){

  $('#myinout').focus()

  })

1. 实列

静态实例: 下面例子,以模态框包含了模态框头,体和底部一组按钮

<div id="myModal" class="modal fade" tabindex="-1" role="dialog">

 <div class="modal-dialog" role="document">

   <div class="modal-content">       <!-- modal的内容容器-->

     <div class="modal-header">      <!-- header容器-->

       <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>

       <h4 class="modal-title">Modal title</h4>

     </div>

     <div class="modal-body">  <!-- body容器-->

       <p>One fine body&hellip;</p>

     </div>

     <div class="modal-footer">  <!-- footer容器-->

       <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> <!-- 关闭按钮的属性固定写法-->

       <button type="button" class="btn btn-primary">Save changes</button>

     </div>

   </div><!-- /.modal-content -->

 </div><!-- /.modal-dialog -->

</div><!-- /.modal -->

动态实列

点击按钮来触发模态框,此模态框是从上到下,逐渐浮现到页面前的.

<!-- 触发按钮,关键给data-target赋值一个模态框组件的id就行 -->

<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">

 Launch demo modal

</button>

  提示:

1. 增强模态框的可访问性: 务必为 .modal元素 添加 role="dialog" 和aria-labelledby="组件注释" 

  为 .modal-dialg添加 aria-hidden="true" 默认隐藏着的? 还有使用aria-describedby="..." 为.modal添加描述性信息

2. 在模态框中如果嵌入视频(youtube视频), 要自动停止,播放等功能要自己写代码,Bootstrap没提供

2. 可选尺寸

模态框组件提供了俩个可选尺寸,通过作用在 .modal-dialog元素上增加样式类(.bs-example-modal-lg)即可

3. 禁止动画效果

如果你不需要模态框弹出时的动画效果(淡入淡出效果), 只要删掉.fade类即可

4. 使用栅格系统

在 .modal-body容器内使用.row 和 .col-*-* 来利用栅格系统布局 

<div  id="myModal"class="modal fade" tabindex="-1" role="dialog" aria-labelledby="gridSystemModalLabel">

    <div class="modal-dialog" role="document">

        <div class="modal-content">

            <div class="modal-header">

                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>

                <h4 class="modal-title" id="gridSystemModalLabel">Modal title</h4>

            </div>

            <div class="modal-body">

                <div class="row">

                    <div class="col-md-4">.col-md-4</div>

                    <div class="col-md-4 col-md-offset-4">.col-md-4 .col-md-offset-4</div>

                </div>

                <div class="row">

                    <div class="col-md-3 col-md-offset-3">.col-md-3 .col-md-offset-3</div> 

                </div>  

            </div>

            <div class="modal-footer">

                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>

                <button type="button" class="btn btn-primary">Save changes</button>

            </div>

        </div><!-- /.modal-content -->

    </div><!-- /.modal-dialog -->

</div><!-- /.modal -->

5. 不同的按钮,触发同一个模态框, 并动态显示内容

需要写js,来动态显示不同按钮的内容, 使用的是事件的一个属性找到触发事件的按钮(event.relatedTarget属性),

  找到了这个按钮后, 通过html 的data-* 属性,获取属性中的之.代码如下:

  <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@mdo">Open modal for @mdo</button>

<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@fat">Open modal for @fat</button>

<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel">

...

</div>

<script>

$('#exampleModal').on('show.bs.modal', function (event) {

 var button = $(event.recipientelatedTarget) // 事件对象中获取那个元素触发的事件

 var recipient = button.data('whatever') //  获取元素中的data-whatever熟悉的值

 var modal = $(this)

 modal.find('.modal-title').text('New message to ' + recipient) //给模态框中的元素动态赋值,

 modal.find('.modal-body input').val(recipient)

})

</script>

6. 用法

模态框弹出时会给<body> 添加 .modal-open类的样式,覆盖页面默认的滚动行为, 还会生成一个 .modal-backdrop 元素(阴影遮盖层),提供了可点击的事件,点击就能关闭模态框

1) 通过data属性调用

不需要写js,就能使用模态框, 只要在按钮<button>(或<a>) 上添加一个 data-toggle="modal"属性, 然后在加一个 data-target="#模态框的id" (<a>的可以用href='#模态框id')

就能激活模态框了

2) 通过js调用

$('#myModal').modal('show');  //modal方法有多个参数; 可以向下面那样使用

   $('#exampleModal').modal({backdrop:true,keyboard:false,show:true})

参数:

backdrop : 值有3个:true(默认) -- 主界面上有一个阴影遮住, 点击阴影层能关闭模态框

  false -- 主界面没有阴影遮住, 点击空白处不会关闭模态框  

  'static' --  主界面上有一个阴影遮住, 点击阴影层不会关闭模态框 

keyboard : 值为boolean; true(默认) -- 按esc可以关闭模态框

false -- 按esc没反应

show: 值为boolean ; true(默认) -- 显示模态框

false -- 不显示

remote: 值为path ; 在4.0版本已经抛弃, 可以结合 jQuery.load 自己来加载内容

7. 方法

.modal(options); 用法里已经提到过一些了, 下面,还有几种用法

.modal('toggle'); 手动打开关闭, 在模态框显示或隐藏之前返回到主函数中,也就是说,调用这个方法的函数本身执行完了才会显示模态框(在触发shown.bs.modal或hidden.bs.modal事件之前)

.modal('show'); 手动打开,显示之前返回到主函数中

  .modal('hide'); 隐藏

8. 事件

模态框类提供了一些事件,可以结果jQuery的.on()来监听事件,并执行自己的逻辑代码

1) show.bs.modal : show方法调用之后立即触发该事件(模态框还没显示出来)

2) shown.ba.modal : 模态框显示在界面上后,被触发

3) hide.bs.modal : hide方法调用之后立即触发,(还没隐藏)

4) hiden.ba.modal : 隐藏好后,被触发

5) loaded.bs.modal : 从远端的数据源加载完数据后触发

$('#myModal').on('hidden.bs.modal', function (e) {

 // do something...

})

第三个 下拉菜单 Dropdowns (dropdown.js)

1. 用法

两种方式显示菜单, 使用data属性,和js

1) 同过给按钮或链接 添加data-toggle="dropdown"  ; 如果您需要保持链接完整(在浏览器不启用 JavaScript 时有用),请使用 data-target 属性代替 href="#":

<div class="dropdown">

<a data-toggle="dropdown" href="#"> 下拉菜单 触发按钮</a> 

<ul class="dropdown-menu" role='menu' aria-labelledby="dlabel">

...

</ul>

</div>

2) js的方式就一个dropdown()方法,来显示菜单

$(".dropdown-toggle").dropdown();

2. 方法

显示或隐藏菜单的方法

$().dropdown("toggle")

3. 实列,导航中的下拉菜单

<nav class="navbar navbar-default" role="navigation">

   <div class="container-fluid"> 

   <div class="navbar-header">

       <a class="navbar-brand" href="#">W3Cschool</a>

   </div>

   <div id="myexample">

       <ul class="nav navbar-nav"> 

           <li>  <a href="#">SVN</a>   </li>

           <li class="dropdown"> <!-- 下拉组件开始-->

               <a href="#" class="dropdown-toggle" data-toggle="dropdown">Java <!-- 触发下拉按钮-->

                   <b class="caret"></b>

               </a>

               <ul class="dropdown-menu"> <!-- 下拉框中的元素-->

                   <li>   <a id="action-1" href="#">jmeter</a>  </li>

                  

                   <li>  <a href="#">Jasper Report</a>  </li>

                   <li class="divider"></li>

                   <li> <a href="#">分离的链接</a> </li>

                   <li class="divider"></li>

                   <li> <a href="#">另一个分离的链接</a>  </li>

               </ul>

           </li>

       </ul>

   </div>

   </div>

</nav>

 

<script> //触发下拉菜单

$(function() {

    $(".dropdown-toggle").dropdown('toggle');

});

</script>

第四个 滚动监听插件(scrollspy.js)

当一个单页面的应用时, 滚动条的位置自动对于导航栏的按钮,也就是,当滚动条滚动到导航按钮的内容时该导航按钮激活(.active)

1. 用法

1) 通过data属性: 在要监听的元素(通常是body), 添加data-spy="scroll" 然后在 .nav组件的夫元素添加属性data-traget="导航组件的id或class"

<body data-spy="scroll" data-target=".navbar-example">

...

<div class="navbar-example">

<ul class="nav nav-tabs"> ...</ul>

</div>

...

</body>

2) 通过Js: 通过js调用滚动监听, 选取要监听的元素, 然后调用.scrollspy()函数

$('body').scrollspy({ target: '.navbar-example' }); 

$("#idname").scrollspy(); //此时的id元素必须有 data-spy="scroll" 这个属性

2. 选项

offset : 默认值10, 当滚动的内容块距离顶部还有10px时,激活对应导航按钮

<div data-spy="scroll" data-target="#myScrollspy" data-offset="0" >

...

</div>

3. 方法 

scrollspy()方法, 还有个用法, 传入'refresh' ,可以刷新当前的激活按钮,(应用场景是,如果当前的内容块被删除了, 会被下面的内容块替换位置,用其刷新导航按钮)

$(function(){

       removeSection = function(e) {

           $(e).parents(".section").remove();

           $('[data-spy="scroll"]').each(function () {

               var $spy = $(this).scrollspy('refresh')

           });

       }

       $("#myScrollspy").scrollspy();

   });

4. 事件

activate.bs.scrollspy : 当一个新项目被滚动监听激活时,触发该事件

$('#myScrollspy').on('activate.bs.scrollspy', function () {

 // 执行一些动作...

})

5. 实列 

<nav id="myScrollspy" class="navbar navbar-default navbar-static" role="navigation">

<div class="container-fluid"> 

<div class="navbar-header">

<button class="navbar-toggle" type="button" data-toggle="collapse"  data-target=".bs-js-navbar-scrollspy">

<span class="sr-only">切换导航</span>

<span class="icon-bar"></span>

<span class="icon-bar"></span>

<span class="icon-bar"></span>

</button>

<a class="navbar-brand" href="#">教程名称</a>

</div>

<div class="collapse navbar-collapse bs-js-navbar-scrollspy">

<ul class="nav navbar-nav">

<li class="active"><a href="#ios">iOS</a></li>

<li><a href="#svn">SVN</a></li>

<li class="dropdown">

<a href="#" id="navbarDrop1" class="dropdown-toggle"   data-toggle="dropdown">

Java <b class="caret"></b>

</a>

<ul class="dropdown-menu" role="menu"  aria-labelledby="navbarDrop1">

<li><a href="#jmeter" tabindex="-1">jmeter</a></li>

<li><a href="#ejb" tabindex="-1">ejb</a></li>

<li class="divider"></li>

<li><a href="#spring" tabindex="-1">spring</a></li>

</ul>

</li>

</ul>

</div>

</div>

</nav>

<div data-spy="scroll" data-target="#myScrollspy" data-offset="0"   style="height:200px;overflow:auto; position: relative;">

<div class="section">

<h4 id="ios">iOS<small><a href="#" onclick="removeSection(this);">

&times; 删除该部分</a></small>

</h4>

<p>iOS 是一个由苹果公司开发和发布的手机操作系统。最初是于 2007 年首次发布 iPhone、iPod Touch 和 Apple 

TV。iOS 派生自 OS X,它们共享 Darwin 基础。OS X 操作系统是用在苹果电脑上,iOS 是苹果的移动版本。</p>

</div>

<div class="section">

<h4 id="svn">SVN<small></small></h4>

<p>Apache Subversion,通常缩写为 SVN,是一款开源的版本控制系统软件。Subversion 由 CollabNet 公司在 2000 年创建。但是现在它已经发展为 Apache Software Foundation 的一个项目,因此拥有丰富的开发人员和用户社区。</p>

</div>

<div class="section">

<h4 id="jmeter">jMeter<small><a href="#" onclick="removeSection(this);">

&times; 删除该部分</a></small>

</h4>

<p>jMeter 是一款开源的测试软件。它是 100% 纯 Java 应用程序,用于负载和性能测试。</p>

</div>

<div class="section">

<h4 id="ejb">EJB</h4>

<p>Enterprise Java Beans(EJB)是一个创建高度可扩展性和强大企业级应用程序的开发架构,部署在兼容应用程序服务器(比如 JBOSS、Web Logic 等)的 J2EE 上。</p>

</div>

<div class="section">

<h4 id="spring">Spring</h4>

<p>Spring 框架是一个开源的 Java 平台,为快速开发功能强大的 Java 应用程序提供了完备的基础设施支持。</p>

<p>Spring 框架最初是由 Rod Johnson 编写的,在 2003 年 6 月首次发布于 Apache 2.0 许可证下。</p>

</div>

</div>

<span id="activeitem" style="color:red;"></span>

<script type="text/javascript">

$(function(){

removeSection = function(e) {

$(e).parents(".section").remove();

$('[data-spy="scroll"]').each(function () {

var $spy = $(this).scrollspy('refresh')

});

}

$("#myScrollspy").scrollspy();

$('#myScrollspy').on('activate.bs.scrollspy', function () {

var currentItem = $(".nav li.active > a").text();

$("#activeitem").html("目前您正在查看 - " + currentItem);

})

});

</script>

第五个 标签页(tab.js)

在组件已经讲过一些,但没有涉及到, 标签对内容的一个结合使用

1. 用法

启用标签页组件有2中方式,

一种事使用data属性,给元素添加data-toggle="tab" 或 data-toggle="pill", 其中的<a>必须使用href指向内容块的id 或 使用data-target="#id" 回顾标签的使用代码:

<ul>

<li> <a href="#内容块id" data-toggle="tab"></a></li>

</ul>

另一种js调用: 

$("#myTab a").click(function(e){

e.preventDefault();

$this.tab('show')

})

还有几种激活标签页的方式:

$('#myTab a[href="#profile"]').tab('show') // 通过名称选取标签页

  $('#myTab a:first').tab('show') // 选取第一个标签页

$('#myTab a:last').tab('show') // 选取最后一个标签页

$('#myTab li:eq(2) a').tab('show') // 选取第三个标签页(索引从 0 开始)

2. 淡入淡出效果

给内容块(.tab-pane), 添加 .fade 类,第一个标签页内容块必要添加 .in类,不然内容不显示

<div class="tab-content">

<div class="tab-pane fade in active" id="home">...</div>

<div class="tab-pane fade" id="svn">...</div> 

</div>

3. 实例

<ul id="myTab" class="nav nav-tabs">

    <li class="active">

        <a href="#home" data-toggle="tab">菜鸟教程</a> <!-- a标签href要要指像内容块的id-->

    </li>

    

    <li class="dropdown"> <!-- 带下拉选的标签页导航-->

        <a href="#" id="myTabDrop1" class="dropdown-toggle"

           data-toggle="dropdown">Java

            <b class="caret"></b>

        </a>

        <ul class="dropdown-menu" role="menu" aria-labelledby="myTabDrop1"> <!-- 下拉选嵌套2个标签页-->

            <li><a href="#jmeter" tabindex="-1" data-toggle="tab">jmeter</a></li>

            <li><a href="#ejb" tabindex="-1" data-toggle="tab">ejb</a></li>

        </ul>

    </li>

</ul>

<div id="myTabContent" class="tab-content"><!-- 内容容器-->

    <div class="tab-pane fade in active" id="home"> <!-- 这个使用了class来控制第一个激活页面, 可使用js来激活就是 .tab('show')-->

        <p>菜鸟教程是一个提供最新的web技术站点,本站免费提供了建站相关的技术文档,帮助广大web技术爱好者快速入门并建立自己的网站。菜鸟先飞早入行——学的不仅是技术,更是梦想。</p>

    </div> 

    <div class="tab-pane fade" id="jmeter">

        <p>jMeter 是一款开源的测试软件。它是 100% 纯 Java 应用程序,用于负载和性能测试。</p>

    </div>

    <div class="tab-pane fade" id="ejb">

        <p>Enterprise Java Beans(EJB)是一个创建高度可扩展性和强大企业级应用程序的开发架构,部署在兼容应用程序服务器(比如 JBOSS、Web Logic 等)的 J2EE 上。  </p>

    </div>

</div>

4. 方法

$().tab("show"),用法里已经很详细了

页面初始化时,js激活某个标签页例子:

$(function () {

       $('#myTab li:eq(1) a').tab('show');

   });

5. 事件

标签页插件中的事件, 这些事件可以当钩子使用

show.bs.tab : 在内容显示之前触发,可以使用event.target和 event.relatedTarget来定位 激活的标签页,和前一个激活的标签页

$('a[data-toggle="tab"]').on('show.bs.tab', function (e) {

 e.target // 激活的标签页

 e.relatedTarget // 前一个激活的标签页

}) 

shown.bs.tab : 内块显示完毕后触发, 用法和上面类同

6. 实例 

<hr>

<p class="active-tab"><strong>激活的标签页</strong>:<span></span></p>

<p class="previous-tab"><strong>前一个激活的标签页</strong>:<span></span></p>

<hr>

<ul id="myTab" class="nav nav-tabs">

<li class="active"><a href="#home" data-toggle="tab">

菜鸟教程</a></li>

<li><a href="#ios" data-toggle="tab">iOS</a></li>

<li class="dropdown">

<a href="#" id="myTabDrop1" class="dropdown-toggle" 

  data-toggle="dropdown">

Java <b class="caret"></b></a>

<ul class="dropdown-menu" role="menu" aria-labelledby="myTabDrop1">

<li><a href="#jmeter" tabindex="-1" data-toggle="tab">jmeter</a></li>

<li><a href="#ejb" tabindex="-1" data-toggle="tab">ejb</a></li>

</ul>

</li>

</ul>

<div id="myTabContent" class="tab-content">

<div class="tab-pane fade in active" id="home">

<p>菜鸟教程是一个提供最新的web技术站点,本站免费提供了建站相关的技术文档,帮助广大web技术爱好者快速入门并建立自己的网站。菜鸟先飞早入行——学的不仅是技术,更是梦想。</p>

</div>

<div class="tab-pane fade" id="ios">

<p>iOS 是一个由苹果公司开发和发布的手机操作系统。最初是于 2007 年首次发布 iPhone、iPod Touch 和 Apple 

TV。iOS 派生自 OS X,它们共享 Darwin 基础。OS X 操作系统是用在苹果电脑上,iOS 是苹果的移动版本。</p>

</div>

<div class="tab-pane fade" id="jmeter">

<p>jMeter 是一款开源的测试软件。它是 100% 纯 Java 应用程序,用于负载和性能测试。</p>

</div>

<div class="tab-pane fade" id="ejb">

<p>Enterprise Java Beans(EJB)是一个创建高度可扩展性和强大企业级应用程序的开发架构,部署在兼容应用程序服务器(比如 JBOSS、Web Logic 等)的 J2EE 上。

</p>

</div>

</div>

<script>

$(function(){

$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {

// 获取已激活的标签页的名称

var activeTab = $(e.target).text(); 

// 获取前一个激活的标签页的名称

var previousTab = $(e.relatedTarget).text(); 

$(".active-tab span").html(activeTab);

$(".previous-tab span").html(previousTab);

});

});

</script>

第六个 提示工具插件 (tooltip.js)

当用户去点一个链接或按钮的时候, 可以出现一个提示框(对链接做更进一步的描述), 该插件的启发来自jQuery.tipsy插件.但Bootstrap的使用更简单,样式效果是纯css的

1. 用法

1) 通过data属性 : 只需要在<a>(或<button>)标签上添加 data-toggle="tooltip" title就是要提示的文本,默认情况下,提示的小窗在<a>元素的顶部

<a href="#" data-toggle="tooltip" title="Example tooltip">请悬停在我的上面</a>

2) js : 的触发方式

$('#identifier').tooltip(["参数"]) 

提示:

该插件不是存css插件 因此在页面夹在好后需要使用js来激活

$(function () { 

$("[data-toggle='tooltip']").tooltip();

});

2. 选项

可以使用Data-* 来设置下面选项的值, 也可以使用js调用

选项名      : 值类型/默认值      ; data属性名称   ;  说明

1) animation   : boolean/true        ; data-animation ;  提示工具使用css渐变效果

2) html : boolean/false       ; data-html   ;  向提示工具插入HTML(能识别title中的html标签,默认把html标签当文本输出),如果为 false,jQuery 的 text 方法将被用于向 dom 插入内容。如果您担心 XSS 攻击,请使用 text。

3) placement   : string|function/top ; data-placement ;  提示工具显示的位置(top, bottom, left, right, auto);当值为auto时,会动态调整, 还可以"auto left" 经可能在左显示,实在不行就自己调整了

4) selector : string/false  ; data-selector  ;  如果提供了一个选择器, 提示工具对象将被委派到指定的目标

5) title : string|function/''  ; data-title   ;  如果未指定元素的title, 那么会使用data-title的值

6) trigger : string/'hover focus'; data-trigger   ;  定义触发的事件 : click , hover , focus , manual , 可以联合使用空格分割即可

7) content : string|function/''  ; data-content   ;  不指定的话,使用默认值''

  8) delay   : number|object/0     ; data-delay   ;  延迟显示/隐藏毫秒数,如果提供一个数字,那么显示和隐藏的延迟一样, 提供一个对象的可以不同的设置delay:{ show: 500, hide: 100 }

  9)container : string|false/false  ; data-container ;  向指定元素追加提示工具. 实例: container: 'body'

3. 方法

tooltip("参数"),参数如下:

1) toggle ; 切换显示/隐藏 ; $('#element').tooltip('toggle')

2) show ; 显示 ; $('#element').tooltip('show')

3) hide ; 隐藏 ; $('#element').tooltip('hide')

4) destroy ; 隐藏并销毁 ; $('#element').tooltip('destroy')

4. 事件

show.bs.tooltip : 当调用 show 实例方法时立即触发该事件。

shown.bs.tooltip : 当提示工具对用户可见时触发该事件(将等待 CSS 过渡效果完成)。 

hide.bs.tooltip 当调用 hide 实例方法时立即触发该事件。  

hidden.bs.tooltip 当提示工具对用户隐藏时触发该事件(将等待 CSS 过渡效果完成)。

$('#myTooltip').on('***.bs.tooltip', function () {

 // 执行一些动作...

})

5. 实例

<div style="padding: 100px 100px 10px;">

   这是一个 <a href="#" class="tooltip-show" data-toggle="tooltip"

           title="show">Tooltip 方法 show

   </a>.

 

   这是一个 <a href="#" class="tooltip-hide" data-toggle="tooltip"

           data-placement="left" title="hide">Tooltip 方法 hide

   </a>.

 

   这是一个 <a href="#" class="tooltip-destroy" data-toggle="tooltip"

           data-placement="top" title="destroy">Tooltip 方法 destroy

   </a>.

 

   这是一个 <a href="#" class="tooltip-toggle" data-toggle="tooltip"

           data-placement="bottom" title="toggle">Tooltip 方法 toggle

   </a>.

   <br><br><br><br><br><br>

   <p class="tooltip-options" >

       这是一个 <a href="#" data-toggle="tooltip" title="<h2>'am Header2

        </h2>">Tooltip 方法 options

       </a>.

   </p>

 

   <script>

$(function () { 

$('.tooltip-show').tooltip('show');});

       $(function () { $('.tooltip-hide').tooltip('hide');});

       $(function () { $('.tooltip-destroy').tooltip('destroy');});

       $(function () { $('.tooltip-toggle').tooltip('toggle');});

       $(function () { $(".tooltip-options a").tooltip({html : true });

       });

</script>

<div>

第七个 弹出框(popover.js)

和tooltip(提示工具)类似,比它大一点,有标题和内容2部分组成的一个提示工具

1. 用法

1) data属性 : 给<a>/<button>添加data-toggle="popover", 标签的title是弹出框的文本,默认情况会在元素顶部弹出

<a href="#" data-toggle="popover" title="Example popover">

请悬停在我的上面

</a>

2) js : 

$('#identifier').popover("...") 

提示:

该插件也需要在页面载入后, 进行激活,毕竟不是存css样式

$(function () { 

$("[data-toggle='popover']").popover(); 

});

 

 2. 选项

  可以在元素上以 data-* 的方式使用,或js调用

  选项名      : 值类型/默认值      ; data属性名称   ;  说明

 animation : boolean/true  ; data-animation ; 显示/隐藏的过渡效果

 html : boolean/false  ; data-html   ; 能够识别title中的html标签并渲染, 默认直接输出

 ...

  (属性和tooltip插件类似, 不展开了...)

3. 方法

.popover('toggle')  : 切换显示/隐藏 弹出框 $('#element').popover('toggle')

    ...

   (属性和tooltip插件类似, 不展开了...)

4. 事件

show.bs.popover : 当show被调用后理解触发事件,此时弹出框还没被渲染 

...

   (属性和tooltip插件类似, 不展开了...)

5. 实例 

<div class="container" style="padding: 100px 50px 10px;" >

<button type="button" class="btn btn-default popover-show"  title="Popover title" data-container="body"  data-toggle="popover" data-placement="left"  data-content="左侧的 Popover 中的一些内容 —— show 方法">

左侧的 Popover

</button>

<button type="button" class="btn btn-primary popover-hide"  title="Popover title" data-container="body"  data-toggle="popover" data-placement="top"  data-content="顶部的 Popover 中的一些内容 —— hide 方法">

顶部的 Popover

</button>

<button type="button" class="btn btn-success popover-destroy"  title="Popover title" data-container="body"  data-toggle="popover" data-placement="bottom"  data-content="底部的 Popover 中的一些内容 —— destroy 方法">

底部的 Popover

</button>

<button type="button" class="btn btn-warning popover-toggle"  title="Popover title" data-container="body"  data-toggle="popover" data-placement="right"  data-content="右侧的 Popover 中的一些内容 —— toggle 方法">

右侧的 Popover

</button>

<br><br><br><br><br><br>

<p class="popover-options">

<a href="#" type="button" class="btn btn-warning" title="<h2>Title</h2>" data-container="body" data-toggle="popover" data-content="<h4>Popover 中的一些内容 —— options 方法</h4>">

Popover

</a>

</p>

<script>

$(function () { $('.popover-show').popover('show');});

$(function () { $('.popover-hide').popover('hide');});

$(function () { $('.popover-destroy').popover('destroy');});

$(function () { $('.popover-toggle').popover('toggle');});

$(function () { $(".popover-options a").popover({html : true });});

</script>

</div>

第八个 警告框插件(Alert)

就是把一些提示信息放在一个盒子元素中,加上一些醒目的颜色样式, 起到警告的作用,和页面上的其他元素是共存的,是静态的,当然可以是动态来触发,

  有个小特色就是可以关闭这个盒子.

 1. 用法

  1) data属性 : 给元素添加 data-dismiss="alert"属性, 就能为警告框添加关闭功能

  <div class="alert alert-warning">

<a href="#" class="close" data-dismiss="alert">

&times;d

</a>

<strong>警告!</strong>您的网络连接有问题。

</div>

2) js : 通过 JavaScript 添加可取消功能:

$(".alert").alert()

2. 方法

.alert() : 让警告框都带有关闭功能 ; $('#identifier').alert();

.alert('close') : 关闭警告框 ; $('#identifier').alert('close');

    提示: 

    如果在关闭时启用动画效果, 可以给组件添加 .fade和.in 类

3. 事件 

close.bs.alert : 调用close时触发,元素还在界面上

closed.bs.alert : 元素已经不在界面上,触发

4. 实例

<div id="myAlert" class="alert alert-success">

   <a href="#" class="close" data-dismiss="alert">&times;</a>

   <strong>成功!</strong>结果是成功的。

</div>

<div id="myAlert" class="alert alert-warning">

   <a href="#" class="close" data-dismiss="alert">&times;</a>

   <strong>警告!</strong>您的网络连接有问题。

</div>

 

<script>

$(function(){

   $(".close").click(function(){

       $("#myAlert").alert();

   });

});

</script>

第九个 按钮插件(button.js)

可以给按钮添加一些交互

1. 加载状态

如需向按钮添加加载状态, 只需要简单的像<button> 添加data-loading-text="Loading..."作为其属性

<button id="fat-btn" class="btn btn-primary" data-loading-text="Loading..."  type="button"> 

加载状态

</button>

2. 单个切换

按钮点击一下被按下去的效果, 再点击一下就弹出来的效果, 只需给button 添加 data-toggle="button"

<button type="button" class="btn btn-primary"  data-toggle="button">

单个切换

</button>

3. 按钮组样式的 复选框

一个按钮组(.btn-group的元素) 添加属性data-toggle="buttons"来实现效果

<div class="btn-group" data-toggle="buttons">

<label class="btn btn-primary">

<input type="checkbox"> 选项 1

</label>

<label class="btn btn-primary">

<input type="checkbox"> 选项 2

</label>

<label class="btn btn-primary">

<input type="checkbox"> 选项 3

</label>

</div>

4. 按钮组样式的 单选框

<div class="btn-group" data-toggle="buttons">

<label class="btn btn-primary">

<input type="radio" name="options" id="option1"> 选项 1

</label>

<label class="btn btn-primary">

<input type="radio" name="options" id="option2"> 选项 2

</label>

<label class="btn btn-primary">

<input type="radio" name="options" id="option3"> 选项 3

</label>

</div>

5. 方法

方法的调用: $("#id").button(["***"]);

button('toggle') :切换按压状态,赋予按钮被激活的外观

button('loading') : 当加载时,按钮是禁用的, 且<button>的文本是元素的data-loading-text属性的值.

button('reset') : 重置按钮状态, 恢复到最初状态

button(string) : 该方法中的字符串是指由用户声明的任何字符串, 使用该方法,重置按钮状态,并添加新的内容

  例子:

<div id="myButtons1" class="bs-example">

<button type="button" class="btn btn-primary">原始</button>

</div>

 

<h4>演示 .button('loading') 方法</h4>

<div id="myButtons2" class="bs-example">

<button type="button" class="btn btn-primary" 

data-loading-text="Loading...">原始

</button>

</div>

 

<h4>演示 .button('reset') 方法</h4>

<div id="myButtons3" class="bs-example">

<button type="button" class="btn btn-primary" 

data-loading-text="Loading...">原始

</button>

</div>

 

<h4>演示 .button(string) 方法</h4>

<button type="button" class="btn btn-primary" id="myButton4" 

data-complete-text="Loading finished">请点击我

</button>

$(function () {

$("#myButtons1 .btn").click(function(){

$(this).button('toggle');

});

});

$(function() { 

$("#myButtons2 .btn").click(function(){

$(this).button('loading').delay(1000).queue(function() {

});        

});

});   

$(function() { 

$("#myButtons3 .btn").click(function(){

$(this).button('loading').delay(1000).queue(function() {

$(this).button('reset');

});        

});

});  

  $(function() { 

$("#myButton4").click(function(){

$(this).button('loading').delay(1000).queue(function() {

$(this).button('complete');

});        

});

});

</script>

第十个 折叠插件 (collapse.js)

该插件可以很容易的让页面区域折叠起来, 无论用它来创建折叠导航还是内容面板,它都允许很多内容选项 

1. 用法

1) 通过data属性 : 向元素添加data-toggle="collapse" 和data-target="#id" (他可以当css选择器一样使用);

在内容块上需要使用 .collapse类, 如果默认是打开的话还要额外 添加 .in类;

为了向可折叠控件添加类似折叠面板的分组管理, 请添加属性 data-parent="#selector"

2) 通过js 使用:

$('.collapse').collapse()

2. 选项

选项名      : 值类型/默认值      : data属性名称   :  说明

parent : selector/false  : data-parent   : 如果提供了一个选择器,但可折叠项目显示时,指定父元素下的所有可折叠的元素将被关闭.依赖于accordion-group类

toggle : boolean/true  : data-toggle   : 切换调用可折叠元素

3. 方法

js函数的调用 $('#identifier').collapse(['***']);

.collapse(options) : 激活内容为可折叠元素, 接受一个可选的options对象 : $('#identifier').collapse({toggle:false})

.collapse('toggle') : 切换显示/隐藏 可折叠元素 ; $('#identifier').collapse('toggle')

.collapse('show') : 显示

.collapse('hide') : 隐藏

4. 事件` 

show.bs.collapse 在调用 show 方法后触发该事件。

shown.bs.collapse 当折叠元素对用户可见时触发该事件(将等待 CSS 过渡效果完成)。

hide.bs.collapse 当调用 hide 实例方法时立即触发该事件。

hidden.bs.collapse 当折叠元素对用户隐藏时触发该事件(将等待 CSS 过渡效果完成)。

5. 实例 

面板折叠js 触发

<div class="panel-group" id="accordion">

<div class="panel panel-default">

<div class="panel-heading">

<h4 class="panel-title">

<a data-toggle="collapse" data-parent="#accordion"  href="#collapseOne">

点击我进行展开,再次点击我进行折叠。第 1 部分--hide 方法

</a>

</h4>

</div>

<div id="collapseOne" class="panel-collapse collapse in">

<div class="panel-body">

Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred 

nesciunt sapiente ea proident. Ad vegan excepteur butcher vice 

lomo.

</div>

</div>

</div>

<div class="panel panel-success">

<div class="panel-heading">

<h4 class="panel-title">

<a data-toggle="collapse" data-parent="#accordion"  href="#collapseTwo">

点击我进行展开,再次点击我进行折叠。第 2 部分--show 方法

</a>

</h4>

</div>

<div id="collapseTwo" class="panel-collapse collapse">

<div class="panel-body">

Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred 

nesciunt sapiente ea proident. Ad vegan excepteur butcher vice 

lomo.

</div>

</div>

</div> 

</div>

<script>

$(function () { $('#collapseFour').collapse({

toggle: false

})});

$(function () { $('#collapseTwo').collapse('show')});

$(function () { $('#collapseThree').collapse('toggle')});

$(function () { $('#collapseOne').collapse('hide')});

</script>

面板折叠没js的

<div class="panel-group" id="accordion">

<div class="panel panel-default">

<div class="panel-heading">

<h4 class="panel-title">

<a data-toggle="collapse" data-parent="#accordion"  href="#collapseOne">

点击我进行展开,再次点击我进行折叠。第 1 部分

</a>

</h4>

</div>

<div id="collapseOne" class="panel-collapse collapse in">

<div class="panel-body">

Nihil anim keffiyeh helvetica, craft beer labore wes anderson 

cred nesciunt sapiente ea proident. Ad vegan excepteur butcher 

vice lomo.

</div>

</div>

</div>

<div class="panel panel-default">

<div class="panel-heading">

<h4 class="panel-title">

<a data-toggle="collapse" data-parent="#accordion" 

href="#collapseTwo">

点击我进行展开,再次点击我进行折叠。第 2 部分

</a>

</h4>

</div>

<div id="collapseTwo" class="panel-collapse collapse">

<div class="panel-body">

Nihil anim keffiyeh helvetica, craft beer labore wes anderson 

cred nesciunt sapiente ea proident. Ad vegan excepteur butcher 

vice lomo.

</div>

</div>

</div> 

</div> 

简单的折叠内容块:

<button type="button" class="btn btn-primary" data-toggle="collapse" 

data-target="#demo">

简单的可折叠组件

</button>    

<div id="demo" class="collapse in">

Nihil anim keffiyeh helvetica, craft beer labore wes anderson 

cred nesciunt sapiente ea proident. Ad vegan excepteur butcher 

vice lomo.

</div>

第十一个 轮播插件(carousel.js)

是显示一个循环播放元素的通用组件(类时幻灯片的效果), 其中内容也是灵活的多样的, 可以是图像, 内嵌框架, 视频 或其他任何类型的内容

   

1. 用法

  1) 通过data属性 : 

  data-slide 接受关键字prev或next,用来改变幻灯片相对于当前位置的位置

  data-slide-to 来想轮播传递一个原始滑动索引,如: data-slide-to="2" 将吧滑块移动到一个特定的索引(索引从0开始)

     data-ride="carousel" 用于标记轮播在页面加载时就可以开始动画播放(就是自己切换幻灯片)

  2) 通过 js :

  $('.carousel').carousel()

2. 选项

选项可以通过data 或js来设置,js中是命名一个对象来传递的

选项名     : 值类型/默认值      : data属性名称   :  说明

   interval    : number/5000      : data-interval  : 自动循环每个项目的延迟时间, 如果为false,轮播组件将不会自动循环

   pause   : string/hover  : data-pause   : 鼠标进入时暂停轮播循环,鼠标离开恢复轮播循环

   wrap   : boolean/false        : data-warp   : 轮播是否连续循环

3. 方法

.carousel(options) : 初始化轮播组件,并开始循环项目 可以有一个可选的options对象 $('#identifier').carousel( {interval: 2000} )

    .carousel('cycle') : 从左到右循环轮播项目 $('#identifier').carousel('cycle')

    .carousel('pause') : 停止轮播循环项目

    .carousel(number) : 循环轮播到某个特定的项目,(从0开始记数)

  .carousel('prev') : 循环轮播到上一个项目

  .carousel('next') : 循环轮播到下一个项目

4. 事件

slide.bs.carousel : 当调用slide实例方法时立即触发 (幻灯片切换前触发)

slid.bs.carousel : 当轮播完成幻灯片过渡效果时触发该事件

5. 实例

基本例子(存data-* api实现),第二个标签页有标题

<div id="myCarousel" class="carousel slide">

<!-- 轮播(Carousel)指标 -->

<ol class="carousel-indicators">

<li data-target="#myCarousel" data-slide-to="0" class="active"></li>

<li data-target="#myCarousel" data-slide-to="1"></li>

</ol>   

<!-- 轮播(Carousel)项目 -->

<div class="carousel-inner">

<div class="item active">

<img src="/wp-content/uploads/2014/07/slide1.png" alt="First slide">

</div>

<div class="item">

<img src="/wp-content/uploads/2014/07/slide2.png" alt="Second slide">

<div class="carousel-caption">标题 2</div>

</div>

 

</div>

<!-- 轮播(Carousel)导航 -->

<a class="carousel-control left" href="#myCarousel" 

  data-slide="prev">&lsaquo;</a>

<a class="carousel-control right" href="#myCarousel" 

  data-slide="next">&rsaquo;</a>

</div> 

js调用例子

<div id="myCarousel" class="carousel slide">

   <!-- 轮播(Carousel)指标 -->

   <ol class="carousel-indicators">

       <li data-target="#myCarousel" data-slide-to="0" 

           class="active"></li>

       <li data-target="#myCarousel" data-slide-to="1"></li>

       <li data-target="#myCarousel" data-slide-to="2"></li>

   </ol>   

   <!-- 轮播(Carousel)项目 -->

   <div class="carousel-inner">

       <div class="item active">

           <img src="/wp-content/uploads/2014/07/slide1.png" alt="First slide">

       </div>

       <div class="item">

           <img src="/wp-content/uploads/2014/07/slide2.png" alt="Second slide">

       </div>

       <div class="item">

           <img src="/wp-content/uploads/2014/07/slide3.png" alt="Third slide">

       </div>

   </div>

   <!-- 轮播(Carousel)导航 -->

   <a class="carousel-control left" href="#myCarousel" 

       data-slide="prev">&lsaquo;</a>

   <a class="carousel-control right" href="#myCarousel" 

       data-slide="next">&rsaquo;</a>

   <!-- 控制按钮 -->

   <div style="text-align:center;">

       <input type="button" class="btn start-slide" value="Start">

       <input type="button" class="btn pause-slide" value="Pause">

       <input type="button" class="btn prev-slide" value="Previous Slide">

       <input type="button" class="btn next-slide" value="Next Slide">

       <input type="button" class="btn slide-one" value="Slide 1">

       <input type="button" class="btn slide-two" value="Slide 2">            

       <input type="button" class="btn slide-three" value="Slide 3">

   </div>

</div> 

<script>

$(function(){

       // 初始化轮播

       $(".start-slide").click(function(){

           $("#myCarousel").carousel('cycle');

       });

       // 停止轮播

       $(".pause-slide").click(function(){

           $("#myCarousel").carousel('pause');

       });

       // 循环轮播到上一个项目

       $(".prev-slide").click(function(){

           $("#myCarousel").carousel('prev');

       });

       // 循环轮播到下一个项目

       $(".next-slide").click(function(){

           $("#myCarousel").carousel('next');

       });

       // 循环轮播到某个特定的帧 

       $(".slide-one").click(function(){

           $("#myCarousel").carousel(0);

       });

       $(".slide-two").click(function(){

           $("#myCarousel").carousel(1);

       });

       $(".slide-three").click(function(){

           $("#myCarousel").carousel(2);

       });

   });

</script>

第十六个 附加导航插件(affix.js)

该组件允许某一个<div>固定在页面的某个位置,不会因为滚动条的滚动而滚动消失,应用如很多网站的回到顶部的按钮.

1. 用法

1) 通过data属性 : 只需在元素上添加 data-spy="affix" ; 

     请配合偏移属性data-offset-top="**" 来一起使用(该元素初始化时是根据父元素的相对定位, 

     当滚动页面会马上变为绝对定位了, offset属性设置了,在页面滚动多少偏移量后让其便为绝对定位)

 <div class="row">

       <div class="col-xs-3" id="myScrollspy">

           <ul class="nav nav-tabs nav-stacked" data-spy="affix" data-offset-top="125">

               <li class="active"><a href="#section-1">第一部分</a></li>

               <li><a href="#section-2">第二部分</a></li>

               <li><a href="#section-3">第三部分</a></li>

               <li><a href="#section-4">第四部分</a></li>

               <li><a href="#section-5">第五部分</a></li>

           </ul>

       </div>

       <div class="col-xs-9">

       ...

       </div>

 </div>

2) 通过js使用: 通过js手动为某元素添加affix,代码如下:

$('#myAffix').affix({

  offset: {

 top: 100, bottom: function () {    //底部偏移的值是函数动态计算的

return (this.bottom = 

$('.bs-footer').outerHeight(true))

}

 }

})  

实例:

<script>

$(document).ready(function(){

   $("#myNav").affix({

       offset: { 

           top: 125 

     }

   });

});

</script>

<div class="row">

       <div class="col-xs-3" id="myScrollspy">

           <ul class="nav nav-tabs nav-stacked" id="myNav">

               <li class="active"><a href="#section-1">第一部分</a></li>

               <li><a href="#section-2">第二部分</a></li>

               <li><a href="#section-3">第三部分</a></li>

               <li><a href="#section-4">第四部分</a></li>

               <li><a href="#section-5">第五部分</a></li>

           </ul>

       </div>

       <div class="col-xs-9">

        ...

       </div>

   ...

   </div>

2. 通过css定位

该插件的原理是使用3个bootstrap的 css样式来动态定位 组件位置的, 分别是.affix .affix-top .affix-bottom ;

1) 初始时, 组件会被设置 .affix-top类(定义的是offset-bottom就是 .affix-bottom类); 这个时候没有定位设置就是在其父元素的内部的相对位置

2) 当滚动经过添加了affix的组件时, 此时.affix-top类被 替换为 .affix类; 同时设置position:fixed样式

3) 果定义了底部偏移,当滚动到达该位置时,应把 .affix 替换为 .affix-bottom。由于偏移是可选的,假如设置了该偏移,则要求同时设置适当的 CSS。在这种情况下,请在必要的时候添加 position: absolute;。

3. 选项

可通过data属性或js传递

offset : 类型: number|function|object 默认值:10 ;  data属性名: data-offset | data-offset-top | data-offset-bottom

说明: 当计算滚动位置时, 距离顶部的偏移像素,如果给data-offset 设置了一个数字, 则该偏移量的值将被应用到顶部和底部; js中对象的使用是offet:{top:10} 或offset:{top:10,bottom:5}

 如果需要动态计算偏移, 就是使用函数来返回数字(js用法中的示例代码中有函数的使用)