javascript - 如何将类添加到下一个 DIV 并使用动态元素数淡出当前 - 多个实例

标签 javascript jquery html css slideshow

我想知道是否有办法为文本 div 创建一个可缩放的(主要是)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 代码。

最佳答案

我相信您正在寻找的东西比编辑所有这些元素更简单。一个纯 CSS 和 JS 的解决方案,没有 JQuery,会像这样。

const allSlides = document.querySelectorAll(".mb-slide");
const active = allSlides.filter(slide => slide.classList.contains("active"))[0];
const activeIndex = allSlides.findIndex(slide => slide === active);
const nextItem = allSlides[activeIndex + 1];
active.classList.remove("active");
nextItem.classList.add("active");

与此同时,您将从第一张具有 .active 类的幻灯片开始。在您的 CSS 中,您可以设置如下内容:

.mb-slide{
 // all your other CSS
 opacity: 0;
 transition: opacity 0.3s linear;
 }
.active{
opacity: 1;
transition: opacity 0.3s linear;
}

关于javascript - 如何将类添加到下一个 DIV 并使用动态元素数淡出当前 - 多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58670442/

相关文章:

javascript - LinkedIn 个人资料生成器没有显示任何内容?

javascript - 反转字符串中单词的字符顺序

javascript - _google 分析中的 _trackEvent 错误?

javascript - Kendo UI Grid 按数据项选择

javascript - 如何显示选定的表格行?

javascript - 拆分 window.location on/并与 : if ends in/don't add : 连接

javascript - 编码/保护 javascript 代码的最佳方式是什么?

jquery - 使用 jquery 对多个选择下拉选项进行排序

html - 空白或空格的 CSS 选择器

html - 使用 CSS Rotate 属性为元素设置动画