Javascript:克服标准模式差异
我遇到的问题是此代码:Javascript:克服标准模式差异,javascript,jquery,Javascript,Jquery,我遇到的问题是此代码: function scrollLeft() { document.body.scrollLeft -= scrollSpeed; } 它在Chrome和Safari中工作得很好,但在IE和Firefox中却无所作为。我已经缩小了范围,在Firefox和IE标准模式下,他们接受document.documentElement.scrollLeft而不是document.body.scrollLeft,我的页面在标准模式下呈现 请注意,我以10毫秒的间隔运行此脚本,
function scrollLeft() {
document.body.scrollLeft -= scrollSpeed;
}
它在Chrome和Safari中工作得很好,但在IE和Firefox中却无所作为。我已经缩小了范围,在Firefox和IE标准模式下,他们接受document.documentElement.scrollLeft
而不是document.body.scrollLeft
,我的页面在标准模式下呈现
请注意,我以10毫秒的间隔运行此脚本,因此每次需要执行此函数时,我都无法承受运行大型笨重的检测脚本
有没有人知道一种跨浏览器的方法或者一种非常简单的方法来克服这个问题?我在这个脚本中使用jQuery库,但是Firefox和IE也不能识别
$('body').scrollLeft()
,我不知道为什么会这样。使用逻辑or操作符后退
document[body || documentElement].scrollLeft -= scrollSpeed
这很快,所以对您来说开销很小
要获得额外积分,请改为这样做
scrollLeft = (function () {
var docEl = document[body || documentElement];
return function () {
docEl.scrollLeft -= scrollSpeed;
};
})();
这只会找到一次相关的元素引用,并关闭保存它的临时变量。KISS:use
为什么不使用,或者?@Esailija问题在于选择要滚动的内容,而不是
scrollLeft
您正在尝试滚动窗口,是吗?那些滚动窗口。如果您想滚动一个特定的元素,只需使用该元素,而不必在或@Esailija之间进行猜测对不起,是的,您是对的,window.scrollBy()
可以完美地工作。也许你能回答,我能接受吗?这会导致一个错误Uncaught ReferenceError:body未定义
这不起作用document.body
存在于所有浏览器中,因此docEl
在任何地方都是相等的document.body
。您还必须等待这些元素出现在文档树中。
window.scrollBy( -scrollSpeed, 0 )