Переход одного div в другой: сделать более стабильным, убрать белую паузу, множественные затухания

#jquery #wordpress #fade

#jquery #wordpress #затухание

Вопрос:

У меня есть тестовая настройка, в которой миниатюра div переходит в другой div, хотя с этим есть пара проблем.

  1. Как я могу удалить белую паузу? На данный момент один div становится белым, а затем исчезает во втором div. Как я могу сделать так, чтобы он переходил из одного div в другой, не превращаясь в белый?
  2. Это немного нестабильно, если вы быстро наведете курсор на второй div, и второй div появится под исходным. Как я могу сделать это немного более стабильным?
  3. У меня будет несколько эскизов с разными изображениями и текстом в каждом, как я могу настроить сетку так, чтобы она включала несколько полей без одновременного их появления (т. е. по отдельности).

Вот код:

Javacript:

 <script type="text/javascript"> 

$(document).ready(function(){
            $(".phase-2").hide();
        });


$(function(){
$('.grid-box').hover(
        function(){
            $('.grid-box .phase-1').fadeOut(300, function(){
                $('.grid-box .phase-2').fadeIn(300);                         
            });
        },
        function(){
            $('.grid-box .phase-2').fadeOut(300, function(){
                $('.grid-box .phase-1').fadeIn(300);                         
            });
        }
        ); 
});
</script>
  

HTML:

 <div class="grid-box">
<div class="phase-1">
       <img class="grid-image" src="http://teamworksdesign.com/v2/wp-content/themes/default/images/dtr.jpg" alt="" height="152" width="210" />
   <div class="grid-heading">
        <h2>DTR Medical</h2>
        <h3>Branding, Web, Print</h3>
    </div> 
</div>
<div class="phase-2">
    <div class="grid-info">
        <h4>Probeything 2000</h4>
        <p>Marketing unglamorous single-use medical intruments is not simple. We helped Neurosign increasetheir sales by 25% and increasemarket awareness.</p>
    </div>
    <div class="grid-heading-hover">
        <h2>DTR Medical</h2>
        <h3>Branding, Web, Print</h3>
    </div> 
</div>
  

Комментарии:

1. Белая пауза возникает из-за того, что ее видимость стремится к нулю; используйте анимацию с опцией непрозрачности для увеличения и уменьшения яркости и оставьте ее на уровне 50%, затем используйте скрыть, как только это будет сделано.

2. Спасибо, Вэл, просто пропустил твой ответ. У вас есть пример кода, на который я мог бы посмотреть? Это на самом пределе моих возможностей!!

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

4. проверьте мой ответ ниже, и у вас есть рабочая демо-версия, так ее намного сложнее

Ответ №1:

1) Вместо того, чтобы выполнять затухание элемента наведения при обратном вызове, сделайте это немедленно. Это предотвратит отображение белого фона через:

 $('.grid-box .phase-1').fadeOut(300);
$('.grid-box .phase-2').fadeIn(300);
  

2) Самый простой способ сделать это — указать размер в контейнере миниатюр и добавить overflow: hidden; к нему.

3) Наконец, следующий код гарантирует, что будут затронуты только элементы, содержащиеся в наведенном div:

 $(function(){
    $('.grid-box').hover(
        function(){
            $('.phase-1', this).fadeOut(300);
            $('.phase-2', this).fadeIn(300);
        },
        function(){
            $('.phase-2', this).fadeOut(300)
            $('.phase-1', this).fadeIn(300);
        }
    ); 
});
  

Комментарии:

1. Приветствия. Почти готово, я снова загрузил его на тестовую страницу. Сначала все равно будет белым. Вопросы 2 и 3 отсортированы (с небольшим воспроизведением), так что спасибо за это. Кажется, что фаза-1 становится белой, а фаза-2 просто появляется.

2. Странно. Я раньше не видел такого поведения с помощью этой техники. Попробуйте добавить position: absolute; к вашему phase-1 и phase-2 разделениям. Вот пример, чтобы показать, что это работает: jsfiddle.net/byB6L

3. Идеально, я бы никогда не подумал, что это решит проблему, но это решило. Спасибо за всю помощь.

4. Есть ли способ сделать это щелчком мыши вместо наведения курсора мыши? Я попытался изменить вызов на .click, но это не работает в скрипте. Спасибо!

Ответ №2:

HTML

 <div class="grid-box">
    <div class="phase-1"></div>
    <div class="phase-2"></div>
</div>
  

JQ

 $(document).click(function (){
$('.grid-box .phase-1').animate({opacity:50},2000).queue(function(){
     $(this).hide();

});
$('.grid-box .phase-2').fadeIn(2000);
});
  

CSS

 .phase-1{width: 100px;height: 100px;background: red; position:absolute;}
.phase-2{width: 100px;height: 100px;background: blue;display: none; position:absolute;}
  

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

вот демонстрация этого в jsfiddle http://jsfiddle.net/NxJf8

Комментарии:

1. Я сделал так, чтобы это длилось 2 секунды, чтобы вы могли лучше видеть переход

2. Спасибо за усилия, Вэл, Рори исправил код, и все довольны переходом, так что, думаю, мы пойдем на это. Возможно, это даст кому-то еще альтернативу.

3. Нет проблем 🙂 пока это работает, не имеет значения, что вы используете, lol 🙂