2017-02-06 50 views
0

这适用于Firefox和Internet Explorer,但不适用于Chrome,我已在多台运行Chrome的计算机上进行测试。Javascript addEventListener在Firefox和IE中工作,但不是Chrome?

有什么我错过了,导致这不工作在Chrome?

<script> 
document.addEventListener('DOMContentLoaded', function() { 
    var dealBar = function() { 
     var scroll = document.documentElement.scrollTop; 
     var sidebarDeals = document.querySelector('#sidebar__deals'); 
     var sidebarAdverts = document.querySelector('#sidebar__adverts'); 
     var adBottom = sidebarAdverts.offsetTop + sidebarAdverts.clientHeight; 

     if (scroll > adBottom) { 
      sidebarDeals.className = "sidebar__deals--fixed"; 
     } else { 
      sidebarDeals.className = "sidebar__deals--relative"; 
     }  
    } 

    window.addEventListener('scroll', function(e){ 
     dealBar(); 
    }); 
    dealBar(); 
}); 
</script> 

我在控制台中没有错误。

+0

定义“不起作用”。 –

+0

在Firefox和Internet Explorer中,当滚动大于adBottom时,它会更改类名,在Chrome中它什么也不做。 – Ash

+0

提供[mcve]演示 – charlietfl

回答

1

没有与事件侦听器的一个问题。

更改

var scroll = document.documentElement.scrollTop; 

var scroll = (document.documentElement.scrollTop || document.body.scrollTop); 

这样做的伎俩,似乎铬立足其滚动位置断<body>和Firefox基地而过<html>

Chrome浏览器为滚动返​​回0导致该功能不触发类更改。

1

当我删除与DOMContentLoaded事件相关的第一部分时,您的代码被触发:demo

我觉得你的问题在这里,Chrome可能会在之后执行你的代码,因此你的代码永远不会执行。

尝试删除该部分:也

<script> 
//document.addEventListener('DOMContentLoaded', function() { 
    var dealBar = function() { 
     var scroll = document.documentElement.scrollTop; 
     var sidebarDeals = document.querySelector('#sidebar__deals'); 
     var sidebarAdverts = document.querySelector('#sidebar__adverts'); 
     var adBottom = sidebarAdverts.offsetTop + sidebarAdverts.clientHeight; 

     if (scroll > adBottom) { 
      sidebarDeals.className = "sidebar__deals--fixed"; 
     } else { 
      sidebarDeals.className = "sidebar__deals--relative"; 
     }  
    } 

    window.addEventListener('scroll', function(e){ 
     dealBar(); 
    }); 
    //dealBar(); 
//}); 
</script> 

,关于滚动位置,你可能要检查这个帖子:JavaScript get window X/Y position for scroll

+0

试过这个,但不是运气。 我添加了consolelog(1),并在滚动它正在记录1,所以必须是Chrome不喜欢的其他脚本中的其他内容。 – Ash

+0

@Ash你尝试过javascript调试吗? –

+0

我只是做了console.log(滚动);在函数中和在铬中返回0. var scroll = document.documentElement.scrollTop; Chrome中存在的问题是否存在与Chrome不兼容的问题? – Ash

相关问题