2015-09-29 2 views
1

У меня есть элемент, который я оживляю для перемещения по экрану. От left:-100px до left:screen-width. Я петлю это 4 раза.Цикл анимации JS при возврате, чтобы скрыть элемент

При возврате элемента в исходное положение left:-100px, я не хочу, чтобы это было видно перемещение по экрану (справа налево) очень быстро.

Я попытался сделать это, сокрыв элемент с помощью .hide(), а затем показывая его через некоторое время (чтобы у него было время вернуться в исходное положение). Но это не работы:

$('.snake-image').hide(); 
$('.snake-image').css('top', height/2).css('left', currentPos); 
setTimeout(function(){$('.snake-image').show();},1000); 

Код:

$('body').append('<a href="#"><img src="https://dl.dropboxusercontent.com/u/48552248/projects/covve/website/2015/public/images/snake.png" class="snake-image" style="position:absolute;top:0;" />'); 

function goRight(currentPos) { 
    $('.snake-image').animate({ 
    left: currentPos 
    }, 100); 
} 

function moveSnake() { 
    while (currentPos <= width) { 
    goRight(currentPos); 
    currentPos += 20; 
    console.log(width + " x " + currentPos); 
    } 
} 

var currentPos, 
    height = $(window).height(), 
    width = $(window).width(), 
    i = 4; 

var intervalID = setInterval(function(){ 
    if (i > 0){ 
    currentPos = -100; 
    $('.snake-image').hide(); 
    $('.snake-image').css('top', height/2).css('left', currentPos); 
    setTimeout(function(){$('.snake-image').show();},1000); 
    moveSnake(); 
    i--; 
    console.log('Interval 1'); 
    } else { 
    clearInterval(intervalID); 
    } 
}, 100); 

Демо: http://jsfiddle.net/m0epjLym/

ответ

1

можно использовать одушевленные callback срабатывает в конце анимации, вы можете переместить деталь назад в Origina положение, а затем снова вызвать анимацию

Fiddle:http://jsfiddle.net/xgknu376/

+0

Спасибо. Я пытаюсь добавить 'setInterval()' ('timeOut()' также может работать) внутри обратного вызова animate каким-то образом, так что он немного ждет, прежде чем запускать анимацию снова. Но я не могу заставить его работать. Он съедает две петли (4 и выполняет только 2). – Alex

+1

Я добавил строку, чтобы сделать это, та же скрипка, вы должны использовать setTimeout вместо setInterval, в этом случае – user1555320

+1

извините измененный скрипт http://jsfiddle.net/ut0e8txp/ – user1555320

2

Вы можете сделать это:

$('.snake-image').animate({'opacity': 0}, 0); 
$('.snake-image').animate({'top': height/2}, 0).animate({'left': currentPos}, 0).delay(1000).animate({'opacity': 1}, 0); 

Функция задержки будет работать только на ite ms, которые находятся в очереди анимации.

Fiddle: http://jsfiddle.net/y995cts3/3/

+0

Спасибо, он работает. Тем не менее, рефакторинг должен быть выполнен, так как код грязный :) Изучение способов «улучшить» его. – Alex

+1

Вам это кажется лучше? http://jsfiddle.net/y995cts3/4/ –

+0

Вандермаулен: Да, спасибо! :) – Alex