Как скрыть предыдущий слайд в простом слайд-шоу jQuery?

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

Я изменил представленное здесь слайд-шоу (http://jonraasch.com/blog/a-simple-jquery-slideshow), поэтому вместо автоматического цикла оно управляется кнопками «предыдущий/следующий». Это все отлично работает. В отличие от приведенного выше примера, мне нужно иметь изображения разного размера в слайд-шоу.

Проблема: то, как работает слайд-шоу, как стопка изображений, я вижу предыдущее изображение за текущим «активным». Например. при переключении между вертикальным (портретным) изображением и горизонтальным (пейзажным) изображением я вижу пейзаж за портретом.

Я пробовал метод jQuery .hide() в функции $nextSlide(), но не уверен, что это правильный способ сделать это. Я полный новичок в javascript и jQuery.

HTML:

<div id = "slideshow">
    <div class = "active">
        <img src = "horizontal.jpg">
    </div>

    <div>
        <img src = "vertical.jpg">
    </div>

</div>

<div id = "controls">
<span class = "control-prev">prev</span> / <span class = "control-next">next</span>
</div>

CSS:

#slideshow {
    position:relative;
    height:400px;
}

#slideshow DIV {
    position:absolute;
    top:0;
    left:0;
    z-index:8;
    opacity:0.0;
    height: 400px;
    background-color: white;
}

#slideshow DIV.active {
    z-index:10;
    opacity:1.0;
}

#slideshow DIV.last-active {
    z-index:9;
}

#slideshow DIV IMG {
    height: 350px;
    display: block;
    border: 0;
    margin-bottom: 10px;
}

JavaScript:

function nextSlide() {
    var $active = $('#slideshow DIV.active'); 
    if ( $active.length == 0 ) $active = $('#slideshow DIV:last'); 


    var $next =  $active.next().length ? $active.next() 
        : $('#slideshow DIV:first');


    $active.addClass('last-active');
    $next.css({opacity: 0.0})
        .addClass('active')
        .animate({opacity: 1.0}, 300, function() {
            $active.removeClass('active last-active');
        });
}
$(".control-next").click(function(){
    nextSlide();
    });

´´´

The goal is to have a slideshow that doesn't show the images like a stack. I bet the solution is very simple, but I can't work it out.
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
212
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После удаления активных и последних активных классов из вашего div... сбросьте их непрозрачность до 0,0, чтобы в следующий раз он снова анимировался (исчезал):

function nextSlide() {
    var $active = $('#slideshow DIV.active'); 
    if ( $active.length == 0 ) $active = $('#slideshow DIV:last'); 


    var $next =  $active.next().length ? $active.next() 
        : $('#slideshow DIV:first');


    $active.addClass('last-active');
    $next.css({opacity: 0.0})
        .addClass('active')
        .animate({opacity: 1.0}, 300, function() {
            $active.css({opacity: 0.0})
                   .removeClass('active last-active');
        });
}

Если вы также хотите, чтобы он постепенно исчезал, а не просто достигал непрозрачности 0... используйте следующее:

$next.css({opacity: 0.0})
            .addClass('active')
            .animate({opacity: 1.0}, 300, function() {
                $active.css({opacity: 1.0})
                       .animate({opacity: 0.0}, 300, function(){
                          $active.removeClass('active last-active')
                       });
            });

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

r-kas 29.05.2019 22:50

В основном вы ищете затухание. я обновил код.

Nawed Khan 29.05.2019 23:29

Спасибо! Я также выяснил, что добавлял затухание, но проблема по-прежнему в том, что анимация постепенного появления нового слайда должна закончить воспроизведение до того, как будет выполнена следующая строка кода. Это означает, что когда я нажимаю «Далее», предыдущий слайд отображается за новым через 0,3 секунды, пока воспроизводится анимация постепенного появления, и сначала после этого предыдущий слайд исчезает или сразу скрывается. Я предполагаю, что хитрость заключается в том, чтобы либо выполнить все это одновременно, либо заполнить пространство, окружающее изображение, белым цветом, чтобы изображение за ним не было видно. Я ценю вашу помощь!

r-kas 30.05.2019 09:53

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

Nawed Khan 30.05.2019 17:39

Другие вопросы по теме