Тут есть решённая задача - http://plnkr.co/edit/FaKoF0M4QQB1OSdtpClb?p=preview
Суть в том, чтобы сделать предзагрузку картинок по мере прокрутки страницы.
Функцию showVisible - сделал слегка по-своему:
function showVisible() {
var imgs = document.getElementsByTagName("img");
for (var i = 0; i < imgs.length; i++) {
if (isVisible(imgs[i]) && imgs[i].hasAttribute("realsrc")) { // <--
imgs[i].src = imgs[i].getAttribute("realsrc");
imgs[i].setAttribute("realsrc", "");
}
}
}
Проблема возникает в проверке:
if (isVisible(imgs[i]) && imgs[i].hasAttribute("realsrc"))
а именно в методе hasAttribute - из-за него крашатся все картинки оказавшиеся в поле видимости. Проблему решает замена hasAttribute на getAttribute. Так и хочется сказать ё**ный кот, да как так то? Кто-то может объяснить почему возникает подобная дичь?
Метод hasAttribute
в вашем случае вернет всегда значение true
, вне зависимости от того, что у вас в аттрибуте, ведь согласно коду, аттрибут есть всегда, а вот значение не всегда у него есть.
А метод getAttribute
в одном случае вернет вам адрес ссылки, а в другом случае вернет пустое значение. Что в нашем случае означает:
var tmp = imgs[i].getAttribute("realsrc"); // вернуло 'https://js.cx/lazyimg/3-2.jpg'
Значит при проверке !tmp
- это false
.
В противоположном случае у нас будет пустое значение, не undefined
а просто ничего. Аттрибут есть, а значения нет.
var tmp = imgs[i].getAttribute("realsrc"); // вернуло '' - ничего нет
Значит при проверке !tmp
- это true
.
Поэтому вот так и получается, что условие всегда true
- отсюда и беда.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Для application/x-www-form-urlencoded пробелы должны быть заменены на "+", поэтому вам может понадобиться encodeURIComponent с дополнительной заменой "%20" на "+"
Столкнулся с непониманием того, какая высота у элементов с dislpay: none;
Подскажите, почему без if-а таймер работает нормально, а с ним - вообще не запускается?