【问题标题】:Multiple article slideshow in one section一个部分中的多篇文章幻灯片
【发布时间】:2021-01-07 15:43:08
【问题描述】:

我目前正在博客网站的帖子部分工作,您将有多个帖子标题,其中包括一些带有幻灯片的标题,如下所示:

https://jsfiddle.net/xs43Lb9y/(您可以点击图片查看幻灯片“作品”)

这是我的 HTML 代码

    <div class="post-slideWrapper"> //in real life you will have multiple of this in one section
        <ul class="post-slide">
            <li class="active">
                <img src="img/article_bg/slide/4.jpg" alt="">
            </li>
            <li>
                <img src="img/article_bg/slide/1.jpg" alt="">
            </li>
            <li>
                <img src="img/article_bg/slide/3.jpg" alt="">
            </li>
        </ul>
        <div class="post-orderWrapper">
            <ul class="post-slideOrder">
                <li class="active"></li>
                <li></li>
                <li></li>
            </ul>
        </div>
    </div>

这是我的 javascript:

    var slide_post = document.querySelectorAll('.post-slide'), //get the post slide (which will have multiple )           
        bullet_list = document.querySelectorAll('.post-slideOrder'), //for add style to the bullet
        cur_pos = 0, // This is the one that cause the problem
        isAnimation = false; // just prevent spam click thing
    console.log(bullet_list);
    for (let i = 0; i < slide_post.length; i++) {
        slide_post[i].addEventListener('click', function () {
            var slide_child = this.children,
                bullet_child = bullet_list[i].children;


            if (isAnimation) { // just prevent spam click thing
                return false;
            }
            isAnimation = true; 

            // responsible for the move slide (assume the initial state is hidden , only the one which active is show)
            slide_child[cur_pos].classList.remove('active');
            bullet_child[cur_pos].classList.remove('active');
            if(cur_pos < slide_child.length-1) {
                cur_pos++;
            } else {
                cur_pos = 0;
            }
            slide_child[cur_pos].classList.add('active');
            bullet_child[cur_pos].classList.add('active');


            setTimeout(() => { // just prevent spam click thing
                isAnimation = false;
            }, 800);
            })

    }

我写的代码只有在只有一个幻灯片帖子的情况下才有效(这在真实的博客网站中是永远不会发生的)。当我添加多个有幻灯片的帖子时,它会无法正常工作。

我知道问题在于 cur_pos 值。但是我不知道如何创建一个“slideprocess”功能,以便我页面中所有有幻灯片的帖子都可以使用它来正常运行。
谁能给我解决方案,非常感谢。

【问题讨论】:

    标签: javascript html css web slideshow


    【解决方案1】:

    我所做的是在函数中关闭您的代码。然后脚本为每个幻灯片调用这个函数。

    示例:

    var wrappers = document.querySelectorAll('.post-slideWrapper');
    for (var i = 0; i < wrappers.length; i++) {
        slideShow(wrappers[i]);
    }
    
    function slideShow(wrap) {
    
        var slide_post = wrap.querySelector('.post-slide'); //get the post slide (which will have multiple )           
        var bullet_list = wrap.querySelector('.post-slideOrder'); //for add style to the bullet
        var cur_pos = 0; // This is the one that cause the problem
        var isAnimation = false; // just prevent spam click thing
        var bullet_child;
        var slide_child;
        // console.log(bullet_list);
    
        slide_post.addEventListener('click', function () {
            slide_child = this.children;
            bullet_child = bullet_list.children;
    
    
            if (isAnimation) { // just prevent spam click thing
                return false;
            }
            isAnimation = true;
    
            // responsible for the move slide (assume the initial state is hidden , only the one which active is show)
            slide_child[cur_pos].classList.remove('active');
            bullet_child[cur_pos].classList.remove('active');
            if (cur_pos < slide_child.length - 1) {
                cur_pos++;
            } else {
                cur_pos = 0;
            }
            slide_child[cur_pos].classList.add('active');
            bullet_child[cur_pos].classList.add('active');
    
    
            setTimeout(() => { // just prevent spam click thing
                isAnimation = false;
            }, 800);
        })
    
    }
    .content__post {
        max-width: 300px;
        background-color: white;
        display: block;
        width: 100%;
        padding-bottom: 20px;
        margin: 0 auto;
        margin-bottom: 30px;
        transition: all 0.3s ease-in-out;
    }
    
    /* POST SLIDE */
    .post-slideWrapper {
        width: 100%;
        position: relative;
        overflow: hidden;
    }
    
    .post-orderWrapper {}
    
    .post-slideOrder {
        position: absolute;
        bottom: 30px;
        left: 50%;
        transform: translateX(-33px);
        display: flex;
        list-style-type: none;
        align-items: center;
        cursor: pointer;
        z-index: 5;
    }
    
    .post-slideOrder li {
        width: 12px;
        height: 12px;
        background-color: black;
        border-radius: 50%;
        margin: 0 5px;
        transition: 0.3s ease-in-out;
    }
    
    .post-slideOrder li:hover {
        background-color: white;
    }
    
    .post-slideOrder .active {
        background-color: white;
    }
    
    .post-slide {
        width: 300%;
        position: relative;
        display: flex;
        cursor: pointer;
        list-style-type: none;
    }
    
    .post-slide>li {
        width: 100%;
        position: relative;
        top: 0;
        opacity: 0;
        transition: opacity 0.6s ease-in-out;
    }
    
    .post-slide>li:nth-child(1) {
        left: 0;
    
    }
    
    .post-slide>li:nth-child(2) {
        left: -33.3333333%;
    
    }
    
    .post-slide>li:nth-child(3) {
        left: -66.6666666%;
    }
    
    .post-slide>.active {
        opacity: 1;
        z-index: 1;
    }
    
    .post-slide img {
        max-width: 100%;
        display: block;
    }
    
    /* END POST SLIDE  */
    <!-- in real life you will have multiple of this in one section -->
    <div class="post-slideWrapper">
        <ul class="post-slide">
            <li class="active">
                <img src="https://images.unsplash.com/photo-1605797654030-3a167bdf0c67?ixid=MXwxMjA3fDB8MHx0b3BpYy1mZWVkfDY3fEo5eXJQYUhYUlFZfHxlbnwwfHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=60"
                    alt="">
            </li>
            <li>
                <img src="https://images.unsplash.com/photo-1607053810523-091ed202189a?ixid=MXwxMjA3fDB8MHx0b3BpYy1mZWVkfDc1fEo5eXJQYUhYUlFZfHxlbnwwfHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=60"
                    alt="">
            </li>
            <li>
                <img src="https://images.unsplash.com/photo-1607462109225-6b64ae2dd3cb?ixid=MXwxMjA3fDB8MHx0b3BpYy1mZWVkfDY2fEo5eXJQYUhYUlFZfHxlbnwwfHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=60"
                    alt="">
            </li>
        </ul>
        <div class="post-orderWrapper">
            <ul class="post-slideOrder">
                <li class="active"></li>
                <li></li>
                <li></li>
            </ul>
        </div>
    </div>
    
    
    <!-- in real life you will have multiple of this in one section -->
    <div class="post-slideWrapper">
        <ul class="post-slide">
            <li class="active">
                <img src="https://images.unsplash.com/photo-1605797654030-3a167bdf0c67?ixid=MXwxMjA3fDB8MHx0b3BpYy1mZWVkfDY3fEo5eXJQYUhYUlFZfHxlbnwwfHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=60"
                    alt="">
            </li>
            <li>
                <img src="https://images.unsplash.com/photo-1607053810523-091ed202189a?ixid=MXwxMjA3fDB8MHx0b3BpYy1mZWVkfDc1fEo5eXJQYUhYUlFZfHxlbnwwfHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=60"
                    alt="">
            </li>
            <li>
                <img src="https://images.unsplash.com/photo-1607462109225-6b64ae2dd3cb?ixid=MXwxMjA3fDB8MHx0b3BpYy1mZWVkfDY2fEo5eXJQYUhYUlFZfHxlbnwwfHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=60"
                    alt="">
            </li>
        </ul>
        <div class="post-orderWrapper">
            <ul class="post-slideOrder">
                <li class="active"></li>
                <li></li>
                <li></li>
            </ul>
        </div>
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      相关资源
      最近更新 更多