简体   繁体   English

将Autoscroll添加到JavaScript滑块

[英]Adding Autoscroll to a JavaScript slider

I have a simple problem I can't seem to figure out. 我有一个简单的问题,我似乎无法弄明白。 I have a JavaScript slider in a site I'm working on . 我正在处理的网站上有一个JavaScript滑块。 You need to manually click to the next image in this slider. 您需要手动单击此滑块中的下一个图像。 I want to make the slider scroll through the images automatically. 我想让滑块自动滚动图像。 Here is the code, below that is what I've tried: 这是代码,下面就是我尝试过的:

//Carousel interaction
(function() {
    if (document.getElementById('carousel-nav')) {
        var slides = document.getElementById('carousel-images'),
            slidesItems = slides.getElementsByTagName('li'),
            nav = document.getElementById('carousel-nav'),
            navItems = nav.getElementsByTagName('li'),
            current = 0;

        function showSlide(i) {
            if (i != current && slidesItems[i]) {
                slide = slidesItems[i];
                slide.className += ' show';
                setTimeout (function() {
                    slide.className = slide.className.replace('show', 'appear');                    
                }, 1);
                setTimeout(function() {
                    slidesItems[current].className = slidesItems[current].className.replace('current', '');
                    slide.className = slide.className.replace('appear', 'current');
                    current = i;
                }, 300);
                navItems[i+1].className += ' current';
                navItems[current+1].className = navItems[current+1].className.replace('current', '');
                if (i == 0) {
                    if (navItems[0].className.indexOf('disabled') == -1) {
                        navItems[0].className += ' disabled';
                    }
                } else {
                    navItems[0].className = navItems[0].className.replace(' disabled', '');
                }
                var l = navItems.length - 1;
                if (i == slidesItems.length - 1) {
                    if (navItems[l].className.indexOf('disabled') == -1) {
                        navItems[l].className += ' disabled';
                    }
                } else {
                    navItems[l].className = navItems[l].className.replace(' disabled', '');
                }
            }
        }   

        nav.onclick = function(e) {
            e = e || window.event; e = e.target || e.srcElement;
            e = getParentByTagName(e, 'A');
            if (e) {
                var action = e.getAttribute('data-action');
                if (action == 'prev') {
                    showSlide(current - 1);
                } else if (action == 'next') {
                    showSlide(current + 1);
                } else {
                    showSlide(parseInt(action));
                }
            }
            return false;
        }
    }
})();

I've tried adding setInterval(current+1, 10000); 我尝试添加setInterval(current+1, 10000); to the bottom block of code: 到底部的代码块:

nav.onclick = function(e) {
        e = e || window.event; e = e.target || e.srcElement;
        e = getParentByTagName(e, 'A');
        if (e) {
            var action = e.getAttribute('data-action');
            if (action == 'prev') {
                showSlide(current - 1);
            } else if (action == 'next') {
                showSlide(current + 1);
            } else {
                showSlide(parseInt(action));
            }
        }
        return false;
    }

    setInterval(current+1, 10000);
}
})();

I'm really new to JavaScript, and can't figure out what I'm doing wrong. 我是JavaScript的新手,无法弄清楚我做错了什么。 I'd really appreciate any help! 我真的很感激任何帮助! Thanks. 谢谢。

You can't pass a value to setInterval, you have to pass a function to execute. 您不能将值传递给setInterval,您必须传递一个函数来执行。 Try this: 尝试这个:

setInterval('showSlide(current + 1);', 10000);

Regards 问候

The other answer was close, and really helped me figure this out. 另一个答案很接近,真的帮我搞清楚了。 The only problem was the syntax was a bit off. 唯一的问题是语法有点偏。

setInterval(function() {
            showSlide(current + 1)
        },5000);

The above is what eventually worked for me. 以上是最终对我有用的东西。 So this is how it looked in the above code: 所以这就是它在上面的代码中的样子:

nav.onclick = function(e) {
        e = e || window.event; e = e.target || e.srcElement;
        e = getParentByTagName(e, 'A');
        if (e) {
            var action = e.getAttribute('data-action');
            if (action == 'prev') {
                showSlide(current - 1);
            } else if (action == 'next') {
                showSlide(current + 1);
            } else {
                showSlide(parseInt(action));
            }
        }
        return false;
    }

}
    setInterval(function() { showSlide(current + 1) }, 5000);
})();

The next step is to figure out how to have the slider repeat back to the first slide once it reaches the last slide. 下一步是弄清楚如何让滑块在到达最后一张幻灯片时重复到第一张幻灯片。

Thanks again to Andrea for the help! 再次感谢Andrea的帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM