【发布时间】:2011-02-19 16:46:56
【问题描述】:
下面的代码用于通过javascript查找可以滚动的元素(body或html)。
var scrollElement = (function (tags) {
var el, $el, init;
// iterate through the tags...
while (el = tags.pop()) {
$el = $(el);
// if the scrollTop value is already > 0 then this element will work
if ( $el.scrollTop() > 0){
return $el;
}
// if scrollTop is 0 try to scroll.
else if($el.scrollTop( 1 ).scrollTop() > 0) {
// if that worked reset the scroll top and return the element
return $el.scrollTop(0);
}
}
return $();
} (["html", "body"]));
// do stuff with scrollElement...like:
// scrollElement.animate({"scrollTop":target.offset().top},1000);
当document 的高度大于window 的高度时,此代码可以完美运行。但是,当document 的高度等于或小于window 时,上述方法将不起作用,因为scrollTop() 将始终等于0。如果DOM 被更新,代码运行后document 的高度超过了window 的高度。
另外,我通常不会等到 document.ready 设置我的 javascript 处理程序(这通常有效)。我可以在body 上临时附加一个高 div,以强制上述方法正常工作,但需要在 IE 中准备好文档(您不能在之前向 body 元素添加节点标签已关闭)。有关document.ready“反模式”主题read this的更多信息。
所以,我很想找到一个解决方案,即使document 很短,也能找到可滚动元素。有什么想法吗?
【问题讨论】:
-
为什么不使用 if ($el.scrollTop() >= 0) ?编辑:哇刚刚意识到这个问题太老了
标签: javascript jquery cross-browser scroll