Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #61 (permalink)  
Старый 20.04.2017, 20:49
Аспирант
Отправить личное сообщение для macik Посмотреть профиль Найти все сообщения от macik
 
Регистрация: 17.06.2014
Сообщений: 32

Вообще как они сделали на сайте такой плавный переход ... http://ironfit.ancorathemes.com

Все что я тут попробовал имеет глюки ... только animate дает правильную анимацию но при этом не применим для div с перетеканием картинки в картинку ...
Кто то знает как это реализовано в ironfit.ancorathemes.com ?
Ответить с цитированием
  #62 (permalink)  
Старый 20.04.2017, 22:43
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

macik, особо в тему не вникал, но прогрузить (последовательно) картинки в кэш до старта галереи можно просто:
function preload(images, callback) {
	if (images.length) {
		var image = new Image();
		image.onload = image.onerror = function() {
			preload(images, callback);
		};
		image.src = images.pop();
	} else {
		callback();
	}
}
preload(['image3.jpg', 'image2.jpg', 'image1.jpg'], function(){ alert('galleryStart') });
пока идет фоновая прогрузка, пользователю, чтобы не скучал, можно что-то показать что идет процесс.

Может совсем не в тему, но также существуют всякие оптимизации (progressive/interlaced) самих картинок, что может дать более быстрое их отображение, типа как может видел когда при загрузке картинка сперва вроде мутная, а потом четкость догружается.

Последний раз редактировалось Rise, 20.04.2017 в 22:48.
Ответить с цитированием
  #63 (permalink)  
Старый 20.04.2017, 22:49
Аспирант
Отправить личное сообщение для macik Посмотреть профиль Найти все сообщения от macik
 
Регистрация: 17.06.2014
Сообщений: 32

Сообщение от Rise Посмотреть сообщение
macik, особо в тему не вникал, но прогрузить (последовательно) картинки в кэш до старта галереи можно просто:
function preload(images, callback) {
	if (images.length) {
		var image = new Image();
		image.onload = image.onerror = function() {
			preload(images, callback);
		}
		image.src = images.pop();
	} else {
		callback();
	}
}
preload(['image3.jpg', 'image2.jpg', 'image1.jpg'], function(){ alert('galleryStart') });
пока идет фоновая прогрузка, пользователю, чтобы не скучал, можно что-то показать что идет процесс.

Может совсем не в тему, но также существуют всякие оптимизации (progressive/interlaced) самих картинок, что может дать более быстрое их отображение, типа как может видел когда при загрузке картинка сперва вроде мутная, а потом четкость догружается.
спасибо.
Ноту проблема не в этом. Сейчас мне не нравится поведение всей скрипт на основании requestAnimationFrame, setTimeout и т. д. то поведение этой анимации не подходит. Она то играет то обрывает ... то еще как то ...
Ответить с цитированием
  #64 (permalink)  
Старый 20.04.2017, 22:55
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

requestAnimationFrame and preload images
macik,
вариант с предзагрузчиком от Rise,

<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style>
#foto_index{
  transition:all 3s ease;
   -webkit-transition:all 3s ease;
   -moz-transition:all 3s ease;
   -o-transition:all 3s ease;
  opacity: 1;
  background: url("http://img-fotki.yandex.ru/get/5640/35900228.10c/0_7388e_3ab59b4a_XL.jpeg.jpg") no-repeat center;
  z-index: -2;
  min-height: 600px;
  margin-top: -50px;
  margin-right: 0;
  margin-left: 0;
  -moz-background-size: 100%; /* Firefox 3.6+ */
    -webkit-background-size: 100%; /* Safari 3.1+ и Chrome 4.0+ */
    -o-background-size: 100%; /* Opera 9.6+ */
    background-size: 100%; /* Современные браузеры */
    background-size:cover;
}
</style>
<script>
window.addEventListener('DOMContentLoaded', function() {
var mas = [
      'http://img-fotki.yandex.ru/get/5640/35900228.10c/0_7388e_3ab59b4a_XL.jpeg.jpg',
      'http://1.bp.blogspot.com/-aleHkBUuqOI/VY0HrCytsXI/AAAAAAAAq1g/f2emGtdqdWo/s640/2015-06-05_0145.jpg',
      'http://www.fotki.ykt.ru/albums/userpics/2013/11-18/1384739526_image.jpg'
    ], i=1, a = performance.now();
function csaHead(b){
   if(b - a > 5000) {
    a = b;
    document.getElementById('foto_index').style.backgroundImage="url('"+mas[i]+"')";
 	i = ++i % mas.length;
  }

  requestAnimationFrame(csaHead)
}
function preload(images, callback) {
	if (images.length) {
		var image = new Image();
		image.onload = image.onerror = function() {
			preload(images, callback);
		}
		image.src = images.pop();
	} else {
		callback();
	}
}
preload(mas.slice(0), function(){ requestAnimationFrame(csaHead)});

});
</script>
</head>

<body>

<div id='foto_index'></div>



</body>
</html>

Последний раз редактировалось рони, 20.04.2017 в 22:57.
Ответить с цитированием
  #65 (permalink)  
Старый 20.04.2017, 23:03
Аспирант
Отправить личное сообщение для macik Посмотреть профиль Найти все сообщения от macik
 
Регистрация: 17.06.2014
Сообщений: 32

Рони, я сейчас тестирую ... Вроде лучше.
UP
Ну в Crom все работает отлично
в Firefox анимации нет, только редкий перебор.
в Safari старт работает хорошо, после ухода в фон, первый проход рвет потом опять все плавно.
Есть идея что надо останавливать анимацию когда окно не активно. Можно это как то сделать?

Последний раз редактировалось macik, 20.04.2017 в 23:13. Причина: Update
Ответить с цитированием
  #66 (permalink)  
Старый 20.04.2017, 23:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

macik,
css анимация background - работает нормально только в хроме или фон можно анимировать нормально только в хроме.
в остальных только сменой картинок.
Ответить с цитированием
  #67 (permalink)  
Старый 20.04.2017, 23:22
Аспирант
Отправить личное сообщение для macik Посмотреть профиль Найти все сообщения от macik
 
Регистрация: 17.06.2014
Сообщений: 32

Сообщение от рони Посмотреть сообщение
macik,
css анимация background - работает нормально только в хроме или фон можно анимировать нормально только в хроме.
в остальных только сменой картинок.
Но а как у http://ironfit.ancorathemes.com работает везде?
Ответить с цитированием
  #68 (permalink)  
Старый 20.04.2017, 23:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

macik,
там один блок заменяет другой --- но алгоритм тотже что тут в посте №35 только вместо картинок блоки
Ответить с цитированием
  #69 (permalink)  
Старый 20.04.2017, 23:38
Аспирант
Отправить личное сообщение для macik Посмотреть профиль Найти все сообщения от macik
 
Регистрация: 17.06.2014
Сообщений: 32

А можете подсказать как это сделать на блоках?
Ответить с цитированием
  #70 (permalink)  
Старый 20.04.2017, 23:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

смена блоков с разным фоном с opacity
macik,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .foto_index .bg{
     position: absolute;
     width: 100%;
     height:  100%;
     opacity: 0;
    -moz-background-size: 100%; /* Firefox 3.6+ */
    -webkit-background-size: 100%; /* Safari 3.1+ и Chrome 4.0+ */
    -o-background-size: 100%; /* Opera 9.6+ */
    background-size: 100%; /* Современные браузеры */
    background-size:cover;
    box-sizing: border-box;
    transition: opacity .8s ease-in;
  }
  .foto_index .bg.show{
    opacity: 1;
  }

 .foto_index{
  width: 100%;
  position: relative;
  z-index: -2;
  min-height: 600px;
  margin-top: -50px;
  margin-right: 0;
  margin-left: 0;

}
  </style>

  <script>
  window.addEventListener("DOMContentLoaded", function() {
    [].forEach.call(document.querySelectorAll(".foto_index"), function(el) {
        var img = el.querySelectorAll(".bg"),
            len = img.length,
            i = len - 1,
            p = el.dataset.pause || 5E3;
        !function g() {
            img[i].classList.remove("show");
            i = ++i % len;
            img[i].classList.add("show");
            window.setTimeout(g, p)
        }()
    })
});
  </script>
</head>

<body>
<div class="foto_index" data-pause="3000">
  <div class="bg" style="background-image: url(http://img-fotki.yandex.ru/get/5640/35900228.10c/0_7388e_3ab59b4a_XL.jpeg.jpg)"></div>
  <div class="bg" style="background-image: url(http://1.bp.blogspot.com/-aleHkBUuqOI/VY0HrCytsXI/AAAAAAAAq1g/f2emGtdqdWo/s640/2015-06-05_0145.jpg)"></div>
  <div class="bg" style="background-image: url(http://www.fotki.ykt.ru/albums/userpics/2013/11-18/1384739526_image.jpg"></div>
</div>
</body>
</html>

Последний раз редактировалось рони, 20.04.2017 в 23:48.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите, пжлста, найти (или написать) скрипт для смены картинок. Artweb Работа 9 25.02.2011 11:28
Скрипт смены картинок на каждый день года Артемий Б Работа 17 02.12.2010 22:49
Скрипт для динимического изменения div arsen Общие вопросы Javascript 3 30.09.2010 11:29
Скрипт смены картинок - помогите размножить profi555 Ваши сайты и скрипты 6 02.07.2010 23:32
Помогите оптимизировать скрипт смены изображений с анимацией Khmelevsky Элементы интерфейса 5 06.03.2010 19:02