Я расширил свой поиск и обнаружил: Обнаружение, когда элементы в прокручиваемом элементе div не отображаются , которые я интегрировал с моей функцией scrollerDivScrolling () следующим образом:
<script>
const UNDEFINED = undefined;
// Assign an onScroll function to the scroller div that monitors the div's scrolling ...
function checkInView( elem, partial ) {
var container = $( '.scrollable' );
var contHeight = container.height();
var contTop = container.scrollTop();
var contBottom = contTop + contHeight - 1;
var $elem = $( elem );
var elemTop = $elem.offset().top - container.offset().top;
var elemBottom = elemTop + $elem.height();
var isTotal = ( ( elemTop >= 0 ) && ( elemBottom <= contHeight ) );
var isPart = false;
if( partial ) {
isPart = ( ( ( elemTop < 0 ) && ( elemBottom > 0 ) ) || ( ( elemTop > 0 ) && ( elemTop <= container.height() ) ) );
}
return ( isTotal || isPart );
}
function scrollerDivScrolling() {
var div = scrollerDivScrolling.div;
for( var i = 0, iframes = scrollerDivScrolling.iframes, l = iframes.length, iframeDoc = null; i < l; ++i ) {
// If the element is in the scrollable div's visible area ...
if( checkInView( scrollerDivScrolling.iframes[ i ], true ) ) {
// If the element had not already been loaded ...
if( ( iframes[ i ].loaded === UNDEFINED ) || !iframes[ i ].loaded ) {
// Mark the element as loaded and load the element ...
iframes[ i ].loaded = true;
iframeDoc = iframes[ i ].contentWindow.document;
iframeDoc.open();
iframeDoc.write( 'Test' + ( i + 1 ) + ' ' + iframes[ i ].innerHTML );
iframeDoc.close();
}
}
else {
// Mark the element as NOT loaded and unload the element ...
iframes[ i ].loaded = false;
iframeDoc = iframes[ i ].contentWindow.document;
iframeDoc.open();
iframeDoc.write( '' );
iframeDoc.close();
}
}
}
scrollerDivScrolling.div = document.getElementById( 'scroller' );
scrollerDivScrolling.div.onscroll = scrollerDivScrolling;
scrollerDivScrolling.iframes = scrollerDivScrolling.div.getElementsByTagName( 'iframe' );
// Initialize the iframes with in the scroller div to 'show' their contents ...
for( var i = 0, iframes = scrollerDivScrolling.iframes, l = iframes.length, iframeDoc = null; i < l; ++i ) {
iframes[ i ].loaded = UNDEFINED;
}
scrollerDivScrolling();
</script>
Длямне, функция checkInView (...) показывает, что первые три элемента iframe находятся «в поле зрения», когда скроллер находится полностью сверху, что означает, что функция возвращает true для первых трех элементов в div, даже еслиВысота прокручиваемого div достаточно высока, чтобы показать первые два элемента iframe, но для меня это не проблема.
Используя эту технику, я могу «предварительно загрузить» iframe с помощью HTML, который онибудет отображаться, когда прокручиваемый div прокручивает каждый iframe в поле зрения, а теги img, содержащиеся в каждом iframe, обычно загружают свои изображения по мере их появления.
Для меня это помогает двумя способами: начальная загрузка страницы нене нужно загружать все фреймы, прежде чем страницу можно будет просматривать, и пользователь может начать прокручивать «строки» фреймов »подстраницы, и общий объем памяти, необходимый для хранения всех данных, несколько «сплющен», поскольку загружаются только данные страницы, необходимые для отображаемых элементов, и удаляются скрытые строки в прокручиваемом элементе div.когда их содержимое заменяется на ''.
Вот демонстрационная версия Pen, показывающая рабочий пример того, как это работает: Прокрутка Div из фреймов с задержкой загрузки