2013-06-19 3 views
1

JSFiddle: FiddleAnimate, а затем заменить класс DIV с эффектом постепенного изменения

Как это должно работать следующим образом:

1 - красные блоки скользят сверху вниз
2 - как только это будет сделано, то красные коробки FADEOUT
3 - то синие FadeIn

Ниже приводится HTML:

<div class="posRel"> 
    <div class="trans1"></div> 
    <div class="trans2"></div> 
    <div class="trans3"></div> 
    <div class="trans4"></div> 
    <div class="trans5"></div> 
    <div class="trans6"></div> 
    <div class="trans7"></div> 
</div> 

Ниже приводится ЯШ:

for (i = 1; i <= 7; i++) { 
     $('.trans' + i).toggleClass('toggle'); 
    } 

    setTimeout(function() { 
     $('.toggle').fadeOut('slow', function() { 
      $(this).addClass('fSmall1').fadeIn('slow'); 
     }); 
    }, 2000); 

Ссылка на проект: http://50.87.144.37/~projtest/team/design/EO/page-2.html

Ссылка вопросам JSFiddle

, что я столкнулся:

  • fadeOut и fadeIn не работают
  • ничего лучше, чем устанавливать для этого?

Я довольно неопытный, когда дело доходит до js/jQuery, поэтому не стесняйтесь указывать на любую глупую ошибку. Благодарю.

+0

Не могли бы вы предоставить правильную ссылку на ваш тестовый чехол (например, в jsfiddle). SO не разрешает числовые URL (IP). – kleinfreund

+0

У вас нет прав доступа к этой ссылке? – AnAspiringCanadian

+0

Я уверен, что могу скопировать и вставить его, но он не доступен для кликов, потому что вы отформатировали его как код, потому что SO не разрешает такие ссылки (которые вы заметили). – kleinfreund

ответ

1

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

Во-первых, ваша проблема с выцветанием/привязкой связана с тем, как запускается ваша анимация. Вы по существу вызывая замирание на каждом элементе в отдельности, а затем исчезают в, но с функциональностью, которую вы описали в ваших требований вы должны стрелять один замирание на контейнере вместо:

for (i = 1; i <= 7; i++) { 
    $('.trans' + i).toggleClass('toggle'); 
} 

setTimeout(function() { 
    $('.posRel').fadeOut('slow', function() { 
     $('.toggle').addClass('fSmall1'); 
     $('.posRel').fadeIn('slow'); 
    }); 
}, 2000); 

Fiddle

плавный переход

Если вы хотите иметь гладкую увядает без него мигает, а потом обратно в вы можете использовать метод fadeTo() вместо этого. Пример FadeTo() можно найти ниже, это приведет к падению всех фигур, паузе на долю секунды, а затем изменению цвета. Вы можете поэкспериментировать с удалением setTimeout теперь, когда fadeTo управляет временем анимации, но я оставил его как можно ближе к оригиналу.

for (i = 1; i <= 7; i++) { 
    $('.trans' + i).toggleClass('toggle'); 
} 

setTimeout(function() { 
    $('.posRel').fadeTo('slow', 2, function() {$('.toggle').addClass('fSmall1');}); 
}, 2000); 

fadeTo() Example Fiddle

+0

Хорошее решение, однако, если вы посетите ссылку проекта, которую я опубликовал, то вы увидите, что теперь образы исчезают, а затем новые исчезают. Можете ли вы сказать мне, как сначала растворяется во втором? – AnAspiringCanadian

+0

Абсолютно, см. Мой комментарий относительно метода fadeTo выше, я скоро опубликую новую скрипку. – JonVD

+0

Обновлен js, чтобы включить скрипт FadeTo(), который должен вести себя так, как вы хотите. – JonVD

1

Если вы используете jQueryUI, это будет работать:

http://jsfiddle.net/zcYLM/11/ (это обновленное один)

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

JS:

$(document).ready(function() { 
    $('div[class*=trans]') 
     .toggleClass('toggle', 2000) 
     .promise() 
     .done(function() { 
      $(this) 
       .fadeOut(2000) 
       .promise() 
       .done(function() { 
        $(this) 
         .addClass('blue') 
         .fadeIn(2000); 
       }); 
     }); 
}); 

CSS:

.posRel { 
    position:relative; 
} 

div.posRel > div { 
    background-color:red; 
    position:absolute; 
    top:0px; 
    width:100px; 
    height:100px; 
} 

div.posRel > div.trans1 { left:-50px; } 
div.posRel > div.trans1.toggle { left:100px; top:150px; } 
div.posRel > div.blue { background-color:blue; } 
+0

Хм, я избегаю jQuery Ui на данный момент, но если у меня нет опции, я тогда рассмотрю это решение, спасибо в любом случае. – AnAspiringCanadian

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