jQuery.scrollTop()在IE中不触发$(window).scroll()

时间:2011-04-01 14:21:20

标签: javascript jquery

我正在创建一个单页网站,其中链接可以将页面向下滚动到网址的哈希部分中指定的元素。在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');
    }
});

1 个答案:

答案 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