javascript - 使用 css/javascript 平滑滚动固定 div 在 IE 中给出看似随机的结果

标签 javascript css

我有一个绝对定位的“左菜单”和一个“右菜单”div。我希望他们在滚动时跟随浏览器窗口。我的解决方案在 Opera、Firefox 和 Chrome 中运行良好,但在 IE 中的结果不可预测。有时它会按预期工作,但有时 div 不会返回“position: absolute”样式。

这是我的代码:

if(window.pageYOffset) {

    if(window.pageYOffset > 142) {

        document.getElementById("menuRight").style.position = "fixed";
        document.getElementById("menuRight").style.top = "0";
        document.getElementById("menuRight").style.marginTop = "10px";

        document.getElementById("menuLeft").style.position = "fixed";
        document.getElementById("menuLeft").style.top = "0";
        document.getElementById("menuLeft").style.marginTop = "10px";

    } else {

        document.getElementById("menuRight").style.position = "absolute";
        document.getElementById("menuRight").style.top = "152px";
        document.getElementById("menuRight").style.marginTop = "0px";

        document.getElementById("menuLeft").style.position = "absolute";
        document.getElementById("menuLeft").style.top = "152px";
        document.getElementById("menuLeft").style.marginTop = "0px";

    }

} else if(document.body && document.body.scrollTop) {

    if(document.body.scrollTop > 142) {

        document.getElementById("menuRight").style.position = "fixed";
        document.getElementById("menuRight").style.top = "0";
        document.getElementById("menuRight").style.marginTop = "10px";

        document.getElementById("menuLeft").style.position = "fixed";
        document.getElementById("menuLeft").style.top = "0";
        document.getElementById("menuLeft").style.marginTop = "10px";

    } else {

        document.getElementById("menuRight").style.position = "absolute";
        document.getElementById("menuRight").style.top = "152px";
        document.getElementById("menuRight").style.marginTop = "0px";

        document.getElementById("menuLeft").style.position = "absolute";
        document.getElementById("menuLeft").style.top = "152px";
        document.getElementById("menuLeft").style.marginTop = "0px";

    }

} else if(document.documentElement && document.documentElement.scrollTop) {

    if(document.documentElement.scrollTop > 142) {

        document.getElementById("menuRight").style.position = "fixed";
        document.getElementById("menuRight").style.top = "0";
        document.getElementById("menuRight").style.marginTop = "10px";

        document.getElementById("menuLeft").style.position = "fixed";
        document.getElementById("menuLeft").style.top = "0";
        document.getElementById("menuLeft").style.marginTop = "10px";

    } else {

        document.getElementById("menuRight").style.position = "absolute";
        document.getElementById("menuRight").style.top = "152px";
        document.getElementById("menuRight").style.marginTop = "0px";

        document.getElementById("menuLeft").style.position = "absolute";
        document.getElementById("menuLeft").style.top = "152px";
        document.getElementById("menuLeft").style.marginTop = "0px";

    }

}

如何使 IE 中的结果更可预测?

最佳答案

我想这可能是您的条件有问题。如果滚动返回到 0 时触发滚动处理程序,则每个条件都将返回 false,因为 0 已转换为 false。我想到的最简单的解决方法是在最后添加另一个 else 来恢复绝对位置:

if(window.pageYOffset) {
    [...]
} else if(document.body && document.body.scrollTop) {
    [...]
} else if(document.documentElement && document.documentElement.scrollTop) {
    [...]
} else {

    document.getElementById("menuRight").style.position = "absolute";
    document.getElementById("menuRight").style.top = "152px";
    document.getElementById("menuRight").style.marginTop = "0px";

    document.getElementById("menuLeft").style.position = "absolute";
    document.getElementById("menuLeft").style.top = "152px";
    document.getElementById("menuLeft").style.marginTop = "0px";

}

关于javascript - 使用 css/javascript 平滑滚动固定 div 在 IE 中给出看似随机的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13451732/

相关文章:

javascript - Firefox session 不会自动删除

javascript - 从 Angular JS ng-options/ng-repeat 中删除重复项

html - 在 OSX Chrome 上打印 HTML 页面对齐

css - 为什么绝对定位的元素仍然在悬停范围内,即使它在视觉上与父区域分离?

javascript - 检测 360 度视频 youtube 支持

javascript - React 函数式组件 - 说它不是一个函数

javascript - JS 和 AJAX Uncaught ReferenceError

css - WP 亮度或不透明度? - 使灰度缩略图变暗,翻转为彩色

html - 更改 'active' 的颜色

javascript - 如何使用css格式的Iconsax图标