Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.03.2015, 02:31
Новичок на форуме
Отправить личное сообщение для markovsdima Посмотреть профиль Найти все сообщения от markovsdima
 
Регистрация: 30.03.2015
Сообщений: 3

PNG спрайт анимация loop delay
Доброго времени суток!

Есть код, взятый с сайта хабрахабр, который воспроизводит анимацию бесконечно, при наведении.
Как упростить скрипт, чтобы анимация запускалась при открытии страницы, убрать всякие onmouseover, onmouseout, и задать задержку между каждым проходом спрайта?

<script>
var styles = {};
styles.cursor = 'pointer';
styles.width = '200px';
styles.height = '50px';
var elementId = 'gun';
var imgName = 'canvas.png';

spriteAnimation(elementId, imgName, styles);
spriteAnimation('ship', 'ship.png', styles);

function spriteAnimation(elementId, imgName, styles) {
	
	var img = document.createElement('img');
	var offset = 0;
	img.onload = function () {
		var element = document.getElementById(elementId);
		element.style.cursor     = styles.cursor;
		element.style.width      = styles.width;
		element.style.height     = styles.height;
		element.style.background = "url('" + imgName + "') " + offset + "px 50%";
		var i = 0;
		element.onmouseover = function() {
			interval = setInterval(function() {
				if (offset < img.width) {
					i++;
				} else {
					
					i = 0;
				}
				offset = -200 * i;
				element.style.background = "url('" + imgName + "') " + offset + "px 50%"; 
			} , 1000/15)
			then 
		}
		element.onmouseout = function(){
			clearInterval(interval)
		}
	}
	img.src = imgName;
}

</script>


http://habrahabr.ru/post/130193/
Ответить с цитированием
  #2 (permalink)  
Старый 30.03.2015, 04:46
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Заменить строки с 23 по 38 следующим:
delay();
function delay() {
    interval = setInterval(function() {
        if (offset < img.width) i++;
        else {
            i = 0;
            clearInterval(interval);
            setTimeout(delay, 1000 * wait)
        }
        offset = 75 * i;
        element.style.background = "url('" + imgName + "') " + offset + "px 50%"; 
    } , 1000/24)
}

и добавить переменную wait, которая будет определять задержку в секундах между циклами анимации

Последний раз редактировалось laimas, 30.03.2015 в 16:27.
Ответить с цитированием
  #3 (permalink)  
Старый 30.03.2015, 13:20
Новичок на форуме
Отправить личное сообщение для markovsdima Посмотреть профиль Найти все сообщения от markovsdima
 
Регистрация: 30.03.2015
Сообщений: 3

Пустая страница получается, никаких анимаций. Пробовал вставлять
var wait = 'число' в разных местах. Может нужно где-то в определённом месте?
Ответить с цитированием
  #4 (permalink)  
Старый 30.03.2015, 13:33
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Значит что-то не так делаете, а в каком месте и что, откуда брали смотрите.
Ответить с цитированием
  #5 (permalink)  
Старый 30.03.2015, 13:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>CSS-JS-Animation</title>
<style>
body{
	background-color:#333333;
}
</style>
</head>
<body>

<div id="ship"></div>

<script>
var styles = {};
styles.cursor = "pointer";
styles.width = "75px";
styles.height = "75px";

spriteAnimation("ship", "http://naxel.github.io/demos/canvas-css-js-animation/ship.png", styles);

function spriteAnimation(elementId, imgName, styles) {
    var img = document.createElement("img");
    var offset = 0;
    img.onload = function() {
        var element = document.getElementById(elementId);
        element.style.cursor = styles.cursor;
        element.style.width = styles.width;
        element.style.height = styles.height;
        element.style.background = "url('" + imgName + "') " + offset + "px 50%";
        var i = 0;
        interval = setInterval(function() {
            if (offset < img.width) i++;
            else {
                i = 0;
                clearInterval(interval);
                window.setTimeout(function() {
                    spriteAnimation(elementId, imgName, styles)
                }, 2000)
            }
            offset = 75 * i;
            element.style.background = "url('" + imgName + "') " + offset + "px 50%"
        }, 1000 / 24)
    };
    img.src = imgName
};

</script>
</body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 30.03.2015, 15:36
Новичок на форуме
Отправить личное сообщение для markovsdima Посмотреть профиль Найти все сообщения от markovsdima
 
Регистрация: 30.03.2015
Сообщений: 3

Большая благодарность вам за ответы. Код Рони у меня отлично работает, вариант laimas не получилось запустить.
Ответить с цитированием
  #7 (permalink)  
Старый 30.03.2015, 16:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от markovsdima
вариант laimas не получилось запустить.
пост 2 строка 13 }
Ответить с цитированием
  #8 (permalink)  
Старый 30.03.2015, 16:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

рони, ну и глазастый же

Исправлено )
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Анимация на чистом JS Tecvid Events/DOM/Window 12 27.11.2014 12:46
Анимация из PNG и JS. Solovei95 Ваши сайты и скрипты 6 14.10.2011 05:57
PNG Анимация Solovei95 Ваши сайты и скрипты 0 25.05.2011 14:09