- Ymox,
Bonjour à tous !
Je reviens à la charge pour des questions de réalisations cross-broswers
Comme bien d’autres avant moi, j’ai voulu réaliser un script de lazy-loading pour des lignes de tableaux. Comme j’ai l’habitude de Firefox, j’ai fait mes essais avec ce navigateur, tout allait bien. Je tente avec le dernier Safari, tip-top. Mais avec Chrome, le chargement n’est plus trop paresseux… Sans avoir de IE sous la main, je tente quand-même avec Opera, qui a le même comportement que Chrome.
Du peux que j’arrive à comprendre, les éléments chargés par AJAX s’ajoutent au-dessus de la limite inférieure que j’ai déjà atteinte en défilant. Et c’est comme s’il y avait un nouveau défilement pour arriver au bas du contenu…
Voici mon détecteur actuel.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $container = $('.table-responsive'); $container.scroll( function(e) { var $scrolled = $(e.target); var $table = $scrolled.find('table.ajax-table'); var identifier = $table.closest('[id]').attr('id'); if (!$table.length) { return; } if (((typeof ajaxTableLoading[identifier] === 'undefined') || (typeof ajaxTableLoading[identifier] !== 'undefined') && !ajaxTableLoading[identifier]) && ($scrolled.scrollTop() + $scrolled.innerHeight() >= $scrolled[0].scrollHeight - 5)) { ajaxTableLoading[identifier] = true; e.preventDefault(); loadMore($table); } }) |
ajaxTableLoading[identifier]
est remis à false
dans l’événement complete
de l’appel AJAX — ce n’est pas le souci, sans quoi je n’arriverais pas à avoir le comportement souhaité sous Firefox.
N.B. : sous Firefox, ça fonctionne aussi sans la linge 11.
Est-ce que quelqu’un saurait comment éviter ce "défilement" inopportun, ou en tout cas permettre un chargement vraiment lazy ?
Merci d’avance.