Мне было интересно, есть ли способ создать масштабируемое (в основном) CSS-слайд-шоу для текстовых элементов - без изображений.
У меня есть текущая структура HTML:
<div class="mb-panel-container cf">
<div class="mb-panel-section mb-slider">
<div class="mb-panel active">
<h1>1.1</h1>
<p>slide 1.1</p>
<p class="datetime"></p>
</div>
<div class="mb-panel">
<h1>1.2</h1>
<p>slide 1.2</p>
<p class="datetime"></p>
</div>
<div class="mb-panel">
<h1>1.3</h1>
<p>slide 1.3</p>
<p class="datetime"></p>
</div>
</div>
<div class="mb-panel-section mb-slider">
<div class="mb-panel active">
<h1>2.1</h1>
<p>slide 2.1</p>
<p class="datetime"></p>
</div>
<div class="mb-panel">
<h1>2.2</h1>
<p>slide 2.2</p>
<p class="datetime"></p>
</div>
<div class="mb-panel">
<h1>2.3</h1>
<p>slide 2.3</p>
<p class="datetime"></p>
</div>
</div>
<div class="mb-panel-section mb-slider">
<div class="mb-panel active">
<h1>3.1</h1>
<p>slide 3.1</p>
<p class="datetime"></p>
</div>
<div class="mb-panel">
<h1>3.2</h1>
<p>slide 3.2</p>
<p class="datetime"></p>
</div>
<div class="mb-panel">
<h1>3.3</h1>
<p>slide 3.3</p>
<p class="datetime"></p>
</div>
</div>
</div>
Ноколичество слайдов будет варьироваться в зависимости от количества сделанных уведомлений.
У меня есть текущий CSS:
.mb-panel-container {
width: 100vw;
margin-top: 1px;
text-align: center;
}
.mb-panel-section {
width: calc( ( 100vw - 3px ) / 3 );
float: left;
margin-right: 1px;
}
.mb-panel-section.mb-slider {
height: calc( 100vh - (4em + 1.75em + 2em + 5em) );
}
.mb-panel-section .mb-panel {
line-height: 1em;
padding: 1em;
height: 100%;
width: 100%;
}
.mb-panel-section.mb-slider .mb-panel {
padding: 5em 2em 3em;
opacity: 0;
transition: opacity 2s linear;
}
.mb-panel-container .mb-panel-section .mb-panel.active { opacity: 1; }
И Javascript:
$(document).ready(function() {
var items = $('.mb-panel');
var currentItem = items.filter('.active');
window.setInterval( function(){
var nextItem = currentItem.next();
currentItem.removeClass('active');
if ( nextItem.length ) {
currentItem = nextItem.addClass('active');
} else {
// If you want it to loop around
currentItem = items.first().addClass('active');
}
}, 5000);
});
Тем не менее, хотя она и проходит через первую панель бесконечно, две другие не будут зацикливаться, а заканчиваются на последней панели.
Я не совсем уверен, где изменить код, и не хочудублировать код JS для каждой секции панели.