- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试构建一个粘性栏,在您通过英雄后固定在顶部,然后在您通过页面上的每个部分后,粘性栏中的 anchor 添加/删除一个类以显示事件状态他们在页面上的位置。
基本上,当您向下滚动页面时,粘性栏应该根据它们在页面上经过的部分在粘性导航中向左或向右移动/动画。
如果我删除模块的其他 JS,我会将固定在顶部的粘性条正常工作,但是一旦我尝试让所有东西一起工作,我似乎无法弄清楚。我对这个级别的 javascript 不是很熟悉,所以任何帮助都会很棒!
这是我的 jsfiddle:jsfiddle here
// hero
var p = $( ".hero" );
var offset = p.offset();
offset = offset.top;
$(window).scroll(function () {
if ($(window).scrollTop() > offset ) {
$('.sticky-nav').addClass('fixed');
$('li a.nav-1').addClass('active');
}
else { $('.sticky-nav').removeClass('fixed'); }
$('li a.nav-1').removeClass('active');
});
// module 1
var p = $( ".module-1" );
var offset = p.offset();
offset = offset.top;
$(window).scroll(function () {
if ($(window).scrollTop() > offset ) {
$('li a.nav-2').addClass('active');
}
else { $('li a.nav-2').removeClass('active'); }
});
// module 2
var p = $( ".module-2" );
var offset = p.offset();
offset = offset.top;
$(window).scroll(function () {
if ($(window).scrollTop() > offset ) {
$('li a.nav-3').addClass('active');
}
else { $('li a.nav-3').removeClass('active'); }
});
// module 2
var p = $( ".module-3" );
var offset = p.offset();
offset = offset.top;
$(window).scroll(function () {
if ($(window).scrollTop() > offset ) {
$('li a.nav-4').addClass('active');
}
else { $('li a.nav-4').removeClass('active'); }
});
.wrapper {
max-width: 1440px;
margin: 0 auto;
display: flex;
flex-direction: column;
}
.hero {
height: 200px;
width: 1440px;
}
.sticky-nav {
height: 70px;
background: #ccc;
width: 100%;
}
.module-1 {
height: 500px;
width: 100%
}
.module-2 {
height: 200px;
width: 100%;
}
.module-3 {
height: 400px;
width: 100%;
}
.fixed {
position: fixed;
top: 0;
}
ul {
display: flex;
list-style-type: none;
}
li {
width: 20%;
}
li a {
color: #fff;
}
.active {
border-bottom: 3px solid blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
<div class="hero">I'm the hero</div>
<div class="sticky-nav">
<ul>
<li><a href="#module-1" class="nav-1">nav a</a></li>
<li><a href="#module-2" class="nav-2">nav b</a></li>
<li><a href="#module-3" class="nav-3">nav c</a></li>
<li><a href="#module-4" class="nav-4">nav d</a></li>
</ul>
</div>
<a name="module-1"><section class="module-1">section 1</section></a>
<a name="module-2"><section class="module-2">section 2</section></a>
<a name="module-3"><section class="module-3">section 3</section></a>
<a name="module-4"><section class="module-4">section 4</section></a>
</div>
再次感谢
最佳答案
你的脚本有太多的 $(window).scroll(function ()
。你可以像下面的代码片段一样以更简单的方式尝试它。
$(document).ready(function () {
$(document).on("scroll", onScroll);
$('a[href^="#"]').on('click', function (e) {
e.preventDefault();
$(document).off("scroll");
$('a').each(function () {
$(this).removeClass('active');
})
$(this).addClass('active');
var target = this.hash;
$target = $(target);
$('html, body').stop().animate({
'scrollTop': $target.offset().top+2
}, 500, 'swing', function () {
window.location.hash = target;
$(document).on("scroll", onScroll);
});
});
});
function onScroll(event){
var scrollPosition = $(document).scrollTop();
var hero=$('.hero').innerHeight();
(scrollPosition > hero)?$('header').addClass('sticky'):$('header').removeClass('sticky');
$('nav a').each(function () {
var currentLink = $(this);
var refElement = $(currentLink.attr("href"));
if (refElement.position().top <= scrollPosition && refElement.position().top + refElement.height() > scrollPosition) {
$('nav ul li a').removeClass("active");
currentLink.addClass("active");
}
else{
currentLink.removeClass("active");
}
});
};
html, body { margin: 0; padding: 0; width: 100%; height: 100%;}
header.sticky {
position: fixed;
top: 0;
width: 100%;
height: 80px;
background: #fff;
}
nav {
width: 960px;
height: 80px;
margin: 0 auto;
}
nav ul {
margin: 20px 0 0;
}
nav ul li {
display: inline-block;
margin: 0 30px 0 0;
}
a { color: #4D4D4D; font-family: sans-serif; text-transform: uppercase; text-decoration: none; line-height: 42px; }
.active { color: #2dbccb; }
.content { width: 100%; height: 100%; }
.content > section { width: 100%; height: 100%; }
#home { background: #2dbccb; }
#about { background: #f6c362; }
#services { background-color: #eb7e7f; }
#contact { background-color: #415c71; }
.hero {
padding: 150px 0;
text-align: center;
font-size: 30px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="hero">
hero
</div>
<header>
<nav>
<ul>
<li><a class="active" href="#home">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#services">Services</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</nav>
</header>
<div class="content">
<section id="home"></section>
<section id="about"></section>
<section id="services"></section>
<section id="contact"></section>
</div>
关于javascript - ScrollTop 偏移多个 anchor 的 Sticky Bar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49248621/
我正在尝试从第 4 到 9 页以及第 12 和 13 页上的单元格中清除所有内容(包括图像)。我有以下代码,但它正在清除第 3-9 和 12-15 页中的内容,我不知道为什么。 有什么想法吗? Sub
有没有办法增加极坐标图刻度标签(θ)的填充/偏移? import matplotlib import numpy as np from matplotlib.pyplot import figure,
我正在调用本地 API 并尝试以分页 样式进行操作。我有 n 张图片,我想将它们分成 n/4 行(每行 4 张图片)。因此,我正在调用我的 API,images/count,offset。但不知何故,
我的问题解释起来有点棘手,但无论如何我都会尝试。我有两个水平选项卡,当您单击它们时,会打开一个文本框内容。当他们被点击时,我试图“关注”他们。我在网上找到了很多资料,但除了我在下面显示的这段代码外,没
所以我有一个 float 的 div,我需要它始终向右 200 像素,并填充窗口的其余部分。有没有某种跨浏览器兼容的方法,我可以在不借助 javascript 的情况下使宽度填满页面的其余部分? 最佳
我有以下片段 $('html,body').animate({scrollTop: $('#menu').offset().top}, 'slow'); 单击链接时,我希望浏览器从#menu div
我目前正在为我的应用程序使用 JASidePanel,并且我有一个 UITableViewcontroller 和一个 UIRefreshControl 作为它的 ViewController 之一。
给出以下代码: imshow(np.arange(16*16).reshape(16,16)) cb = colorbar() cb.set_label("Foo") cb.set_ticks([0,
我是编程新手,我认为 VBA 是一个很好的起点,因为我在 Excel 中做了很多工作。 我创建了一个宏,它从输入框中获取一个整数(我一直使用 2、3 和 4 来测试),并创建该数字的一组 4 层层次结
我在 PHP 中有一个 unix 时间戳: $timestamp = 1346300336; 然后我有一个我想要应用的时区的偏移量。基本上,我想应用偏移量并返回一个新的 unix 时间戳。偏移量遵循这
演示:http://jsfiddle.net/H45uY/6/ 我在这里想做的是将 的左上角设为跟随鼠标。代码在没有段落的情况下工作正常(请参阅上面的演示),但是当您添加段落时,被向上推,鼠标位于盒
假设我们有两个由无符号长(64 位)数组表示的位图。我想使用特定的移位(偏移)合并这两个位图。例如,将位图 1(较大)合并到位图 2(较小)中,起始偏移量为 3。偏移量 3 表示位图 1 的第 3 位
通过在 pageViewController 中实现 tableView,tableView 与其显示的内容不一致。对此最好的解决办法是什么? 最佳答案 如果您的 TableView 是 View C
我设置了一个在 nib 中显示地点信息的地点配置文件。当我在标准屏幕流程中推送此 View 时,它工作正常。但是,当我从另一个选项卡推送此 View 时,UINavigationBar 似乎抵消了它,
如果我想选择 5 条记录,我会这样做: SELECT * FROM mytable LIMIT 5 如果我想添加偏移量,我会这样做: SELECT * FROM mytable OFFSET 5 LI
我有一个应用程序,其中某些 View 需要全屏,而其他 View 不需要全屏。在某些情况下,我希望背景显示在状态栏下方,所以我在 View 加载时使用它来使 Activity 全屏显示: window
在下图中,我进行绘制,结果位于 A 点,就在我手指接触的地方。 如何使图像显示在实际触摸上方约 40pt。 (二) 我正在使用经典的 coreGraphic UITouch 代码,如下所示: - (v
只要键盘处于事件状态,我就会尝试偏移 UITextField,效果很好,直到我尝试了表情符号布局。有没有办法检测键盘输入的类型,以便找出高度差?谢谢 最佳答案 不是使用 UIKeyboardDidSh
这是我的 Swift 代码 (AppDelegate.swift): var window: UIWindow? var rootViewController :UIViewController? f
我有一个 div 作为绝对定位的 body 的直接子节点,其 css 属性定义如下: div[id^="Container"] { display: block; position: a
我是一名优秀的程序员,十分优秀!