Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IE在滚动时通过纯JavaScript向div添加类的问题_Javascript_Jquery_Html_Css - Fatal编程技术网

IE在滚动时通过纯JavaScript向div添加类的问题

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

在向下滚动浏览器一定数量后,我使用以下javascript向“features menu”div添加一个“sticky”类

通过前一段时间的搜索,我从stackoverflow的另一个用户那里看到了这段代码,但我找不到引用它的帖子。但我正在寻找一个不使用jQuery的示例

以下内容在Firefox、Chrome和MS Edge浏览器中非常有效,但在IE11上,该类似乎没有添加到div中

有没有人能在不使用jQuery的情况下建议IE的修复方案?非常感谢你

<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;