最近在公司实习,刚好写了一个静态的网页,用到了滚动监视,就自己写了个监视,话不多说直接进入正题

 $(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滚动监视原理实现的更多相关文章

  1. Android 带你从源码的角度解析Scroller的滚动实现原理

    转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273),请尊重他人的辛勤劳动成果,谢谢! 今天给大 ...

  2. JS 实现无缝滚动动画原理(初学者入)

    这段时间在教培训班的学生使用原生javascript实现无缝滚动的动画案例,做了这个原理演示的动画,分享给自学JS的朋友!博主希望对你们有帮助! 在讲解之前先看一下demo: demo:https:/ ...

  3. Bootstrap滚动监控器

    前面的话 滚动监听插件是用来根据滚动条所处的位置来自动更新导航项的.滚动导航条下面的区域并关注导航项的变化,下拉菜单中的条目也会自动高亮显示.本文将详细介绍Bootstrap滚动监控器 基本用法 滚动 ...

  4. Bootstrap滚动监听(Scrollspy)插件

    Bootstrap滚动监听(Scrollspy)插件,即自动更新导航插件,会根据滚动条的位置自动更新对应的导航目标

  5. 页面遮罩层,并且阻止页面body滚动。bootstrap模态框原理

    实现思路: 1.需要有一个层将body遮住,放在body上方. 2.修改body的overflow属性值为:hidden 废话不多说了,将关键代码贴出来了,兼容火狐,谷歌,ie 遮罩层的样式代码,红色 ...

  6. Bootstrap滚动监听

    滚动监听(Scrollspy)插件,即自动更新导航插件,会根据滚动条的位置自动更新对应的导航目标.其基本的实现是随着您的滚动,基于滚动条的位置向导航栏添加 .active class. <!DO ...

  7. BootStrap栅格系统原理 笔记

    1.内容居中:效果 关键代码: <div class="container"> .........之前上面添加在body标签下的代码 </div>添加cla ...

  8. jquery轻松实现li标签上下滚动的原理

    在网站上我们常看到有滚动的文字或者图片,比如消息提醒,新闻列表,等等.那么这些效果是怎么形成的呢?经过查阅,找到一种十分方便的写法,经过改良,得出我自己的终极版滚动效果. 我先写个布局吧 <di ...

  9. Bootstrap模态框原理分析及问题解决

    最近自学了bootstrap觉得里面模板样式挺好的,就想自己实现实现,不多说了,开始进入正题了 今天就来实现bootstrap里面的模态框弹出效果 首先很简单 实现一个类似于panel的modal 1 ...

随机推荐

  1. React组件通信技巧

    效果图 communication.gif 点击查看Github完整源码 1.父向子通信 直接标签中插入参数即可 //number只是个例子 let _number = this.state.numb ...

  2. 微信公众号申请+新浪SAE申请

    一. 新浪SAE服务申请 1. 注冊地址:http://t.cn/RqMHPto 2. 选择控制台>>云应用SAE 3. 创建新应用 4. 填写域名 5. 代码管理选择SVN 6. 创建版 ...

  3. 使用sshfs将远程目录挂载到本地

    使用sshfs将远程目录挂载到本地 转自:http://blog.sina.com.cn/s/blog_6561ca8c0102vc2u.html 在Linux下我们通常使用ssh命令来登录远程Lin ...

  4. IntelliJ IDEA 下载安装(含注册码)

    https://blog.csdn.net/mashuai720/article/details/79389314

  5. MFC通过button控制编辑框是否显示系统时间

    在dlg.h中public bool flag; 在构造函数中 flag=false; 在button的生成函数中 if(flag) { flag=false; //m_showtime.SetWin ...

  6. Docker Mysql数据库双主同步配置方法

    一.背景 可先查看第一篇<Docker Mysql数据库主从同步配置方法>介绍 二.具体操作 1.创建目录(~/test/mysql_test1): --mysql --mone --da ...

  7. lua 源码分析之线程对象lua_State

    lua_State 中放的是 lua 虚拟机中的环境表.注册表.运行堆栈.虚拟机的上下文等数据. 从一个主线程(特指 lua 虚拟机中的线程,即 coroutine)中创建出来的新的 lua_Stat ...

  8. 【C#】解析C#中LING的使用

    LING提供了一种从数据源中获取数据的方式,不同的语言已经形成了很多种关联的数据源.LING(Language Integrated Query,语言集成查询)提供一种通用的从不同的数据源中获取数据的 ...

  9. 【云计算】IaaS、PaaS和SaaS

    1. SaaS:Software-as-a-Service(软件即服务) 提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设备上通过客户端界面访问,如浏览器.消费者不需要管理或 ...

  10. delphi从TRichEdit获得RTF格式文本(PC版本)

    function GetRTF(RE: TRichedit): string;varstrStream: TStringStream;beginstrStream := TStringStream.C ...