首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在间隔5秒的3个类名之间进行无限切换

如何在间隔5秒的3个类名之间进行无限切换
EN

Stack Overflow用户
提问于 2020-11-03 10:29:23
回答 4查看 209关注 0票数 0

如何在间隔为5秒的元素上无限地切换不同的类名,如下所示:

默认情况下,在0秒时,元素的类名为‘bang-1’,如下所示:<div classname="hero banner-1">Hero</div>

在5秒时,元素的类名为‘bang-2’和'active‘,如下所示:<div classname="hero banner-2 active">Hero</div>

在10秒时,元素的类名为‘bang-3’和'active‘,如下所示:<div classname="hero banner-3 active">Hero</div>

15秒时,元素返回到默认的类名‘bang-1’,如下所示:<div classname="hero banner-1">Hero</div>

20秒时,元素的类名为‘bang-2’和'active‘,如下所示:<div classname="hero banner-2 active">Hero</div>

它无止境地持续了25,30,35秒,间隔为5秒。

使用Jquery,我已经能够做到这一点,但是它工作得不太好,我也不知道如何才能包含第三个类并使它完美地工作:

代码语言:javascript
复制
setInterval(function() {
    if($('.hero').hasClass('banner-2 active')) {
      $('.hero').addClass("banner-3 active").removeClass("banner-2");
    } else {
      $('.hero').addClass("banner-2 active").removeClass("banner-3");
    }
  }, 5000)

如何正确实现javascript?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-11-03 10:46:20

香草JS:

将代码中的1000更改为5000

代码语言:javascript
复制
window.addEventListener("load", function() {
  const ele = document.querySelector('.hero');
  let cnt = 1;
  setInterval(function() {
    ele.classList.remove("banner-" + cnt);
    cnt++;
    if (cnt > 3) cnt = 1;
    ele.classList.add("banner-" + cnt);
    ele.classList.toggle("active", !ele.classList.contains("banner-1"));
  }, 1000);
});
代码语言:javascript
复制
.banner-1 {
  color: green;
}

.banner-2 {
  color: blue;
}

.banner-3 {
  color: red;
}

.active {
  font-weight: bold;
  border: 1px solid black;
  display: inline-block;
}
代码语言:javascript
复制
<div class="hero banner-1">Hero</div>

票数 1
EN

Stack Overflow用户

发布于 2020-11-03 10:35:51

你可以这样做:

代码语言:javascript
复制
var arr = ["banner-1", "banner-2", "banner-3"]
var ele = $('.hero');
$(document).ready(function() {
  setInterval(function() {
    var c = ele.attr("class").split(' ')[1];
    var i = arr.indexOf(c) + 1;
    ele.removeClass(c);
    ele.addClass((i == arr.length ? arr[0] : arr[i]))
  }, 5000);
});

Demo

代码语言:javascript
复制
var arr = ["banner-1", "banner-2", "banner-3"]
var ele = $('.hero');
$(document).ready(function() {
  setInterval(function() {
    var c = ele.attr("class").split(' ')[1];
    var i = arr.indexOf(c) + 1;
    ele.removeClass(c + " active");
    ele.addClass((i == arr.length ? arr[0] : arr[i] + " active"))
  }, 5000);
});
代码语言:javascript
复制
.banner-1{color: yellow}
.banner-2{color: blue}
.banner-3{color: red}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="hero banner-1">Hero</div>

票数 2
EN

Stack Overflow用户

发布于 2020-11-03 10:33:19

由于您没有提供您尝试过的内容,因此我们没有提供任何反馈,所以我将给您一些示例代码,以便您将其转化为一个实际的解决方案:

代码语言:javascript
复制
let currentActive = 1; // remember where we are now
const maxItems = 3; // how many items?

setInterval(
    function(){
        // - remove 'active' from the currentActive element
        currentActive++;
        // if the currentActive > maxitems, set it back to 1
        // - add 'active' to the new currentActive element
    }, 
    5000
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64661024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档