Я писал об этом очень давно. В основном используя частичные классы и немного усилий (автоматических или ручных, в зависимости от того, как часто вы собираетесь менять веб-службу), вы можете заставить прокси-класс веб-службы реализовать интерфейс. Затем вы можете издеваться как обычно.
Если вы хотите дождаться завершения каждой анимации перед выполнением следующего шага, используйте обратные вызовы анимации, подробно описанные в документации :
$('#bar').click(function () {
$('#foo p').hide('slow', function(){
$(this).appendTo('#bar').show('slow');
});
});
Ожидаемый результат правильный. Наблюдаемое поведение может быть результатом hide («медленно»), который выполняется асинхронно . Таким образом, он выполняется, пока выполняется следующее действие. Таким образом, создается впечатление, что сначала к #bar добавляется p. Вы можете попробовать hide () без замедления, чтобы увидеть, имеет ли это значение.
show ()
и hide ()
на самом деле являются эффектами анимации, но когда не передаются аргументы, они используют «мгновенную» продолжительность. Однако из-за того, что они реализованы как анимации, это означает, что они не выполняются синхронно с цепочкой функций. Таким образом, вам действительно следует использовать обратный вызов от вызова hide ()
для запуска функции обратного вызова, которая вызывает append ()
, а затем show ()
.
Чтобы обеспечить выполнение что-то ПОСЛЕ эффекта, такого как скрыть или показать, используйте обратный вызов. http://docs.jquery.com/Effects/show#speedcallback
Для добавления:
Винсент прав, выполнение на самом деле
То, что вы видели, было результатом эффекта
Вполне уверен, что он выполняется в том порядке, в котором вы его вызываете, вероятно, запускает часть скрытия и через долю секунды добавляется к этому другому элементу, но часть анимации уже началась, это занимает больше времени, чем на миллисекунду, потому что вы устанавливаете его на «медленный», и он перескакивает в непрозрачности от 1 до 0, например, от 1 до 0,9 до 0,8 в миллисекундах.
$.fn.hide = function() { alert('hiding'); return this; };
$.fn.appendTo = function() { alert('appending To') }
$('body').hide().appendTo('html')
You have to use callback if you want to queue the other methods run after the show hide thing like "Sixten Otto" has said. The animation of show hide will not wait for append method to execute. It starts a separate thread with setInterval while in the meantime, other code is invoked. So the result you got is not unexpected.
Скрытие асинхронно. Если вы хотите дождаться его завершения, вам нужно поместить весь код, который вы хотите запустить после него, в функцию обратного вызова, которую вы передаете для скрытия в качестве параметра.