2012-01-19 3 views
1

Когда функция анимации уменьшит высоту & Ширина div, то любая другая функция может работать параллельно. предположим, что я хочу размыть свой div до его высоты. & ширина становится 0 ноль. В принципе, я хочу, чтобы когда высота моего div & уменьшилась на 50%, тогда я хочу сделать это размытым. Является ли это возможным?Включение функции jquery aimate

animate имеет обратный вызов, но обратный вызов будет вызываться, когда анимация завершена..что я не хочу. здесь образец мой одушевленные код

$('#my-id').animate({width: 0, height: 0}, 1000); 

, если это возможно, то пожалуйста скажите мне решение с примерами кода. спасибо

ответ

2

Вы можете передать step function в animate(), и она будет называться для каждый шаг в анимации. В этой функции вы можете установить непрозрачность элемента соответствующим образом, как только его высота достигает половины своего первоначального значения:

$("#my-id").animate({ 
    width: 0, 
    height: 0 
}, { 
    duration: 1000, 
    step: function(now, fx) { 
     if (fx.prop == "height") { 
      var threshold = fx.start/2; 
      if (now < threshold) { 
       $(fx.elem).css("opacity", now/threshold); 
      } 
     } 
    } 
}); 

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

+0

Как определить, какая текущая высота и ширина от шаговой функции? несколько строк для меня не ясны, как .... что это такое ... var threshold = fx.start/2; какая информация теперь может дать? пожалуйста, обсудите подробно и положительно скажите мне ... как определить, какова текущая высота и ширина от функции шага? – Thomas

+0

Как объясняется на странице, с которой я связан, функция шага получает два аргумента: 'now', которое является текущим значением анимированного свойства, и' fx', который содержит анимированный элемент ('fx.elem'), анимированное свойство ('fx.prop') и начальные и конечные значения анимированного свойства (' fx.start' и 'fx.end'). Переменной «threshold» присваивается половина начальной высоты элемента и используется как для определения пересечения 50-процентного порога, так и для вычисления значения непрозрачности. –

+0

Я использую и проверяю код ур. он работает нормально, но так, как я хочу размыть свой div, которого не происходит. здесь я обновляю свой код. пожалуйста, просмотрите URL-адрес .. http://jsfiddle.net/Sj4eG/12/.Я устанавливаю порог жестко закодирован как 150, потому что моя высота и ширина div 300X300 px. поэтому я хочу, чтобы при анимации уменьшался размер моего div, близкого к 150 px, тогда я хочу плавно разделить div. Я попробовал samething с помощью кода ur ... но я не получаю эффект, который я хочу, используя код ur. поэтому, пожалуйста, проверьте код ур. – Thomas

0

Анимируйте свои параметры на 50%, затем сделайте fadeOut, а затем продолжите анимацию (но на самом деле последняя анимация мне не нужна вообще, потому что она уже невидима).

$('#my-id').animate({width: 50, height: 50}, 1000, function() { 
    $(this).fadeOut('fast', function() { 
     $(this).animate({width: 0, height: 0}, 1000); 
    }); 
}); 

или без последней анимации:

$('#my-id').animate({width: 50, height: 50}, 1000, function() { 
    $(this).fadeOut('fast', function() { 
     $(this).css({width: 0, height: 0}); 
    }); 
}); 
+0

Я не могу дать ширину жесткого кода, например, 50. Скорее, мне нужно обнаружить, что когда высота и ширина уменьшаются на 50%, тогда я должен сделать это затухающим. так скажите мне, как это сделать. – Thomas

+0

просто зайдите на этот сайт http://demos.kendoui.com/web/window/index.html. откуда просто закройте окно, и вы можете видеть, что окно начинает исчезать до того, как высота и ширина станут нулевыми. как достичь этого ... plzz guide. спасибо – Thomas

+0

В этом случае две анимации работают параллельно. Вам не нужно использовать какие-либо обратные вызовы, просто один раз запустите 2 анимации (а не в обратном вызове). Вот пример: http://jsfiddle.net/pefTW/ – Samich

1

Вы можете запустить 2 анимации один за другим:

$('#my-id').animate({width: 50%, height: 50%}, 1000).fadeOut("slow"); 
+0

Ур код имеет ошибку. 50% неверно. Я думаю, что не тестировал. – Thomas