当前位置: 首页 > 知识库问答 >
问题:

javascript - 如何改成自动切换?

魏俊茂
2023-08-28

现在的效果是鼠标悬浮文字切换背景图,如何改成.line自动往下滚动,滚动到下一个文字就切换当前文字的背景图,鼠标悬浮就停止滚动。

* {            margin: 0;            padding: 0;            box-sizing: border-box;        }        ul {            list-style: none;        }        a {            color: #000;            text-decoration: none;        }        .box {            margin: 0 auto;            width: 1580px;            height: 600px;            position: relative;            top: 60px;            overflow: hidden;        }        .nav {            position: absolute;        }        .nav>ul {            padding: 45px 0 0 120px;            height: 600px;            position: relative;            z-index: 10;        }        .nav::before {            content: "";            width: 1px;            height: 600px;            background-color: #ddd;            position: absolute;            left: 121px;            top: 0px;            z-index: 10;        }        .nav_li {            margin-bottom: 55px;            padding-left: 25px;            cursor: pointer;            line-height: 26px;            transition: all 0.3s ease-in-out;            position: relative;            color: #888;        }        .nav_li>a {            color: inherit;        }        .active {            font-size: 20px;            color: #007377;        }        .nav_li::before {            content: '';            width: 3px;            height: 3px;            position: absolute;            border-radius: 50%;            left: 0;            background-color: #aaa;            top: 50%;        }        .line {            width: 3px;            position: absolute;            background-color: #007377;            left: 120px;            z-index: 15;            height: 26px;            transition: all .3s;        }        .list {            width: 100%;            height: 100%;            background-color: #ebebeb;            position: relative;        }        .item {            width: 100%;            height: 100%;            position: absolute;            transition: all .2s ease-in-out;            opacity: 0;        }        .img {            width: 100%;            height: 100%;            background-repeat: no-repeat;            background-position: right 0;            position: absolute;        }        .show {            opacity: 1;            visibility: visible;        }
<div class="box">        <div class="nav">            <ul>                <li class="nav_li active">                    <a href="javascript:;">1</a>                </li>                <li class="nav_li ">                    <a href="javascript:;">2</a>                </li>                <li class="nav_li ">                    <a href="javascript:;">3</a>                </li>                <li class="nav_li ">                    <a href="javascript:;">4</a>                </li>                <li class="nav_li">                    <a href="javascript:;">5</a>                </li>                <li class="nav_li">                    <a href="javascript:;">6</a>                </li>            </ul>        </div>        <div class="line" style="top: 45px;"></div>        <ul class="list">            <li class="item show">                <div class="img"                    style="background-image: url(https://3.swiper.com.cn/demo/timeline/images/01.jpg)">                </div>            </li>            <li class="item">                <div class="img "                    style='background-image: url(https://3.swiper.com.cn/demo/timeline/images/02.jpg)'>                </div>            </li>            <li class="item">                <div class="img "                    style="background-image: url(https://3.swiper.com.cn/demo/timeline/images/03.jpg)">                </div>            </li>            <li class="item">                <div class="img "                    style="background-image: url(https://3.swiper.com.cn/demo/timeline/images/04.jpg)">                </div>            </li>            <li class="item">                <div class="img"                    style="background-image: url(https://3.swiper.com.cn/demo/timeline/images/05.jpg)">                </div>            </li>            <li class="item">                <div class="img"                    style="background-image: url(https://3.swiper.com.cn/demo/timeline/images/06.jpg)">                </div>            </li>        </ul>    </div>
        var liList = document.querySelectorAll('.nav_li')        const contentList = document.querySelectorAll('.item')        const line = document.querySelector('.line')                liList.forEach(function (li, index) {            // 获取li元素在页面上的位置            const top = li.getBoundingClientRect().top            li.addEventListener('mouseover', function () {                liList.forEach(function (li) {                    li.classList.remove('active')                })                li.classList.add('active')                // 控制左边小条块的位置                line.style.top = top - 60 + 'px';                contentList.forEach(function (content) {                    content.classList.remove('show')                })                contentList[index].classList.add('show')            })        })

共有1个答案

楚浩然
2023-08-28

结构不变, JS 代码:

  var liList = document.querySelectorAll('.nav_li')  const contentList = document.querySelectorAll('.item')  const line = document.querySelector('.line')  let max = liList.length - 1  let count = 0  const timeID = setInterval(() => {    if (count == max) {      count = 0    } else {      count++    }    liList.forEach(function (li) {      li.classList.remove('active')    })    const top = liList[count].getBoundingClientRect().top    liList[count].classList.add('active')    // 控制左边小条块的位置    line.style.top = top - 60 + 'px';    contentList.forEach(function (content) {      content.classList.remove('show')    })    contentList[count].classList.add('show')  }, 1000)  liList.forEach(function (li, index) {    // 获取li元素在页面上的位置    const top = li.getBoundingClientRect().top    li.addEventListener('mouseover', function () {      clearInterval(timeID)      liList.forEach(function (li) {        li.classList.remove('active')      })      li.classList.add('active')      // 控制左边小条块的位置      line.style.top = top - 60 + 'px';      contentList.forEach(function (content) {        content.classList.remove('show')      })      contentList[index].classList.add('show')    })  })
 类似资料:
  • 本文向大家介绍JavaScript实现背景自动切换小案例,包括了JavaScript实现背景自动切换小案例的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js实现背景自动切换的具体代码,供大家参考,具体内容如下 功能: 窗口打开背景图自动跳转切换 所有代码: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 我想使用TextFlow显示一些格式化的文本。之前,我使用了一个简单的标签(wrapText设置为true)来显示该文本(未格式化),但想使用提供我想使用TextFlow显示的文本列表的库。 我的问题是要显示的文本比可用区域大。标签在空间不足时会切断文本。这很有效。不幸的是,TextFlow没有。当文本过长时,它会溢出TextFlow所在的区域。相邻的文本流然后相互重叠。如何模仿标签的行为? 可以

  • 问题内容: 我当前的项目有一个编码约定,即实例变量永远不会用this引用。前缀,并且该参数永远不应隐藏实例变量。 这将导致设置器看起来像: 不幸的是,默认情况下,eclipse不会为我生成该信息。我发现在代码样式中,可以通过在参数前缀列表中添加a来接近它,但是我只希望将其应用于set方法,并且我也想在其中添加final标记。 有没有办法使用模板来实现这一目标?其他配置? 问题答案: 我认为,当前仅

  • 我正在尝试应用自定义css到材料UI自动完成组件。具体地说,我想改变输入字段的字体大小。我现在有的是: 我相信我的TextField的样式是正确的,但是它的CSS被自动完成CSS覆盖了。感谢任何帮助。提前道谢。

  • Vue3如何实现像这个网站的图片自动切换效果 https://fortnite.gg/shop 这是我写的template 查看了该网站的效果是设置了两个class="animation"的盒子来做链接切换并且调整高度,但是我的每个item的图片数量不确定,有的为1,有的为2,3个,实在想不出来应该怎么实现了,可以请教大佬们一下思路吗

  • 求一个插件或者json setting能够在打开项目的时候隐藏每个js文件最上面的一大堆imports. 主要是前端。 后端的引用还好,主要是前端引用一堆组件库的东西,太长了,有点烦人。 感谢了~