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

 $(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-KidsCanCode系列jumpy-part1-如何组织复杂游戏的代码

    武侠小说中,高手过招讲究起手式,所谓"行家一伸手,便知有没有".程序开发.软件架构中,也是类似的道理,当业务逻辑越来越复杂,代码越来越多时,一个好的项目结构,从目录命名.模块分层这 ...

  2. 基于spring boot 2.x的websocket示例

    spring boot 2/spring 5自带了websocket,下面是最基本的示例(包括java服务端.java客户端以及js客户端) 一.pom依赖 <dependencies> ...

  3. 如何修改IE浏览器的User-Agent用户代理字符串信息

    每款浏览器都有一个专属的 User-Agent 字符串信息, 通过 User-Agent 网站可以检测用户所使用的浏览器版本.某些网站为了让用户获得更好的浏览体验,通过检测用户的浏览器版本,以确认用户 ...

  4. 分享一个整理Mac储存空间的软件,有效清理xcode的垃圾

    苹果的电脑还是比windows的要好,我这台用了3年时间,作为编程工作天天用,现在愣是一点儿也没有卡顿,如果换作是windows的电脑,我敢保证肯定是卡成狗,相信做编程的你肯定少补了一台mac. ma ...

  5. Android 模拟器启动不了-问题解决方案

    一.Android 模拟器启动不了问题解决方案 在安装Android开发环境时,首先安装java虚拟机,然后下载android adk 管理android虚拟机. 在完成工作后,添加android的虚 ...

  6. ELK架构设计

    1.架构一 2.架构二 3.架构三 4.架构四 示例1: 示例二: ELKB简述 E:Elasticsearch 是一个基于Lucene的分布式搜索和分析引擎,具有高可伸缩.高可靠和易管理等特点.支持 ...

  7. phpBB3导入版面的Python脚本

    关联的数据表 在phpBB3中导入版面时, 需要处理的有两张表, 一个是 forums, 一个是 acl_groups. 如果是干净的论坛, 可以不保留安装时填入的默认分区和版面, 直接用以下语句初始 ...

  8. k8s cronjob设置作业失败后退出不重复执行

    Optional parameters backoffLimit: Number of retries for pods launched by the job. If you want your p ...

  9. 原创科幻短篇《VR》

    近些年VR很火,现在似乎又降温了,那么问题来了:VR到底有前景吗?我农村来的读书又少看不清楚哇.近些年房地产很火,现在似乎还是很火,那么问题来了:房价到底会降吗?我农村来的读书又少看不清楚哇. 以下正 ...

  10. 关于web项目创建后WEB-INF下面没有出现web.xml的解决方法

    提供两种解决方案: 第一种:创建完项目后,需要手动创建出web.xml 第一步:选取创建的项目名称右击 第二步:eclipse的同学找到 java EE Tools 中的 下图画圈部分.  MyEcl ...