2017-02-06 178 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

相關問題