我正在创建一个单页网站,其中链接可以将页面向下滚动到网址的哈希部分中指定的元素。在Firefox& Chrome浏览器工作正常,但在IE中尝试时,scroll
事件似乎没有在页面加载时触发。
这是检查哈希并滚动到文档特定部分的代码,这发生在$(document).ready()
if(location.hash != '' && location.hash != '#!/home') {
var obj_id = location.hash.substr(3, location.hash.length);
$('html, body').scrollTop($('#' + obj_id).offset().top - 80);
}
我尝试通过在该代码的末尾添加$(window).scroll()
来强制它触发滚动,但这似乎只是将滚动重置为0.。
谢谢,
修改
很抱歉,我不认为我是在清楚自己,但这段代码在技术上运行正常,但我的脚本中还有一个$(window).scroll(function() { ... });
事件处理程序,当滚动到某一点时,将我的标题附加到页面顶部。
以下是代码:
var obj = $('#header-background');
var obj_height = $('#header-background').outerHeight(true);
obj.wrap('<div style="width: ' + obj.outerWidth(true) + 'px; height: ' + obj_height + 'px; display: block">');
var top = obj.offset().top - parseFloat(obj.css('marginTop').replace(/auto/,0)) + 20;
$(window).scroll(function() {
var y = $(this).scrollTop();
if(y - (obj_height - 80) >= top) {
obj.addClass('fixed').css({
'height': '80px'
});
} else {
obj.removeClass('fixed').css({
'height': '245px'
}, 'fast');
}
});
答案 0 :(得分:0)
您是否进行了一些调试以查看其中断的位置?我对这类事情的策略是首先确定它与以下内容有多远:
if(location.hash != '' && location.hash != '#!/home') {
console.log("setting scroll top");
var obj_id = location.hash.substr(3, location.hash.length);
console.log("object: %o", obj_id);
console.log("scrolling to: %s", $('#' + obj_id).offset().top - 80);
$('html, body').scrollTop($('#' + obj_id).offset().top - 80);
}
这将帮助您验证您从哈希和诸如此类的东西中获得有用的东西。我想知道你是否从$('#'+ obj_id).offset()得到一个有效值.top