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 ...
随机推荐
- 本机ip、127.0.0.1和0.0.0.0区别及内环流量
本机ip.127.0.0.1和0.0.0.0区别及内环流量 所谓内环流量 简单的说是指 计算机内部,程序间通讯产生的流量,或者叫 本地流量,对应的是来自网络的流量. 比如,你安装了卡巴斯基,avast ...
- Ubuntu 18 LTS netplan 网络配置
一.配置网络 1.通过netplan配置网络 #配置网络 nulige@ubuntu:/etc/netplan$ sudo apt install ifupdown nulige@ubuntu:/et ...
- Linux:“awk”命令的妙用
awk是一个强大的文本分析工具,简单来说awk就是把文件逐行读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理. 0.基本用法 awk是一个强大的文本分析工具,简单来说awk就 ...
- 修改MySql数据库的默认时
MySql数据库创建后,默认的时区比东八区少了八个小时.如果Sql语句中使用到MySql的时间的话就会比正常时间少了八个小时.所以需要修改MySql的系统时区,使其显示的时间和我们现在的时间一致. 1 ...
- go微服务框架go-micro深度学习(五) stream 调用过程详解
上一篇写了一下rpc调用过程的实现方式,简单来说就是服务端把实现了接口的结构体对象进行反射,抽取方法,签名,保存,客户端调用的时候go-micro封请求数据,服务端接收到请求时,找到需要调用调 ...
- 通过js实现整屏滑动+全屏翻页+动画展示+线性图
技术:html+css+jquery+jquery-ui.js+jquery.fullPage.js 概述 本demo主要通过html+css+js实现整屏滑动,全屏翻页并带动画的功能效果,借助于 ...
- ssh的用户配置文件config管理ssh会话
抄的这个: https://www.cnblogs.com/zhonghuasong/p/7236989.html 只是在这里留个存档,防止删除 我有这样的需求就是,因为需要ssh连接到服务器,然后每 ...
- 深入理解Linux内存分配
深入理解Linux内存分配 为了写一个用户层程序,你也许会声明一个全局变量,这个全局变量可能是一个int类型也可能是一个数组,而声明之后你有可能会先初始化它,也有可能放在之后用到它的时候再初始化.除此 ...
- redmine在linux上的mysql性能优化方法与问题排查方案
iredmine的linux服务器mysql性能优化方法与问题排查方案 问题定位: 客户端工具: 1. 浏览器inspect-tool的network timing工具分析 2. 浏览 ...
- LNAMP服务器环境(源码安装)
在安装前先看下它们安装时所需要的依赖库:http://www.cnblogs.com/fps2tao/p/7699448.html 1.nginx源码安装 下载:http://nginx.org/en ...