#jquery
#jquery
Вопрос:
Этот код, похоже, нарушает оставшуюся часть моего кода?
function sam() {
$("#animate").children("#box")
.animate({
left: ' =1100'},8000, 'linear', function() {
$("#animate").children("#box").css("left", "0");
sam();
});
}
setInterval(sam());
Извините за короткий ответ, но я продолжал блокироваться из-за глупого сообщения о качестве
Комментарии:
1. Что означает «разбить оставшуюся часть моего кода»?
2. Это просто останавливает работу других частей моего кода только в firefox?
Ответ №1:
Попробуйте изменить
setInterval(sam());
Для
setInterval(function(){
sam()
}, 1000);
которая будет запускать sam() каждую секунду.Ваше использование setInterval неверно
Кроме того, удалите sam()
вызов sam()
функции.
Итак, окончательный код:
function sam() {
$("#animate").children("#box")
.animate({
left: ' =1100'},8000, 'linear', function() {
$("#animate").children("#box").css("left", "0");
});
}
setInterval(function(){
sam()
}, 1000);
Комментарии:
1. также нет необходимости вызывать sam() рекурсивно, поскольку setInterval позаботится о повторном выполнении
Ответ №2:
setInterval
нужен второй параметр для того, как часто вы собираетесь запускать код sam() . но я не знаю, хотите ли вы этого, похоже, это все равно делается.
function sam() {
$("#animate").children("#box")
.animate({
left: ' =1100'},8000, 'linear', function() {
$("#animate").children("#box").css("left", "0");
sam();
});
}
sam();
должно быть достаточно, если вы хотите повторять анимацию снова и снова или использовать setTimeout вместо setInterval.
Установленный интервал перезапустит код, даже если первый запуск не завершен, ваша анимация занимает 8 секунд, например, если вы скажете запускать sam () каждые 2 секунды, вы получите очень, очень плохой результат, потому что выполнение кодов занимает более 2 секунд, и вы также сказали, что его следует перезапуститьсам по себе. Я бы setInterval
вообще не использовал.
Демонстрация: http://jsfiddle.net/voigtan/tG7Gm/2 /
Комментарии:
1. кажется, работает: jsfiddle.net/voigtan/tG7Gm/1 как выглядит ваша разметка?
Ответ №3:
Вы можете использовать обратный вызов finished-animation для запуска новой анимации. Не могли бы вы уточнить, хотите ли вы, чтобы анимация начиналась после завершения первой, или просто иметь бесконечные анимации друг над другом?
Комментарии:
1. Я хочу, чтобы анимация постоянно повторялась
2. Что такое завершенный обратный вызов анимации?
3. Извините, это заняло так много времени. Читайте здесь: api.jquery.com/animate 2-й пример в разделе «Базовое использование».
Ответ №4:
Удалите ()
то, откуда вы передаете sam
в качестве обратного вызова. Вы хотите передать функцию, а не ее результат.
var sam = function() { // Changed this to show functions are variables
$("#animate").children("#box")
.animate({
left: ' =1100'},8000, 'linear', function() { // Not sure about =
$("#animate").children("#box").css("left", "0");
sam; // Pass the variable, not the result of the function
});
};
sam(); // Call the function the first time.
Однако я замечаю, что #box
это идентификатор. Итак, я экстраполировал то, что, по моему мнению, вы хотите сделать, и придумал эту демонстрацию:
var sam = function() { // Changed this to show functions are variables
$("#box").animate({left: $("#animate").width() 'px'}, 1000, 'linear')
.animate({left: '-' $("#box").width() 'px'}, 0, 'linear', sam);
};
sam(); // Call the function the first time.
#animate {
position: relative;
width: 200px;
height: 200px;
background-color: red;
overflow: hidden;
}
#box {
position: absolute;
width: 50px;
height: 50px;
left: 0;
top: 0;
background-color: blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="animate">
<div id="box"></div>
</div>
Или JsFiddle, если вы предпочитаете: http://jsfiddle.net/Gisleburt/tn8j7w8p/1 /