Код ниже используется для поиска элемента, который можно прокручивать (текст или html) через javascript.
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 (это обычно работает). Я мог бы временно добавить высокий div к body
, чтобы заставить вышеуказанный метод работать, НО, который потребовал бы готовности документа в IE (вы не можете добавить узел к элементу тела до тег закрыт). Подробнее о теме document.ready
«anti-pattern» читайте здесь .
Итак, я бы хотел найти решение, которое находит прокручиваемый элемент, даже если document
короткое. Есть идеи?