2012-01-22 2 views
5

Я заметил это много, но он, наконец, начинает меня бить (простить каламбур). Когда я связываю html() с другими функциями, кажется, что html() запускается первым независимо. Например:jQuery html() Связанный с другими функциями Сроки выпуска

$("#news .inner").hide("slide", { direction: strOpposite }, 500).delay(1000).html(strData).show("slide", { direction: strDirection }, 500); 

Даже добавление delay() к нему, как показано, кажется, не решить эту проблему. Эта строка является частью эффекта сбрасывания страницы, который я реализовал для раздела архива новостей на веб-сайте. Есть идеи? Благодарю.

ответ

2

Когда цепь много методов вместе они будут выполняться в порядке, они приковали, но методы анимации добавить в очередь анимации и фактическая анимация происходит позже (в порядке убывания).

Как я понимаю, .delay() method только задерживает события в очереди анимации. Метод .html() не является анимацией.

Если это ваше намерение для вызова .html() после завершения метода .hide(), тогда вы должны поместить его в полный обратный вызов, предоставленный .hide() method.

Итак, если вы хотите скрыть, а затем изменить HTML, а затем показать, что вы можете сделать это:

$("#news .inner").hide("slide", { direction: strOpposite }, 500, 
         function() { $(this).html(strData); }) 
       .show("slide", { direction: strDirection }, 500); 

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

+0

Это эффективный пример использования обратных вызовов. Все это касались; Я хотел бы выбрать более одного ответа! Благодарю. –

+0

Спасибо. Я добавил короткую демоверсию, чтобы вы могли ее увидеть в действии ... – nnnnnn

+0

Nevermind. Я идиот. Позвольте мне сделать прогон, чтобы убедиться. –

2

«Эффекты», которые jQuery делает, добавляются в очередь эффектов, в отличие от вызовов, не связанных с эффектом (.html()), которые не выполняются и поэтому выполняются немедленно.

Вы можете попробовать добавить его в функцию обратного вызова, хотя вроде так:

$("#news .inner").hide("slide", { direction: strOpposite }, 500).delay(1000, function() { 
    $(this).html(strData) 
}).show("slide", { direction: strDirection }, 500); 

Или вы можете пытаться сделать это:

$("#news .inner").hide(500, function() { 
    $(this).html(strData); 
}).delay(1000).show("slide", { direction: strDirection }, 500); 

BTW Я думаю, что ваши hide() и show() звонки Арен» t синтаксически корректно. Вы должны проверить .hide() и .show() на jQuery API

+0

меня была та же мысль о 'шкурой() 'и' show() ', но потом я вспомнил, что у [jQuery UI версий] (http://jqueryui.com/demos/hide/) есть дополнительные параметры. – nnnnnn

1

Задержка для очереди действий (animate(), slideUp() и т. Д.) И не влияет на последовательность последовательных цепочек для недействительных эффектов. Вы можете использовать обратные вызовы для достижения истинной задержки для $ .html();

$(selector).animate({marginTop:0},500,function() { 
    $(this).html("CHANGE ME"); 
}); 
1

эффекты, как Скрытие и отображение элементов добавляются к эффектам очередь. Добавление в очередь происходит мгновенно, равно как и установка задержки в очереди. Функция Html также происходит мгновенно.

Функция задержки фактически не задерживает вызов следующей функции в цепочке. по умолчанию, без 2-го параметра он задерживает очередь FX.

Если вы хотите обойти это, вы можете создать свою собственную очередь, используя jQuery.Функции очереди (http://api.jquery.com/jQuery.queue/) или более просто использовать стандартные функции SetTimeout (https://developer.mozilla.org/en/DOM/window.setTimeout)

В качестве альтернативы вы можете также использовать полные обратные вызовы функции скрыть, чтобы продолжить цепочку

Смежные вопросы