更改scrollTop偏移
Change scrollTop offset
我使用的是bootstrap 3,在我的页面顶部有一个全屏英雄单元,下面是我的导航。我有一些js,可以让我的导航栏在你滚动过全屏英雄后固定在顶部。还有一些js用于我的平滑滚动链接。
问题是,在你滚动经过全屏英雄之前和之后,偏移量是不同的。但是,当你经过jumbotron时,它会很好地工作。我尝试了很多不同的东西,但我似乎能让它发挥作用。
在这里看看小提琴
这是我的js,用于平滑滚动链接:
$(document).ready(function() {
// navigation click actions
$('.scroll-link').on('click', function(event){
event.preventDefault();
var sectionID = $(this).attr("data-id");
scrollToID('#' + sectionID, 750);
});
// scroll to top action
$('.scroll-top').on('click', function(event) {
event.preventDefault();
$('html, body').animate({scrollTop:0}, 1200);
});
// mobile nav toggle
$('#nav-toggle').on('click', function (event) {
event.preventDefault();
$('#main-nav').toggleClass("open");
});
});
// scroll function
function scrollToID(id, speed){
var offSet = 95;
var targetOffset = $(id).offset().top - offSet;
var mainNav = $('#main-nav');
$('html,body').animate({scrollTop:targetOffset}, speed);
if (mainNav.hasClass("open")) {
mainNav.css("height", "1px").removeClass("in").addClass("collapse");
mainNav.removeClass("open");
}
}
if (typeof console === "undefined") {
console = {
log: function() { }
};
}
通过更改var offSet = 95;
,我可以调整偏移量,但在导航条粘到顶部之前使用180,而在粘到顶部时使用95,最好的方法是什么?
这里还有我在导航栏中使用的js:
$(function () {
/* $(".navbar-fixed-top").css({"top":$(".jumbotron").height()});
$(window).resize(function (e) {
$(".navbar-fixed-top").css({"top":$(".jumbotron").height()});
});*/
$(document).on( 'scroll', function(){
console.log('scroll top : ' + $(window).scrollTop());
if($(window).scrollTop()>=$(".jumbotron").height())
{
$(".navbar").addClass("navbar-fixed-top");
}
if($(window).scrollTop()<$(".jumbotron").height())
{
$(".navbar").removeClass("navbar-fixed-top");
}
});
});
你对angular.js开放吗?我有一个指令可以用来做这件事。如图所示。
我会为你获取链接。您可能会发现代码很有用。
本质上,当您将菜单拉到新的布局位置时,您需要创建一个重影dom元素来代替菜单。
编辑:这是
我不建议仅仅为了这个就抓住棱角。但您可以使用事件和逻辑的基础来构建自己的解决方案。
这是在创建一个元素并放置
$scope.spacer = $element.after(
'<div class="spacer" style="height:' + $element[0].clientHeight + 'px"> </div>').next();
则当菜单返回到其静态位置时,该元素被移除。
检查dom并观察它是如何变化的,这可能会帮助您了解需要发生的事件和变化。
编辑2解决方案:
以下是应用于您的JSFiddle 的概念
这不是最好的解决方案,但通过将margin: 0 0 -100px 0;
添加到.navbar
中,您就可以解决间距问题。
此外,由于缺少图像,您会收到22个控制台错误。我并不是说这会造成任何重大问题,但你最好还是失去它们。
问题是,当你没有滚动过英雄时,导航仍然是布局的一部分,并将其下方的内容推低一点。当你滚动经过英雄(手动或通过脚本)时,导航会被删除并定位。使得所有被吼到"向上跳"的东西都与导航高度完全一样。
这意味着,如果投资组合是顶部的1000px
,点击后你会说:从顶部转到1000px
;但随后porfolio将100px
向上移动(如上所述),这意味着它现在是顶部的900px
,而窗口按您的要求滚动1000px
。
当你滚动经过英雄时,它的位置不会改变。
- 针对重复发生的事件,使用moment.js防止DST偏移
- JQuery: scrollTop() exactly
- 使用javascript ajax post方法的未定义偏移PHP错误
- 如何在使用Kinetic拖动同一对象后,在旋转动画中保持先前的偏移
- 使用moment.js获取时间分区的偏移日期对象
- 添加新数据时D3.JS条形图列偏移量
- jQuery scrollTop-哈希错误
- 当偏移量改变时滚动顶部
- .scrollTop() only returning 0
- 引导数据偏移量底部
- 可以在调整窗口大小时重新调整stellar.js的元素偏移量
- Jquery scrollTop动画不工作"无法读取属性'top'无风
- 使用setIntervel()以动态高度偏移具有固定页眉的页面上的内容
- 每第n个图像具有下一个循环的余数偏移
- 用jQuery方法扩展Zepto.js?scrollTop()
- jquery animation.scrollTop()在mdl链接中不起作用
- 显示服务器时间,包括时区偏移
- 如何添加jQuery scrollTop偏移量
- 如何设置scrollTop()的偏移量
- 更改scrollTop偏移