2016-05-31 4 views
0

Я следую этому руководству, инструктор идет довольно быстро и не объясняет некоторые части, поэтому я собираю много документации и до сих пор это довольно хорошо. Одна вещь, которую я не могу понять, почему это для моего .on ('blur', function() {.., мне нужно включить функцию() {} после продолжительности 400 мс. Почему мне не нужно включать функцию() {}, когда я использовал функцию фокуса? Если да, то какова цель этой функции в любом случае? Инструктор просто набрал это, и я не совсем уверен, почему. Кстати, я делаю небольшую поисковую систему и инструктор переживает, как это сделать.Функция размытия JQuery (из учебника)

$(document).ready(function(){ 

    var searchField = $('#query'); 
    var icon = $('#search-btn'); 

    $(searchField).on('focus',function(){ 

     $(this).animate({ 

      width:'100%' 

     },400); 

     $(icon).animate({ 
      right:'100px' 
     }, 400); 
    }); 

    $(searchField).on('blur', function(){ 
     if(searchField.val() == '') 
     { 
      $(searchField).animate(
       { 
       width:'45%' 
       },400,function(){}); 

      $icon.animate({ 
       right:'45%' 
       },400,function(){}); 


     } 

}); 

}) 
+0

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

+0

oh no I havent. Хороший звонок .. Я думаю, что они будут просто заполнены другим материалом позже? –

+1

Этот аргумент функции является необязательным, но если вы его предоставите, вы можете выполнить код в нем, который запускается при завершении анимации. – trincot

ответ

1

Я предполагаю, что вы имеете в виду пустой функционального блока здесь ?:

$(searchField).animate(
    { 
     width:'45%' 
    },400,function(){}); // <-- in here 

это функция обратного вызова. Поскольку анимация является асинхронной операция (бея ch должен принимать в этом случае 400 мс), он не блокирует код, чтобы дождаться его завершения. Поэтому, если вам нужно что-то, что вы хотите сделать после, он будет завершен, он войдет в этот функциональный блок.

Для примера рассмотрим следующее:

$(searchField).animate(
    { 
     width:'45%' 
    },400,function(){ 
     console.log('first'); 
    }); 
console.log('second'); 

Поскольку код является асинхронным, 'second' будет фактически вошли в консоль перед тем'first'. Это связано с тем, что в то время как .animate() «делает свою вещь» асинхронно, остальная часть кода продолжает выполняться. Обратный вызов затем вызывается после этой асинхронной операции.

Поскольку функциональный блок пуст, вам на самом деле он не нужен, и, возможно, он просто может полностью опустить его. Однако, возможно, что инструктор в этом учебнике помещает его в качестве заполнителя для будущего шага.

+0

Большое спасибо .. это делает так много смысла. –

+0

Мне было интересно, мы могли бы, конечно, сделать еще одну функцию отдельно, вместо того, чтобы выполнять функцию после 400 мс. Разница просто в том, что функция, поставленная в качестве параметра (после 400 мс), произойдет сразу после анимации? Если бы мы сделали совершенно отдельную функцию, выполняющую то же самое, это произойдет сразу? Просто пытаюсь увидеть значение функции обратного вызова –

+1

@Munt: Я не совсем уверен, что вы там просите. Если вы поместите код внутри обратного вызова, он будет выполнен после завершения асинхронной операции. (В основном последнее, что происходит внутри реализации .animate() ', - это вызов любой функции, переданной ему.) Если вы поместите этот код * после *' .animate() 'последовательно, то он будет вызываться сразу и не будет ждать завершения анимации. – David

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