Я создаю онлайн-портфолио для своей девушки и для этого простое слайд-шоу изображений с плавными переходами. Я хочу иметь возможность «скрыть» предыдущий «последний активный» слайд, когда отображается новый «активный».
Я изменил представленное здесь слайд-шоу (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.
После удаления активных и последних активных классов из вашего 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')
});
});
В основном вы ищете затухание. я обновил код.
Спасибо! Я также выяснил, что добавлял затухание, но проблема по-прежнему в том, что анимация постепенного появления нового слайда должна закончить воспроизведение до того, как будет выполнена следующая строка кода. Это означает, что когда я нажимаю «Далее», предыдущий слайд отображается за новым через 0,3 секунды, пока воспроизводится анимация постепенного появления, и сначала после этого предыдущий слайд исчезает или сразу скрывается. Я предполагаю, что хитрость заключается в том, чтобы либо выполнить все это одновременно, либо заполнить пространство, окружающее изображение, белым цветом, чтобы изображение за ним не было видно. Я ценю вашу помощь!
порядок прямо в коде. вы можете сначала затухать текущий слайд, а затем затухать в следующем слайде. это все в порядке, который вы указываете в своем коде.
Прежде всего, большое спасибо за быстрый ответ на мой вопрос. Я только что попытался адаптировать приведенное выше, и он фактически скрывает слайд за текущим, что было именно то, что я искал. Дело в том, что скрипт как бы выполняется построчно, сверху вниз. Это означает, что последний активный слайд сначала скрывается после завершения анимации затухания. Но это также означает, что когда я удаляю анимацию затухания, слайд немедленно скрывается! Я определенно на правильном пути — теперь мне просто нужно найти способ сохранить анимацию затухания.