2011-11-22 18 views
2

我遇到的问题是这样的代码:的Javascript:克服标准模式的差异

function scrollLeft() { 
    document.body.scrollLeft -= scrollSpeed; 
} 

它完美地在Chrome和Safari,但在IE和Firefox这是什么都不做。我缩小了这一事实,即在Firefox和IE标准模式下,他们接受document.documentElement.scrollLeft而不是document.body.scrollLeft,并且我的页面正在以标准模式呈现。

请注意,我以10ms的间隔运行此脚本,因此每次此功能需要执行时都无法运行大量笨重的检测脚本。

有没有人知道跨浏览器的方式或克服这一点的极其轻的方式?我在这个脚本中使用了jQuery库,但是Firefox和IE都不能识别$('body').scrollLeft(),我不确定这是为什么。

+1

为什么不使用[滚动](https://developer.mozilla.org/en/Window.scroll),[scrollTo](HTTPS://developer.mozilla。 org/en/Window.scrollTo)或[scrollBy](https://developer.mozilla.org/en/Window.scrollBy)? – Esailija

+0

@Esailija问题在于选择要滚动的内容,而不是'scrollLeft' –

+0

您正试图滚动窗口,是吗?那些滚动窗口。如果你想滚动一个特定的元素,你只需要使用该元素,而不是在或或 – Esailija

回答

1

使用逻辑或运算符回退。

document[body || documentElement].scrollLeft -= scrollSpeed 

这是非常快速的,所以你很少的开销。

奖励积分做到这一点,而不是

scrollLeft = (function() { 
    var docEl = document[body || documentElement]; 
    return function() { 
     docEl.scrollLeft -= scrollSpeed; 
    }; 
})(); 

这只能找到相关的元素再次参考,并关闭了持有它的临时变量。

+0

这会导致错误'未捕获的ReferenceError:未定义正文' –

+0

这不起作用。 'document.body'存在于所有的浏览器中,所以'docEl'在任何地方都是相等的'document.body'。您还必须等到文档树中存在这些元素。 – duri