保持类活动,直到最后一个类内部处于活动状态

时间:2016-10-06 13:17:01

标签: javascript jquery html css

我有幻灯片,需要点击才能转到下一张图片/视频。 但是,我想自动进行此操作,因此不需要任何用户活动。

该页面如下所示:

<article class="active">
    <li class="active"> Slide 1 </li>
    <li> Slide 2 </li>
    <li> Slide 3 </li>
    <li> Slide 3 </li>
</article>

<article>
    <li> Slide 1 </li>
    <li> Slide 2 </li>
    <li> Slide 3 </li>
    <li> Slide 3 </li>
</article>

<article>
    <li> Slide 1 </li>
    <li> Slide 2 </li>
    <li> Slide 3 </li>
    <li> Slide 3 </li>
</article>

当文章处于活动状态时,您将获得其中的li的“演示文稿”。每当您单击下一个按钮时,下一个li将变为活动状态。当它处于活动状态时,你只能看到它。

我想拥有什么:

使第一篇文章处于活动状态(如代码中所示)。 然后我想要例如自动使幻灯片1激活。 10秒后我想要幻灯片2激活。 30秒后我想要幻灯片3激活。

到达终点时(本例中为幻灯片3)。我想让它转到下一篇文章,并在x大量时间之后使这些幻灯片处于活动状态。

我一直在寻找这个问题很久了。但是我只能在x大小的秒后才能使Li元素处于活动状态。但我想决定我可以让每个Li元素活跃多久。这是因为有些幻灯片正在播放电影。有些只是图像。

2 个答案:

答案 0 :(得分:1)

使用纯JavaScript实现粗体操作,使其完全正常工作:

<script>

var interval = setInterval(function(){
	console.log(1);
	var active = document.getElementsByClassName("active");
	var parent = active[0].parentNode.parentNode.childNodes;
	
	var foundClass = false;
	var nextSlide = false;
	
	for(var j=0; j<parent.length; j++){
		var childs = parent[j].childNodes;
		
		for(var i=0; i<childs.length; i++){
		
			if(childs[i].nodeType==1 && foundClass){
				childs[i].className = "active";
				nextSlide = true;
				break;
			}
		
			if(childs[i].nodeType==1){
				if(childs[i].getAttribute("class")=="active"){
					childs[i].className = "";
					foundClass = true;
				}
			}
		}	
	
		if(nextSlide){
			break;
		}
	}
	
	if(!nextSlide){
		clearInterval(interval);
	}
		
}, 1000);

</script>
<style>
.active { font-weight: bold; }
</style>

<article id="initShow">
    <li class="active"> Slide 1 </li>
    <li> Slide 2 </li>
    <li> Slide 3 </li>
    <li> Slide 4 </li>
</article>

<article>
    <li> Slide 5 </li>
    <li> Slide 6 </li>
    <li> Slide 7 </li>
    <li> Slide 8 </li>
</article>

<article>
    <li> Slide 9 </li>
    <li> Slide 10 </li>
    <li> Slide 11 </li>
    <li> Slide 12 </li>
</article>

答案 1 :(得分:0)

我为你写了一些东西

function autoSpin(){

    var slideShow = $("#mySlideshowOutdiv"); //set this yourself
    var slides = $(slideShow).find("li");
    var activeSlide = $(slideShow).find("li.active")

    var timer = 5000; //5 seconds
    setTimeout(function({
        nextSlide();
    }, timer)

    function nextSlide() {
        if($(activeslide).nextAll().length == 0) { //If you're at the last "li"
            setActive($(slides).eq(0))
        } else { // Else just use the next slide in line 
            setActive($(activeSlide).next("li"));
        }
    }

    function setActive(slide){
        $(slideShow).find(".active").removeClass("active");
        $(slide).addClass("active");
    }

}