详解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 相关文章推荐
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
Feb 15 Javascript
JavaScript 学习技巧
Feb 17 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
Dec 27 Javascript
jquery 实现两Select 标签项互调示例代码
Sep 25 Javascript
浅析javascript中的事件代理
Nov 06 Javascript
JavaScript基础知识及常用方法总结
Jan 10 Javascript
JavaScript的模块化开发框架Sea.js上手指南
May 12 Javascript
js仿腾讯QQ的web登陆界面
Aug 19 Javascript
Bootstrap select多选下拉框实现代码
Dec 23 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
Jun 17 Javascript
浅谈React高阶组件
Mar 28 Javascript
微信小程序中使用wxss加载图片并实现动画效果
Aug 13 Javascript
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 冒泡排序算法的实现代码
2010/08/08 PHP
Notice: Undefined index: page in E:\PHP\test.php on line 14
2010/11/02 PHP
给初学者的30条PHP最佳实践(荒野无灯)
2011/08/02 PHP
php中使用$_REQUEST需要注意的一个问题
2013/05/02 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
2013/08/31 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
jquery中map函数遍历数组用法实例
2015/05/18 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
React+react-dropzone+node.js实现图片上传的示例代码
2017/08/23 Javascript
Node.js Express安装与使用教程
2018/05/11 Javascript
VUE DOM加载后执行自定义事件的方法
2018/09/07 Javascript
浅谈小程序globalData的那些事儿
2019/11/01 Javascript
javascript实现页面的实时时钟显示示例
2020/08/06 Javascript
JavaScript中ES6规范中let和const的用法和区别
2020/08/06 Javascript
如何利用JavaScript编写更好的条件语句详解
2020/08/10 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
2020/10/28 Javascript
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
使用Python的PEAK来适配协议的教程
2015/04/14 Python
Python的Flask框架中配置多个子域名的方法讲解
2016/06/07 Python
为什么入门大数据选择Python而不是Java?
2018/03/07 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
浅析Django中关于session的使用
2019/12/30 Python
生态学毕业生自荐信
2013/10/27 职场文书
会计主管岗位职责范文
2013/11/08 职场文书
2014年租房协议书范本
2014/10/30 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
辩论赛开场白大全(主持人+辩手)
2015/05/29 职场文书
竞聘书的秘诀
2019/04/02 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript
Redis实战之Lettuce的使用技巧详解
2022/12/24 Redis