首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >3秒后自动悬停

3秒后自动悬停
EN

Stack Overflow用户
提问于 2022-01-26 06:33:01
回答 3查看 116关注 0票数 2

我有5个句子,我想在3秒后,下一个句子的背景被着色

HTML:

代码语言:javascript
复制
    <div class="text-slider">
        <div class="text-wrap">
            <p class="text text-1 active"> text 1</p>
            <p class="text text-2">text 2</p>
            <p class=" text text-3">text 3</p>
            <p class="text text-4">text 4</p>
            <p class="text text-5"> text 5 </p>
        </div>
    </div>

CSS:

代码语言:javascript
复制
.text-wrap p.active {
  background-color: #edf0f2;
}

JS

代码语言:javascript
复制
let count = 1
setInterval(()=>{

    document.querySelector(`.text-${count}`).classList.add('active')
    count++
   
    if(count>5){
        count =1
    }
}, 3000)

我想从前面的元素中删除活动类,所以我尝试

代码语言:javascript
复制
 document.querySelector(`.text-${count -1}`).classList.remove('active')

在count++之后但是它不起作用

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-01-26 06:49:56

而不是找到一个相对于计数的元素,您可以对它进行一些黑客攻击,在选择器中查找active元素,然后按如下方式从它中删除该活动类。

代码语言:javascript
复制
let count = 1;
setInterval(() => {
  // Here you remove active class from `p` tag which had it
  document.querySelector(".text.active").classList.remove("active"); // <- HERE
  
  document.querySelector(`.text-${count}`).classList.add("active");
  count++;

  if (count > 5) {
    count = 1;
  }
}, 3000);

片段

代码语言:javascript
复制
let count = 1;
setInterval(() => {
  document.querySelector(".text.active").classList.remove("active");
  document.querySelector(`.text-${count}`).classList.add("active");
  count++;

  if (count > 5) {
    count = 1;
  }
}, 1000);
代码语言:javascript
复制
.text-wrap p.active {
  background-color: #edf0f2;
}
代码语言:javascript
复制
<div class="text-slider">
    <div class="text-wrap">
      <p class="text text-1 active">text 1</p>
      <p class="text text-2">text 2</p>
      <p class="text text-3">text 3</p>
      <p class="text text-4">text 4</p>
      <p class="text text-5">text 5</p>
    </div>
</div>

票数 1
EN

Stack Overflow用户

发布于 2022-01-26 06:52:45

我对JavaScript文件进行了一些重构:

代码语言:javascript
复制
let count = 1
setInterval(() => {
  if (count > 5) {
    document.querySelector(`.text-${count- 1}`).classList.remove('active')
    count = 1
  } else {
    document.querySelector(`.text-${count}`).classList.add('active')
    if (count > 1) document.querySelector(`.text-${count-1}`).classList.remove('active')
    count++
  }
}, 1000)
代码语言:javascript
复制
.text-wrap p.active {
  background-color: #edf0f2;
}
代码语言:javascript
复制
    <div class="text-slider">
      <div class="text-wrap">
        <p class="text text-1 active"> text 1</p>
        <p class="text text-2">text 2</p>
        <p class=" text text-3">text 3</p>
        <p class="text text-4">text 4</p>
        <p class="text text-5"> text 5 </p>
      </div>
    </div>

票数 1
EN

Stack Overflow用户

发布于 2022-01-26 07:02:42

您需要使用remove而不是add来删除类,我尝试稍微调整js代码。

代码语言:javascript
复制
let count = 1;
setInterval((storage) => {
  const clsName = 'active';
  const current = `.text-${count}`;
  const previous = storage.shift();
  document.querySelector(previous)?.classList.remove(clsName);
  document.querySelector(current).classList.add(clsName);
  storage.push(current);
  count = count % 5;
  count++;
}, 1000, [])
代码语言:javascript
复制
.text-wrap p.active {
  background-color: #edf0f2;
}
代码语言:javascript
复制
<div class="text-slider">
  <div class="text-wrap">
    <p class="text text-1 active"> text 1</p>
    <p class="text text-2">text 2</p>
    <p class="text text-3">text 3</p>
    <p class="text text-4">text 4</p>
    <p class="text text-5"> text 5 </p>
  </div>
</div>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70859373

复制
相关文章

相似问题

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