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

 $(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. pygame 笔记-3 角色动画及背景的使用

    上二节,已经知道如何控制基本的运动了,但是只有一个很单调的方块,不太美观,本节学习如何加载背景图,以及角色的动画. 素材准备:(原自github) 角色动画的原理:动画都是一帧帧渲染的,比如向左走的动 ...

  2. [转载]理解 Git 分支管理最佳实践

    原文 理解 Git 分支管理最佳实践 Git 分支有哪些 在进行分支管理讲解之前,我们先来对分支进行一个简单的分类,并明确每一类分支的用途. 分支分类 根据生命周期区分 主分支:master,deve ...

  3. Win 10 System Restore Fail 0x80070091

    Question: Below about says it all.  I tried SysRes from two points, both with same failure. System R ...

  4. delphi开源JWT

    delphi开源JWT 开源GIT地址:https://github.com/paolo-rossi/delphi-jose-jwt JSON Web Token (JWT)是一个开放标准(RFC 7 ...

  5. WordPress主题开发:footer.php

    最简 <?php wp_footer();?> </body> </html>

  6. 初识 Nginx

    Nginx 是一个免费的,开源的,高性能的HTTP服务器和反向代理,以及IMAP / POP3代理服务器. Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名.很多高知名度的网站 ...

  7. Xposed 框架 hook 简介 原理 案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  8. docker的常用命令汇总

    1================================================================================ docker 列出每个容器的IP   ...

  9. GopherChina 2018

    https://github.com/gopherchina/conference/tree/master/2018

  10. failed to create process怎么解决

    python 在cmd时,报错:failed to create process怎么解决 在cmd命令前加 : python -m 命令(如:python -m conda update conda)