Как использовать метод animate jquery для перемещения div вперед и назад
Я хочу сделать div анимировать горизонтально назад и вперед в определенной области. Проблема в том, что я не могу понять, как заставить мой div двигаться назад после того, как он продвинулся вперед.
вот скрипт, который я использую:
<script type="text/javascript">
var animatethis = function (targetElement, speed) {
$(targetElement).animate(
{
marginLeft: "+=250px"
},
{
duration: speed,
complete: function () {
animatethis(this, speed);
animatethis.stop();
$(targetElement).animate({ marginLeft: "-=250px" });
}
}
)
};
animatethis($('#q1'), 5000);
</script>
5 ответов
посмотреть в консоли браузера. animatethis
ничего не возвращает, что означает, что строка
animatethis.stop();
всегда будет сбой (что-то вроде "TypeError: не может вызвать метод"стоп " неопределенного"). Вы также смешиваете порядок анимации в complete
обратный.
остановитесь, дышите и подумайте о том, что на самом деле делает ваш код выше.
Итак, после marginLeft
увеличивается, вы хотите уменьшить его. затем вы хотите начать все сначала. Правильно? Итак:
function animatethis(targetElement, speed) {
$(targetElement).animate({ marginLeft: "+=250px"},
{
duration: speed,
complete: function ()
{
targetElement.animate({ marginLeft: "-=250px" },
{
duration: speed,
complete: function ()
{
animatethis(targetElement, speed);
}
});
}
});
};
animatethis($('#q1'), 5000);
есть много других способов, чтобы кожа Этот кот, но это работает. http://jsfiddle.net/mattball/rKu6Y/
вы пытаетесь это сделать? http://jsfiddle.net/vwH6R/2/
setInterval(function(){
$("div").stop(true,true).animate({left: 300}, 1000,
function(){ $(this).stop(true,true).animate({left: 0}, 1000);
});
}, 2000);
попробовать этой скрипка
HTML-код
<div class="myDiv">A Div</div>
JS
$('.myDiv').animate({
'margin-left':'50px'
}, 500, function(e){
$('.myDiv').animate({
'margin-left':'0px'
}, 500)});
Если вы собираетесь перемещать его взад и вперед несколько раз, вы можете обернуть его в функцию, которая вызывает себя. Что-то вроде этого:--2-->
function wobble(selector, amount, times, intSpeed) {
var string = String($(selector).css("marginLeft")).replace("px", ""),
leftMargin = parseInt(string, 10);
$(selector).animate({ marginLeft: (leftMargin + amount) + 'px' }, intSpeed, function () {
if (times > 0) {
wobble(selector, -amount, --times, intSpeed);
} else {
$(selector).css("marginLeft", leftMargin + 'px');
}
});
}
использовать jQuery queue()
метод для цепочки событий:http://api.jquery.com/queue/