IE在滚动时通过纯JavaScript向div添加类的问题
在向下滚动浏览器一定数量后,我使用以下javascript向“features menu”div添加一个“sticky”类 通过前一段时间的搜索,我从stackoverflow的另一个用户那里看到了这段代码,但我找不到引用它的帖子。但我正在寻找一个不使用jQuery的示例 以下内容在Firefox、Chrome和MS Edge浏览器中非常有效,但在IE11上,该类似乎没有添加到div中 有没有人能在不使用jQuery的情况下建议IE的修复方案?非常感谢你IE在滚动时通过纯JavaScript向div添加类的问题,javascript,jquery,html,css,Javascript,Jquery,Html,Css,在向下滚动浏览器一定数量后,我使用以下javascript向“features menu”div添加一个“sticky”类 通过前一段时间的搜索,我从stackoverflow的另一个用户那里看到了这段代码,但我找不到引用它的帖子。但我正在寻找一个不使用jQuery的示例 以下内容在Firefox、Chrome和MS Edge浏览器中非常有效,但在IE11上,该类似乎没有添加到div中 有没有人能在不使用jQuery的情况下建议IE的修复方案?非常感谢你 <script type = "t
<script type = "text/javascript" >
myID = document.getElementById("features-menu");
var myScrollFunc = function() {
var y = window.scrollY;
if (y >= 400) {
myID.className = "sticky"
} else {
myID.className = ""
}
};
window.addEventListener("scroll", myScrollFunc);
</script>
myID=document.getElementById(“功能菜单”);
var myScrollFunc=函数(){
var y=window.scrollY;
如果(y>=400){
myID.className=“粘性”
}否则{
myID.className=“”
}
};
addEventListener(“滚动”,myScrollFunc);
如果你在web控制台中查看,你会看到一个错误,告诉你addEventListener
不是旧版IE上的一个功能。不幸的是,如果你看得很有趣,进入(兼容)模式,并且没有addEventListener
(或其他一些现代功能),IE11将步履蹒跚。例如,如果您的页面位于内部网络上,默认情况下IE将使用兼容模式,其行为类似于IE7,并且会失败,因为IE7没有addEventListener
您可以对此进行测试,并改用attachEvent
:
if (window.addEventListener) {
window.addEventListener("scroll", myScrollFunc);
} else {
window.attachEvent("onscroll", myScrollFunc);
}
(请注意“打开”。)
这种浏览器的不一致性,再加上DOM非常冗长和笨拙,就是为什么我们有像jQuery这样的库的原因。:-)(并不是说应该使用jQuery[或任何其他库],只是说这种东西是它们存在的主要原因。)
请注意,
attachEvent
和addEventListener
并不完全相同,但这两个连接事件以及您所展示的内容的行为都是相同的。要更彻底地处理差异,请参阅中的hookEvent
函数。问题在于IE中未定义的窗口。滚动
。这是一种替代方法:
谢谢你的帮助。然而,问题出在IE11上,而不是旧版本上。我也试过使用上面列出的代码片段,但仍然无法在IE上使用。这不是浏览器不一致。这是唯一没有包括在内的问题。不值得为额外的两三行javascript使用jQuery。人们常常把“浏览器不一致”称为“仅IE”问题。@Rob:如果浏览器A做一件事,浏览器B做另一件事,那就是浏览器不一致。为什么不重要。记住,
attachEvent
首先出现;正是W3C决定不使用M$的创新,而是定义不同(更复杂)的语义。(请不要误解,我不是m$的粉丝。IE7至少应该支持DOM2事件。)如果您将jQuery行作为推荐阅读,请原谅;事实并非如此。这只是一个观察。@AK:IE11会蹒跚而行,如果你觉得有趣的话,请参阅更新后的第一段。但是如果你尝试了这个,但没有成功,那么这不是问题,或者不是唯一的问题。这可能是对的,或者你需要做上述和希克迪尔的改变。(如果两者都是,请接受他/她的回答,并加上评论说两者都是。)谢谢!仅仅是换行就成功了!还感谢T.J.Crowder的见解。非常感谢。为后续行动干杯,答案中的一些好信息确实——我们两人都投了赞成票。
var y = window.scrollY || window.pageYOffset;