2012-09-14 125 views
2

该脚本在FF和IE中非常完美,但不适用于Chrome。有人可以帮助医生找到问题吗?Chrome为什么不运行这个Javascript?

如果statmenst似乎没有运行时,他们应该,他们什么时候应该。

var top = 285; 
var bottom = 650; 

var pageheight, maxscroll; 


window.onload = function(){ 

    pageheight = document.body.offsetHeight; 

    maxscroll = pageheight - (bottom+40); 

} 

    window.onscroll = function(){ 

     var element = document.getElementById("guide-menu"); 

     if(window.pageYOffset < top){ 

      element.style.position = "absolute"; 
      element.style.top = "300px"; 

     } 

     if(window.pageYOffset > top){ 

      element.style.top = "10px"; 
      element.style.position = "fixed"; 
      element.style.marginTop = "0px"; 

     } 

     if(window.pageYOffset > maxscroll){ 

      element.style.position = "absolute"; 

      element.style.marginTop = (pageheight - bottom - 40) + "px"; 

     } 

} 
+0

什么是top top和maxscroll的值? –

+0

这不是标准属性,[MDN](https://developer.mozilla.org/en-US/docs/DOM/window.scrollY)可能会有所帮助。 – RobG

回答

2

“top”在chrome中有不同的含义。只要尝试重命名顶部变量。

+0

谢谢Prcela,解决了这个问题! – user1671375

2

“top”变量返回最上面的浏览器窗口。 Chrome是唯一不支持覆盖此变量的主要浏览器。

将您的变量重命名为“myTop”之类的东西完美无缺。

此代码运行良好。

var myTop = 285; 
    var bottom = 650; 

    var pageheight, maxscroll; 


    window.onload = function(){ 
     pageheight = document.body.offsetHeight; 
     maxscroll  = pageheight - (bottom+40); 

     window.onscroll = function() 
     { 
      var element = document.getElementById("guide-menu"); 
      if(window.pageYOffset < myTop) 
      { 
       element.style.position = "absolute"; 
       element.style.top = "300px"; 
      } 

      if(window.pageYOffset > myTop) 
      { 
       element.style.top = "10px"; 
       element.style.position = "fixed"; 
       element.style.marginTop = "0px"; 
      } 

      if(window.pageYOffset > maxscroll) 
      { 
       element.style.position = "absolute"; 
       element.style.marginTop = (pageheight - bottom - 40) + "px"; 
      } 
     } 
    } 

顺便说一下,检查您是否为IF语句提供了正确的条件。如果你想要一个与网页一起滚动的菜单,那么你必须先交换两个条件。

+0

Chrome有一件坏事... imo ...你不能覆盖所有的值...设置'var top = 123;'什么都不做!!?还有一个bug被添加到Chrome的列表中。 – Pebbl

+0

这已经在这里讨论http://stackoverflow.com/questions/11063644/redefine-reference-to-topmost-window-window-top – Kryz

+0

啊 - 感谢您的链接 - 它只影响'var top;'当它是在全局范围内设置......所以不会那么糟糕......无论如何,将代码封装在匿名函数中是一种很好的做法,所以这通常不会成为问题。 – Pebbl

相关问题