El siguiente código funciona bien en IE y Firefox, pero Chrome lo odia (se ejecuta pero es muy lento). Estoy seguro de que podría hacerse más amigable para el navegador, pero ¿cómo? itemPlaceholder es cientos de divs flotados 100x100 (por ejemplo, marcadores de posición de imagen). Estoy usando jquery 1.4.4 y Chrome v10.0.648.127.jQuery desplazamiento evento - detección de elemento desplazado a la vista - bajo rendimiento en Chrome
$(function() {
ReplaceVisible();
$(this).scroll(function() {
ReplaceVisible();
});
});
function ReplaceVisible() {
$('.itemPlaceholder').each(function (index) {
if (HasBeenScrolledTo(this)) {
$itemPlaceholder = $(this);
$itemPlaceholder.replaceWith('<img src="bicycle.jpg" />');
}
else {
return false;
}
});
}
function HasBeenScrolledTo(elem) {
var docViewTop = $(window).scrollTop();
var docViewBottom = docViewTop + $(window).height();
var elemTop = $(elem).offset().top;
return elemTop < docViewBottom;
}
Editar: reemplazado append
con replaceWith
otra manera conseguimos un montón de imágenes adjuntas al mismo elemento.
y recto de la boca del caballo: http://ejohn.org/blog/learning-from-twitter/ –
Hmm, cromo hace producir más eventos de desplazamiento, pero no es más órdenes de magnatude. El problema parece deberse a la edición del DOM (append). Quita esa línea, y el desplazamiento es suave. – Sprintstar