bootstrap滚动监视原理实现
最近在公司实习,刚好写了一个静态的网页,用到了滚动监视,就自己写了个监视,话不多说直接进入正题
$(function () {
var $root = $("html,body");
var location = [];//存储item active属性状态 true表示有class="active"
location["position_1"] = false;
location["position_2"] = false;
location["position_3"] = false;
location["position_4"] = false;
location["position_5"] = false;
location["position_6"] = false;
location["position_7"] = false;
var offset1,offset2,offset3,
offset4,offset5,offset6,offset7; //各个锚点的距离顶部的偏移
offset1 = $("[name = position_1]").offset().top - 2 * parseInt($(".header_top").css("height").toString().split("px")[0]);
offset2 = $("[name = position_2]").offset().top - 2 * parseInt($(".header_top").css("height").toString().split("px")[0]);
offset3 = $("[name = position_3]").offset().top - 2 * parseInt($(".header_top").css("height").toString().split("px")[0]);
offset4 = $("[name = position_4]").offset().top - 2 * parseInt($(".header_top").css("height").toString().split("px")[0]);
offset5 = $("[name = position_5]").offset().top - 2 * parseInt($(".header_top").css("height").toString().split("px")[0]);
offset6 = $("[name = position_6]").offset().top - 2 * parseInt($(".header_top").css("height").toString().split("px")[0]);
offset7 = offset6 + parseInt($("#section_6").css("height").toString().split("px")[0]) / 2;//最后部分高度不够,不能按部就班,否则滚动条到不到指定位置就倒底了
function initi () {
for(var i in location)
location[i] = false;
}
// debugger;
$(window).scroll(function () {
// debugger;
var Scroll = $(document).scrollTop();
$("[class = 'active']").removeAttr("class");
if(Scroll < offset2 && Scroll >= offset1) {
initi();
$("[href =#position_1]").parent().attr("class", "active");
location["position_1"] = true;
}
else if(Scroll < offset3 && Scroll >= offset2) {
initi();
$("[href =#position_2]").parent().attr("class","active");
location["position_2"] = true;
}
else if(Scroll < offset4 && Scroll >= offset3){
initi();
$("[href =#position_3]").parent().attr("class","active");
location["position_3"] = true;
}
else if(Scroll < offset5 && Scroll >= offset4) {
initi();
$("[href =#position_4]").parent().attr("class", "active");
location["position_4"] = true;
}
else if(Scroll < offset6 && Scroll >= offset5) {
initi();
$("[href =#position_5]").parent().attr("class", "active");
location["position_5"] = true;
}
else if(Scroll < offset7 && Scroll >= offset6){
initi();
$("[href =#position_6]").parent().attr("class", "active");
location["position_6"] = true;
}
else
{
initi();
$("[href =#position_7]").parent().attr("class", "active");
location["position_7"] = true;
}
});
$("a").on("click",function (e) {
var event = e || window.event;
var son = $(event.target);
var father = son.parent();
var Name = father.prop("tagName");
if(Name == "LI") {
var act = $("[class ='active']").children("a").attr("href").toString().split("#")[1];
location[act] = false;
$("[class ='active']").removeAttr("class");
var pos = son.attr("href").toString().split("#")[1];
location[pos] = true;
$root.animate({
scrollTop: $("[name=\"" + pos + "\"]").offset().top
}, 1000);
father.attr("class", "active");
return false;
}
else if(Name == "A")
{
var flag = false,pri,real,next,total = 0;
var temp,num_next = 0,num_pri = 0;
for(var i in location)
{
if(location[i])
{
flag = true;
break;
}
}
if(flag == false) {
location["position_1"] = true;
window.location.href = "#position_1";
}
for (i in location) {
total++;
if (location[i]) {
temp = i.split("_");
num_next = parseInt(temp[1]) + 1;
num_pri = parseInt(temp[1]) - 1;
if(total == 1)
{
pri = real = i;
next = temp[0] + "_" + num_next;
}
else if(total == 7)
{
next = real = i;
pri = temp[0] + "_" + num_pri;
}
else
{
next = temp[0] + "_" + num_next;
real = i;
pri = temp[0] + "_" + num_pri;
}
break;
}
}
if(son.hasClass("prev"))
{
location[real] = false;
location[pri] = true;
$root.animate({
scrollTop: $("[name=\"" + pri + "\"]").offset().top
}, 1000);
$("[class ='active']").removeAttr("class");
$("[href=\"#" + pri + "\"]").parent().attr("class","active");
return false;
}
else if(son.hasClass("next"))
{
location[real] = false;
location[next] = true;
$root.animate({
scrollTop: $("[name=\"" + next + "\"]").offset().top
}, 1000);
$("[class='active']").removeAttr("class");
$("[href=\"#" + next + "\"]").parent().attr("class","active");
return false;
}
else
return false; }
});
});
在实习的时候做页面出现的几个问题
1.图片自适应浏览器窗口完全显示
- 查看图片的长宽 设置所在图片div的padding-top为高/宽 比如,一张图片是 2000*1333 那么设置所在div padding-top:66.65%;
- 在div里面放空的block标签强行撑开 然后在div中设置background: url("../picture/bg.jpg") no-repeat;background-size: cover;
2.滚动监视的时候发生的锚点偏移问题,过了锚点,还没触发了事件
这种情况是因为头部设置了一个固定位置的div,从而导致这个div就不占空间了,他下面的元素就填充他的位置
解决不占空间的方法:1.设置margin-top 2.设置一个空div
解决锚点偏移的方法:设置暗锚来填充形成的固定位置的div
<div id="section_2" class="container">
<a name="position_2" class="target-fix"></a>
<h1>信息15-1</h1><br/><br/><br/>
<p>To be or not to be,that's a question.<br/><br/>
决心不过是记忆的奴隶 它会根据你的记忆随意更改(When sorrows come, they come not single spies, - but in battalions.)<br/><br/>
</p>
</div>
.target-fix
{
display: block;
position: relative;
top: -65px;
}
比如说我的固定位置的div高度是65px,那么我这个暗锚就上移65px,然后我就只用跳转到这个锚点位置就行<li><a href="#position_2">信息15-1</a></li>
原理:虽然元素被fixed在最上面了,可是页面计算section_2的页边距报读的时候还是把fixed的高度算上去了,所以点击锚点链接的时候,偏移的距离是section_2页边距的高度加上fixed的高度( section_2.offset().top + nav.height)所以设置暗锚向上偏移65px;
因为写的是静态页面 写的很随意把页面写死了 css文件里出现的多余的样式是因为我直接把实习的工程文件截取抽过来,所以代码就很难看了~~~~~~想要看看效果的就自行查看百度云链接:https://pan.baidu.com/s/1kWDK8rP 密码:6de2
bootstrap滚动监视原理实现的更多相关文章
- Android 带你从源码的角度解析Scroller的滚动实现原理
转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273),请尊重他人的辛勤劳动成果,谢谢! 今天给大 ...
- JS 实现无缝滚动动画原理(初学者入)
这段时间在教培训班的学生使用原生javascript实现无缝滚动的动画案例,做了这个原理演示的动画,分享给自学JS的朋友!博主希望对你们有帮助! 在讲解之前先看一下demo: demo:https:/ ...
- Bootstrap滚动监控器
前面的话 滚动监听插件是用来根据滚动条所处的位置来自动更新导航项的.滚动导航条下面的区域并关注导航项的变化,下拉菜单中的条目也会自动高亮显示.本文将详细介绍Bootstrap滚动监控器 基本用法 滚动 ...
- Bootstrap滚动监听(Scrollspy)插件
Bootstrap滚动监听(Scrollspy)插件,即自动更新导航插件,会根据滚动条的位置自动更新对应的导航目标
- 页面遮罩层,并且阻止页面body滚动。bootstrap模态框原理
实现思路: 1.需要有一个层将body遮住,放在body上方. 2.修改body的overflow属性值为:hidden 废话不多说了,将关键代码贴出来了,兼容火狐,谷歌,ie 遮罩层的样式代码,红色 ...
- Bootstrap滚动监听
滚动监听(Scrollspy)插件,即自动更新导航插件,会根据滚动条的位置自动更新对应的导航目标.其基本的实现是随着您的滚动,基于滚动条的位置向导航栏添加 .active class. <!DO ...
- BootStrap栅格系统原理 笔记
1.内容居中:效果 关键代码: <div class="container"> .........之前上面添加在body标签下的代码 </div>添加cla ...
- jquery轻松实现li标签上下滚动的原理
在网站上我们常看到有滚动的文字或者图片,比如消息提醒,新闻列表,等等.那么这些效果是怎么形成的呢?经过查阅,找到一种十分方便的写法,经过改良,得出我自己的终极版滚动效果. 我先写个布局吧 <di ...
- Bootstrap模态框原理分析及问题解决
最近自学了bootstrap觉得里面模板样式挺好的,就想自己实现实现,不多说了,开始进入正题了 今天就来实现bootstrap里面的模态框弹出效果 首先很简单 实现一个类似于panel的modal 1 ...
随机推荐
- IO流(4)—字符流
1.IO体系: 抽象基类 --节点流(文件流) InputStream -- FileInputStream OutputStream --FileOutputSteam Reader --FileR ...
- hibernate JPA 使用懒加载时代理对象
hibernate延迟加载代理对象实际对象读取方式 public static <T> T deproxy (T obj) { if (obj == null) return obj; i ...
- String类源码解析
1. String是使用char[]数组来存储的,并且String值在创建之后就不可以改变了.char[]数组的定义为: /** The value is used for character sto ...
- 对Rethinking ImageNet Pre-training的理解
Kaiming He的这篇论文提出了一个新问题,在目标检测.实例分割和人体关键点检测等领域,预训练的模型是否真的起了作用?通过实验,得出结论:迭代次数较少时,使用预训练模型效果更好:但是只要迭代次数充 ...
- Python 进制转换 二进制 八进制 十进制 十六进制
Python 进制转换 二进制 八进制 十进制 十六进制 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/python3-scale.html 全局定义一定不 ...
- c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习
c#中@标志的作用 参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...
- Windows下安装模块mysqlclient报错处理
Windows环境下使用pip命令安装Python模块mysqlclientpip install mysqlclient安装过程报错 [error] Microsoft Visual C++ 14 ...
- [elk]kafka集群
kafka高可用 并发写 每一个分区都是一个顺序的.不可变的消息队列, 并且可以持续的添加.分区中的消息都被分了一个序列号,称之为偏移量(offset),在每个分区中此偏移量都是唯一的. 并发读 数据 ...
- GCC:/usr/lib/libstdc++.so.6: version GLIBCXX_3.4.15 not found
源码编译升级安装了gcc后,编译程序或运行其它程序时,有时会出现类似/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found的问题.这 ...
- 北京Java笔试题整理
北京Java笔试题整理 1.什么是java虚拟机?为什么ava被称作是"平台无关的编程语言? 答:Java虚拟机可以理解为一个特殊的"操作系统",只是它连接的不是硬件,而 ...