#javascript #оптимизация #img #attribute #properties
Тут есть решённая задача - 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. Так и хочется сказать ё**ный кот, да как так то? Кто-то может объяснить почему возникает подобная дичь?
Ответы
Ответ 1
Метод 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 - отсюда и беда.
Комментариев нет:
Отправить комментарий