0

我正在尝试使用纯 JavaScript 编写一个简单的脚本,这会产生位置粘性效果。下面的代码对我很有效。

var siteHeader = document.getElementById('siteHeader'),
    siteNav = document.getElementById('siteNav');

    window.onscroll = function() {
        if ( siteNav.offsetTop < document.documentElement.scrollTop + 26 || siteNav.offsetTop < document.body.scrollTop + 26) {
            siteHeader.setAttribute("class","sticky");
        }
        else {
            siteHeader.setAttribute("class","");
        }
    }

有没有更聪明的方法来写这行?

if ( siteNav.offsetTop < document.documentElement.scrollTop + 26 || siteNav.offsetTop < document.body.scrollTop + 26) {

我试着写这个,但它似乎没有按照我想要的方式工作。

siteNav.offsetTop ? document.documentElement.scrollTop + 26 : siteNav.offsetTop < document.body.scrollTop + 26

如果三元条件看起来很愚蠢,请道歉。

4

1 回答 1

1

仅使用原始代码(根据您认为合适的建议修改...)

如果您只关心添加/删除“粘性”类......

siteHeader[siteNav < (document.documentElement || document.body).scrollTop + 26 ? "addClass" : "removeClass"]("sticky");

-- 编辑 --
没有注意到 siteHeader 是用 vanilla JS 选择的......

siteHeader.setAttribute("class", 
    siteNav < (document.documentElement || document.body).scrollTop + 26 
        ? "sticky" : "");

现在,“聪明”与可读性完全是主观的,但逻辑应该合适。

于 2014-12-04T20:45:46.403 回答