Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.03.2016, 19:58
Аспирант
Отправить личное сообщение для K_PECT Посмотреть профиль Найти все сообщения от K_PECT
 
Регистрация: 10.12.2015
Сообщений: 47

Плавное появление картинок
Добрый день, форумчане!
Есть скрипт который подгружает картинки по мере прокрутки страницы.

// ID родительского элемента
var lazy_parent_id='gallery';
function lazy_load() {
 
    // Картинка-заместитель
    var lazy_replacer='img/1px.png';
    var container=document.getElementById(lazy_parent_id);
    if (container) {
        var im=container.getElementsByTagName('img');
        // Сохранить адрес исходной картинки и заменить его на прозрачный GIF
        for (var i=0; i<im.length; i++) {
            var el=im[i];
            if (el.src) {
                el.setAttribute('lazy',el.src);
                el.lazy=el.src;
                el.src=lazy_replacer;
            }    
        }    
    }
 
    // Установить обработчики событий окна
    window.onscroll = lazy_load_proc;
    window.onresize = lazy_load_proc;
    // Сразу же показать картинки в видимой области
    lazy_load_proc();
}
function lazy_load_proc() {
    var doc = document.documentElement;
    var body = document.body;
 
    // Получить размеры видимой области страницы (кроссбраузерно)
    if (typeof(window.innerWidth) == 'number') {
        my_width = window.innerWidth;
        my_height = window.innerHeight;
    }
    else if (doc && (doc.clientWidth || doc.clientHeight)) {
        my_width = doc.clientWidth;
        my_height = doc.clientHeight;
    }
    else if (body && (body.clientWidth || body.clientHeight)) {
        my_width = body.clientWidth;
        my_height = body.clientHeight;
    }
 
    // Получить смещение страницы относительно ее верха
    if (doc.scrollTop) { dy=doc.scrollTop; } else { dy=body.scrollTop; }
 
    // Обработка всех картинок в контейнере
    var container=document.getElementById(lazy_parent_id);
    if (container) {
        var im=container.getElementsByTagName('img');
        for (var i=0; i<im.length; i++) {
            var el=im[i];
            // Если атрибут lazy есть, то обработать картинку
            if (el.lazy) {
                // Получить координаты картинки от верха страницы
                var coord=lazy_get_position(el);
                // Если картинка попала в видимую область, то показать ее.
                // Плюс берется запас в 100 пикселов для более плавной подгрузки
                if (coord.y>(dy-my_height-100) && coord.y<(dy+my_height+100)) {
                    // Прописать адрес исходной картинки и убрать атрибут lazy
                    el.src=el.lazy;
                    el.setAttribute('src',el.lazy);
                    el.lazy='';
                    el.removeAttribute('lazy');                
                }    
            }
        }
    }
}
function lazy_get_position(element) {
    var offsetLeft=0;
    var offsetTop=0;
    do {
        offsetLeft+=element.offsetLeft;
        offsetTop+=element.offsetTop;
    }
    while (element=element.offsetParent);
    return {x:offsetLeft, y:offsetTop};
}

<div id="gallery">
<img width="900" height="600" src="img/slides/01.jpg" />
<img width="900" height="600" src="img/slides/02.jpg" />
<img width="900" height="600" src="img/slides/03.jpg" />
<img width="900" height="600" src="img/slides/04.jpg" />
<img width="900" height="600" src="img/slides/05.jpg" />
<img width="900" height="600" src="img/slides/06.jpg" />
<img width="900" height="600" src="img/slides/07.jpg" />
<img width="900" height="600" src="img/slides/08.jpg" />
<img width="900" height="600" src="img/slides/09.jpg" />
<img width="900" height="600" src="img/slides/10.jpg" />
</div>

<script type="text/javascript">
lazy_load();
</script>

Скрипт работает. Но изображения появляются резко. Немного глаз режет.
Помогите, пожалуйста, сделать плавное появление изображений!
Ответить с цитированием
  #2 (permalink)  
Старый 24.03.2016, 20:27
Аспирант
Отправить личное сообщение для K_PECT Посмотреть профиль Найти все сообщения от K_PECT
 
Регистрация: 10.12.2015
Сообщений: 47

Может попробовать, например, через $("#gallery").fadeIn(1000);
Правда не совсем понимаю как это реализовать.
В идеале картинка должна сначала загрузиться, а потом плавно появиться.
Помогите если не трудно!
Ответить с цитированием
  #3 (permalink)  
Старый 24.03.2016, 21:58
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Вендорные префиксы и пути к картинками сами поменяете
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<style>
@keyframes fadeIn{
	from{
		opacity : 0;
	}
	to{
		opacity : 1;
	}
}
</style>
<script>
   // ID родительского элемента
var lazy_parent_id='gallery';
function lazy_load() {
 
    // Картинка-заместитель
    var lazy_replacer='img/1px.png';
    var container=document.getElementById(lazy_parent_id);
    if (container) {
        var im=container.getElementsByTagName('img');
        // Сохранить адрес исходной картинки и заменить его на прозрачный GIF
        for (var i=0; i<im.length; i++) {
            var el=im[i];
            if (el.src) {
                el.setAttribute('lazy',el.src);
                el.lazy=el.src;
                el.src=lazy_replacer;
            }    
        }    
    }
 
    // Установить обработчики событий окна
    window.onscroll = lazy_load_proc;
    window.onresize = lazy_load_proc;
    // Сразу же показать картинки в видимой области
    lazy_load_proc();
}
function lazy_load_proc() {
    var doc = document.documentElement;
    var body = document.body;
 
    // Получить размеры видимой области страницы (кроссбраузерно)
    if (typeof(window.innerWidth) == 'number') {
        my_width = window.innerWidth;
        my_height = window.innerHeight;
    }
    else if (doc && (doc.clientWidth || doc.clientHeight)) {
        my_width = doc.clientWidth;
        my_height = doc.clientHeight;
    }
    else if (body && (body.clientWidth || body.clientHeight)) {
        my_width = body.clientWidth;
        my_height = body.clientHeight;
    }
 
    // Получить смещение страницы относительно ее верха
    if (doc.scrollTop) { dy=doc.scrollTop; } else { dy=body.scrollTop; }
 
    // Обработка всех картинок в контейнере
    var container=document.getElementById(lazy_parent_id);
    if (container) {
        var im=container.getElementsByTagName('img');
        for (var i=0; i<im.length; i++) {
            var el=im[i];
            // Если атрибут lazy есть, то обработать картинку
            if (el.lazy) {
                // Получить координаты картинки от верха страницы
                var coord=lazy_get_position(el);
                // Если картинка попала в видимую область, то показать ее.
                // Плюс берется запас в 100 пикселов для более плавной подгрузки
                if (coord.y>(dy-my_height-100) && coord.y<(dy+my_height+100)) {
                    // Прописать адрес исходной картинки и убрать атрибут lazy
					
					if (coord.y > my_height) 
						el.style.animation = 'fadeIn 2s ease-in ';
                    el.src=el.lazy;
                    el.lazy='';
                    el.removeAttribute('lazy');                
                }    
            }
        }
    }
}
function lazy_get_position(element) {
    var offsetLeft=0;
    var offsetTop=0;
    do {
        offsetLeft+=element.offsetLeft;
        offsetTop+=element.offsetTop;
    }
    while (element=element.offsetParent);
    return {x:offsetLeft, y:offsetTop};
}
</script>
<div id="gallery">
<img width="900" height="600" src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" />
<img width="900" height="600" src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" />
<img width="900" height="600" src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" />
<img width="900" height="600" src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" />
<img width="900" height="600" src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" />
<img width="900" height="600" src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" />
<img width="900" height="600" src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" />
</div>
<script>
lazy_load();
</script>

</body>

</html>

Последний раз редактировалось destus, 24.03.2016 в 22:41.
Ответить с цитированием
  #4 (permalink)  
Старый 24.03.2016, 22:37
Аспирант
Отправить личное сообщение для K_PECT Посмотреть профиль Найти все сообщения от K_PECT
 
Регистрация: 10.12.2015
Сообщений: 47

Огромное спасибо! Очень благодарен! Выручили!
Ответить с цитированием
  #5 (permalink)  
Старый 24.03.2016, 22:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

destus,
var-а маловато
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Плавное появление картинок realgleb Общие вопросы Javascript 4 02.09.2012 14:32
Плавное исчезновение и появление изображения Surlik jQuery 9 17.03.2012 14:27
Плавное перемещение картинок в галерее Адриан Общие вопросы Javascript 0 09.02.2012 20:43
Как сделать плавное появление ? saturn Элементы интерфейса 5 12.11.2011 03:16
сделать плавное переключение картинок asker Библиотеки/Тулкиты/Фреймворки 2 11.09.2010 18:15