详解BootStrap中Affix控件的使用及保持布局的美观的方法


Posted in Javascript onJuly 08, 2016

Affix是BootStrap中的一个很有用的控件,他能够监视浏览器的滚动条的位置并让你的导航始终都在页面的可视区域。一开始的时候,导航在页面中是普通的流式布局,占有文档中固定的位置,当页面滚动的时候,导航就自动变成了固定布局(fixed),始终处于用户的视区,下面来说说他的用法。首先来看看他的实现原理。它是通过实时修改页面元素的class属性来实现的

开始的时候应用affix的元素的class中会自动添加affxi-top属性

当滚动条滚动以至于导航快要到页面顶部的时候这时候在元素的class中会将affix-top变为affix

当拖动滚动条到页面底部的时候,affix又会自动变为affix-bottom

以上过程完全有控件自己实现,无须我们干预,我们只需要写好这些状态的css就可以了

如我们可以设置

.affix-top
{
top:150px;
}
.affix
{
top:20px;//通常用bootstrap构建的网站头部都有个导航条
}
.affix-bottom
{
……
}

下面我们看看它的使用方法

1、通过data属性

你只需为需要监听的页面元素添加data-spy="affix"即可。然后使用偏移量来确定一个元素的开和关.

<ul class="nav nav-tabs nav-stacked affix" data-spy="affix"
data-offset-top="190">
<li class="active"><a href="#one">Tutorial One</a></li>
<li><a href="#two">Tutorial Two</a></li>
<li><a href="#three">Tutorial Three</a></li>
</ul>

其中data-offset-top为处于affix-top状态元素距离页面顶端的位置。当滚动到页面顶端的使用我们可以设置".affix"的样式来重新设置其"top"值。

2、通过javascript调用

示例代码如下:

$('#myNav').affix({
offset: {
top: 100,//滚动中距离页面顶端的位置
bottom: function () {//滚动完成时距离页面底部的位置
return (this.bottom = 
$('.bs-footer').outerHeight(true))
}
}
})

HTML代码如下(只展示核心代码):

<ul class="nav nav-tabs nav-stacked affix" id="myNav">
<li class="active"><a href="#one">Tutorial One</a></li>
<li><a href="#two">Tutorial Two</a></li>
<li><a href="#three">Tutorial Three</a></li>
</ul>
……
<div class="bs-footer">
</div>

以上似乎已经介绍完了bootstrap中affix的使用,但是在实际使用的过程中我们会发现,当拖动滚动条的时候使用了affix的页面元素的宽度会发生变化,从而导致页面布局的杂乱,所以我们在定义affix的css中最好写死它的宽度如:

.affix{
width:250px;
}

这样在视窗足够大的时候是没有任何问题的,但是当拖动改变视窗的大小后会发现布局又变乱了,这个问题困扰了我许久,最后通过分析bootcss的源码我发现该网站在所有使用affix的元素的class中都添加了"hidden-print" "hidden-xs" "hidden-sm"这些属性,用于当屏幕不是符合要求的情况下可以隐藏affix,虽然影响了易用性,但是保证了布局无论在哪种情况下都是整齐的。

以上所述是小编给大家介绍的详解BootStrap中Affix控件的使用及保持布局的美观的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JScript中的undefined和&quot;undefined&quot;的区别
Mar 08 Javascript
js封装的textarea操作方法集合(兼容很好)
Nov 16 Javascript
js实现双向链表互联网机顶盒实战应用实现
Oct 28 Javascript
JavaScript自定义事件介绍
Aug 29 Javascript
jQuery函数map()和each()介绍及异同点分析
Nov 08 Javascript
jQuery操作DOM之获取表单控件的值
Jan 23 Javascript
JavaScript数据结构与算法之栈与队列
Jan 29 Javascript
JavaScript中ES6字符串扩展方法
Aug 26 Javascript
JS+canvas动态绘制饼图的方法示例
Sep 12 Javascript
js验证密码强度解析
Mar 18 Javascript
ES5新增数组的实现方法
May 12 Javascript
vue表单验证之禁止input输入框输入空格
Dec 03 Vue.js
Augularjs-起步详解
Jul 08 #Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
Jul 08 #Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
Jul 08 #Javascript
Angularjs---项目搭建图文教程
Jul 08 #Javascript
Node.js 文件夹目录结构创建实例代码
Jul 08 #Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
Jul 07 #Javascript
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
Jul 07 #Javascript
You might like
综合图片计数器
2006/10/09 PHP
php下MYSQL limit的优化
2008/01/10 PHP
浅析php中三个等号(===)和两个等号(==)的区别
2013/08/06 PHP
php线性表的入栈与出栈实例分析
2015/06/12 PHP
php对微信支付回调处理的方法
2018/08/23 PHP
Javascript isArray 数组类型检测函数
2009/10/08 Javascript
javascript图像处理—仿射变换深度理解
2013/01/16 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
node.js中的http.response.setHeader方法使用说明
2014/12/14 Javascript
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
javascript最基本的函数汇总
2015/06/25 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
2016/07/01 Javascript
JSON与String互转的实现方法(Javascript)
2016/09/27 Javascript
JS 滚动事件window.onscroll与position:fixed写兼容IE6的回到顶部组件
2016/10/10 Javascript
HTML Table 空白单元格补全的简单实现
2016/10/13 Javascript
js继承实现方法详解
2016/12/16 Javascript
Vue实现6位数密码效果
2018/08/18 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】
2018/12/13 Javascript
node.js使用fs读取文件出错的解决方案
2019/10/23 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
[02:20]DOTA2中文配音宣传片
2013/05/22 DOTA
Python中类的定义、继承及使用对象实例详解
2015/04/30 Python
Python二分法搜索算法实例分析
2015/05/11 Python
浅析Python编写函数装饰器
2016/03/18 Python
python制作简单五子棋游戏
2019/06/18 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
Python爬虫抓取论坛关键字过程解析
2020/10/19 Python
python 实现性别识别
2020/11/21 Python
css 如何让背景图片拉伸填充避免重复显示
2013/07/11 HTML / CSS
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
如何获得EntityManager
2014/02/09 面试题
公司慰问信范文
2015/03/23 职场文书
2015年综治宣传月活动总结
2015/03/25 职场文书
情感电台广播稿
2015/08/18 职场文书
MySQL 百万级数据的4种查询优化方式
2021/06/07 MySQL