2009-11-17 3 views
0

Я хотел бы исчезнуть в нескольких полях, выровненных по горизонтали один за другим. Скажите, что каждое поле принадлежит классу fadeable и имеет идентификатор. Addtionally, я хотел бы, чтобы исчезнуть коробки с внешней стороны в Например:.несколько анимаций fadein в jquery

_ _ _ _ _ _ _ _ _ 
+_ _ _ _ _ _ _ _ 
+_ _ _ _ _ _ _ + 
+ + _ _ _ _ _ _ + 
+ + _ _ _ _ _ + + 
+ + + _ _ _ _ + + 

и так далее. Каков наилучший способ понять это с помощью jQuery?

Вот что у меня есть сейчас (грубо) - дать каждую коробку ДИВЫХ автоинкрементный идентификатора метаданных boxid и преформы следующего:

max = $(".fadeable:last").attr('boxid'); 
for(i=0;i<max;i++) 
{ 
    $("[boxid=" + i + "]").fadeIn('fast'); 
    $("[boxid=" + (max-i) + "]").fadeIn('fast'); 
} 

есть лучший/ровнее способ сделать это? (с анимацией или очередью?) Addtionally, что является лучшим способом для организации элементов в CSS?

Спасибо!

ответ

0
$(".fadeable").each(function() { 
    $(this).fadeIn('fast'); 
}); 
+0

Да, но будет ли это исчезать в порядке, который я хотел? – rashcroft22

+0

Нет, это приведет к их постепенному исчезновению, вы должны добавить задержку. – SimonDever

2

Есть Поиграйте с этим:

<html> 
    <head> 
     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
     <script type="text/javascript"> 

      function createThem() 
      { 
       for(var id = 0; id < 15; id++) 
       { 
        var el = document.createElement('div'); 
        $(el).attr('rel', id); 
        $(el).attr('class', 'fadeable'); 
        $(el).css('opacity', '0.0'); 
        $(el).css('display', 'inline'); 
        $(el).css('background', 'green'); 
        $(el).css('float', 'left'); 
        $(el).css('margin-right', '5px'); 
        $(el).text(id); 
        document.getElementById('container').appendChild(el); 
       } 
      } 

      function fadeThem() 
      { 
       var max = $(".fadeable:last").attr('rel'); 
       var timer = 0; 
       var command = ""; 
       for(i=0;i<max;i++) 
       { 
        command = "$('.fadeable[rel=" + i + "]').fadeTo('slow', 1.0);"; 
        command += "$('.fadeable[rel=" + (max-i) + "]').fadeTo('slow', 1.0);"; 
        window.setTimeout(command, timer); 
        timer += 1000; 
       } 
      } 
     </script> 
    </head> 
    <body>       
     <button onclick="createThem()" value="Create Them">Create Them</button> 
     <button onclick="fadeThem()" value="Fade Them">Fade Them</button> 
     <div id="container" style="background:blue;height:200px;width:300px"> 
      <!--div rel="1" class="fadeable" style="opacity:0.0;display:inline;background:green;float:left;margin-right:5px;">1</div> 
      <div rel="2" class="fadeable" style="opacity:0.0;display:inline;background:green;float:left;margin-right:5px;">2</div> 
      <div rel="3" class="fadeable" style="opacity:0.0;display:inline;background:green;float:left;margin-right:5px;">3</div> 
      <div rel="4" class="fadeable" style="opacity:0.0;display:inline;background:green;float:left;margin-right:5px;">4</div> 
      <div rel="5" class="fadeable" style="opacity:0.0;display:inline;background:green;float:left;margin-right:5px;">5</div> 
      <div rel="6" class="fadeable" style="opacity:0.0;display:inline;background:green;float:left;margin-right:5px;">6</div> 
      <div rel="7" class="fadeable" style="opacity:0.0;display:inline;background:green;float:left;margin-right:5px;">7</div> 
      <div rel="8" class="fadeable" style="opacity:0.0;display:inline;background:green;float:left;margin-right:5px;">8</div> 
      <div rel="9" class="fadeable" style="opacity:0.0;display:inline;background:green;float:left;margin-right:5px;">9</div> 
      <div rel="10" class="fadeable" style="opacity:0.0;display:inline;background:green;float:left;margin-right:5px;">10</div--> 
     </div> 
    </body> 
</html> 
+0

Вы можете удалить метод createThem() и кнопку и раскомментировать divs в контейнере, если хотите, не имеет никакого значения, каким образом вы это делаете, я просто играл с динамическим созданием. – SimonDever

2

Ну, это было похоже на ваш вопрос вызвал много исследований! Вот что я придумал. Я сделал его более похожим на стиль плагина jQuery, поэтому из-за него есть какой-то дополнительный код, но его можно легко использовать во всем проекте. Кроме того, вы можете установить fadeIn к false, и она будет исчезать в той же схеме:

<!DOCTYPE html > 
<html> 
<head> 
<style type="text/css" media="screen"> 
    #items { height:50px; text-align: center; line-height: 50px; } 
    #items div { 
    width: 50px; height: 50px; 
    float: left; position: relative; 
    background: red; 
    opacity: 0.0; -moz-opacity: 0.0; filter:alpha(opacity=0); 
    } 
</style> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
<script type="text/javascript" charset="utf-8"> 
    $.fn.fadeFromOutside = function(opts){ 
    if(this.size() > 0){ 
     var options = options = $.extend({}, $.fn.fadeFromOutside.defaults, opts), 
     size = this.size(), 
     steps = Math.ceil(size/2), // Always round up 
     fade_in = options.fadeIn, 
     time = options.length, 
     wait = Math.floor(time/steps), // Delay between fades 
     items = this.css({opacity: (fade_in ? 0.0 : 1.0)}), 
     fade_to = (fade_in ? 1.0 : 0.0); // Decide what the final opacity should be. 

     // We are using a private internal function to handle 
     // the processing and delayed fadeIn. 
     var fade_action = function(one, two, count_left, delay){ 
     /* If a callback is present, and this is the last iteration 
      then this sets it up to be called */ 
     var callback = null; 
     if(options.complete && count_left == (steps - 1)) 
      callback = options.complete; 

     /* Always animate 'one' */ 
     $(one).animate({opacity: fade_to}, {duration: time, complete: callback}); 
     /* Animate two if its not the same as one. 
      two will equal one on the last step of odd numbered sets */ 
     if(one != two) 
      $(two).animate({opacity: fade_to}, time); 

     if(count_left < steps){ 
      window.setTimeout(function(){ 
      fade_action(
       items.get(count_left), 
       items.get(size - 1 - count_left), 
       count_left + 1, 
       delay); 
      }, delay); 
     } 
     } 

     // Start the fade 
     fade_action(items.get(0), items.get(size - 1), 1, wait); 

    } 
    return this; // Don't break the chain 
    } 

    $.fn.fadeFromOutside.defaults = { 
    fadeIn: true, 
    length: 1000 
    } 

    /* DOM Ready */ 
    $(function(){ 
    $("#items > div").fadeFromOutside({ 
     fadeIn: true, // Set to false to fade out 
     length: 2000, // Take two seconds 
     complete: function(){ 
     alert('done!'); // Alert when finished 
     } 
    }); 
    }); 
</script> 

</head> 

<body> 
<div id="items"> 
    <div>1</div> 
    <div>2</div> 
    <div>3</div> 
    <div>4</div> 
    <div>5</div> 
    <div>6</div> 
    <div>7</div> 
    <div>8</div> 
    <div>9</div> 
    <div>10</div> 
</div> 
</body> 
</html> 

Если элементы начинаются как display:none или они должны FADEOUT и закончить, как display:none затем использовать следующую команду вместо того, чтобы инициировать плагин :

// fadeIn: Assumes the div's start as display:none 
$("#items > div") 
    .css({display: block, opacity: 0.0}) 
    .fadeFromOutside(); 

// fadeOut: Will hide all divs at the end 
$("#items > div") 
    .fadeFromOutside({ 
    complete: function(){ $("#items > div").hide() } 
    }); 
}); 
0

на основе исходного кода, просто сделать небольшую корректировку:

max = $(".fadeable:last").attr('boxid'); 
    for(i=0;i<max;i++) 
    { 
     $("[boxid=" + i + "]").fadeIn('fast', function(){ 
      $("[boxid=" + (max-i) + "]").fadeIn('fast'); 
     }); 

    } 

Thi s не может быть точным поведением, в котором вы нуждаетесь, но идея состоит в том, чтобы связать выцветание, чтобы следующий элемент не начинал анимацию до тех пор, пока последний элемент не закончится.

Это достигается с помощью параметра обратного вызова в функции fadeIn

+0

По-прежнему нет задержки. Кроме того, цикл не учитывает, что он хочет, чтобы он исчезал с обоих концов. Ваш код будет почти полностью исчезать на всех элементах и ​​запускать дополнительный набор fadeIn в конце без какого-либо эффекта. Вы правы, что он захочет использовать какую-то форму гнездования. –

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