Пока применил такое решение (без посторонних js):
В этом файле (строки 8 и 21) вместо {$oTopic->getTextShort()} и {$oTopic->getText()} прописываем соответственно:
Хоть как-то разбудить сообщество))
По сути решение неполноценное. т.к. мы лишаемся новой фичи.
Я попытался вставить сюдаvar scroll = $(window).scrollTop();
А после подгрузки опять вернуть это значение $(window).scrollTop(scroll);
Но почему-то не работает. Может поможете? ;)
Использую браузер Vivaldi (Chromium-based).
Как это ни парадоксально — но картинки все равно грузятся. Скрипт вроде отрабатывает. Я даже попробовал не подключать lazyload(images); — и даже в этом случае они грузятся, хоть и не отображаются (т.к. у них уже нет src).
Хотя описание DOMContentLoaded говорить об обратном ¯\_(ツ)_/¯
Попробовал другие браузеры (все последних версий):
Firefox — картинки грузятся сразу
Chrome — картинки грузятся сразу
Opera — картинки грузятся сразу
MS Edge — и о чудо! Все отработало как надо!
Насчет DOMContentLoaded можете почитать по ссылке. Картинки при DOMContentLoaded не будут загружены, а уйдут в canceled, потому что при load у них уже не будет src.
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* %{SERVER_NAME}%{REQUEST_URI} [R=301,L]
В этом файле (строки 8 и 21) вместо
{$oTopic->getTextShort()}и{$oTopic->getText()}прописываем соответственно:{$oTopic->getTextShort()|replace:'<img':'<img loading="lazy"'} {$oTopic->getText()|replace:'<img':'<img loading="lazy"'}Работает в новых браузерах благодаря поддержке атрибута loading и благодаря Smarty-функции replace
this.getMoreAll = function () { if (this.isBusy) { return; } var lastId = $('#stream_last_id').val(); if (!lastId) return; $('#stream_get_more').addClass('stream_loading'); this.isBusy = true; var url = aRouter['stream']+'get_more_all/'; var params = {'last_id':lastId,'date_last':this.dateLast}; ls.hook.marker('getMoreAllBefore'); ls.ajax(url, params, function(data) { if (!data.bStateError && data.events_count) { var scroll = $(window).scrollTop(); // ДОБАВЛЕНО $('#stream-list').append(data.result); $('#stream_last_id').attr('value', data.iStreamLastId); $(window).scrollTop(scroll); // ДОБАВЛЕНО } if (!data.events_count) { $('#stream_get_more').hide(); } $('#stream_get_more').removeClass('stream_loading'); ls.hook.run('ls_stream_get_more_all_after',[lastId, data]); this.isBusy = false; }.bind(this)); };Вот бы теперь это «прикрутить» в объекте ajax для всех методов сразу через хуки.
По сути решение неполноценное. т.к. мы лишаемся новой фичи.
Я попытался вставить сюда
var scroll = $(window).scrollTop();А после подгрузки опять вернуть это значение
$(window).scrollTop(scroll);Но почему-то не работает. Может поможете? ;)
Как это ни парадоксально — но картинки все равно грузятся. Скрипт вроде отрабатывает. Я даже попробовал не подключать
lazyload(images);— и даже в этом случае они грузятся, хоть и не отображаются (т.к. у них уже нет src).Хотя описание DOMContentLoaded говорить об обратном ¯\_(ツ)_/¯
Попробовал другие браузеры (все последних версий):
Firefox — картинки грузятся сразу
Chrome — картинки грузятся сразу
Opera — картинки грузятся сразу
MS Edge — и о чудо! Все отработало как надо!
Видимо браузеры «чудят»…
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script> // Селектор для узконаправленного применения, // например внутри поста let imgSelector = '.post__content img'; window.addEventListener("DOMContentLoaded", () => { let images = document.querySelectorAll(imgSelector); images.forEach( (element) => { let imgSrc = element.getAttribute('src'); element.removeAttribute('src'); element.setAttribute('data-src', imgSrc); }) }); </script> </head> <body> <div class="post__content"> <img src="//via.placeholder.com/200x200/" alt="" class="lazyload"> <img src="//via.placeholder.com/300x300/" alt="" class="lazyload"> </div> <img src="//via.placeholder.com/100x100/" alt=""> <!-- Пример скрипта из твоего поста --> <script src="https://cdn.jsdelivr.net/npm/lazyload@2.0.0-rc.2/lazyload.js"></script> <script> let images = document.querySelectorAll(imgSelector); lazyload(images); </script> </body> </html>Эту строку нужно заменить на эту