js手敲自动轮播图

轮播图的原理:ul标签设置一个position: relative;而li标签则设置position: absolute;,然后使用js来控制li中的left的大小来实现定位,最后再添加一个transition属性实现一个过渡;
下面是html和css:

<style>
    .box {
      width: 800px;
      height: 400px;
      margin: 10px auto;
      overflow: hidden;
      position: relative;
      /* background-color: aqua; */
    }

    .list {
      width: 4800px;
      height: 100%;
      margin: 0;
      padding: 0;
      list-style: none;
      position: absolute;
      display: flex;
      left: 0;
      transition: all 1s;
    }

    .item {
      width: 800px;
      height: 400px;
    }

    .list .item:nth-child(1) {
      background-color: #ffb10f;
    }

    .list .item:nth-child(2) {
      background-color: #9c3f85;
    }

    .list .item:nth-child(3) {
      background-color: #3ebba9;
    }

    .list .item:nth-child(4) {
      background-color: #668645;
    }

    .list .item:nth-child(5) {
      background-color: #ed0364;
    }

    .list .item:nth-child(6) {
      background-color: #ffb10f;
    }
  </style>
</head>

<body>
  <div class="box">
    <ul id="list" class="list" style="left:0px;">
      <li class="item">1</li>
      <li class="item">2</li>
      <li class="item">3</li>
      <li class="item">4</li>
      <li class="item">5</li>
      <li class="item">1</li>
    </ul>
  </div>
</body>

之所以在最后再添加一个li为1的标签,是因为要实现无缝衔接;就是li为5的标签滑动到最后一个li时,然后再设置left=0让其瞬间回到第一个li标签,这样就给人一种无缝衔接的感觉;
下面是js部分:

window.onload = function () {
  let num = 1
  let list = document.getElementById("list")
  setInterval(() => {
    let res = -(num * 800)
    addTransition()
    list.style.left = `${res}px`
    num++
    if (list.style.left === "-4000px") {
      // 这个地方要特别注意:因为倒数第二项滚动到最后一项要1s钟,所以这里要添加一个1s的定时器,确保他滚动完后再瞬间变回第一项
      setTimeout(() => {
        list.style.left = "0px"
        num = 1
        clearTransition()
      }, 1000);
    }
  }, 3000);
  // 清除过渡效果
  function clearTransition() {
    list.style.transition = "all 0s"
  }
  // 添加过渡效果
  function addTransition() {
    list.style.transition = "all 1s"
  }
}

上面的if里面之所以要使用一个setTimeout并设置为1s,是因为li为5的标签轮播到最后一个li过渡是需要1s钟的,要等过渡完之后再让其瞬间回到第一个li标签;
以上是完整的代码,可以自己看看效果,更有利于理解;

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTML是网页的基础语言,无法直接实现动或自动切换轮播图。但是,我们可以使用HTML结合CSS和JavaScript来实现动或自动切换轮播图。 具体实现方式如下: 1. 在HTML中创建一个包含图片的容器,使用CSS设置该容器的宽度、高度和位置等样式。 2. 使用JavaScript创建一个计时器,每隔一定时间就切换下一张图片。 3. 当用户点击左右箭头时,可以通过JavaScript改变当前显示的图片,实现动切换。 以下是一个简单的实现动或自动切换轮播图的HTML、CSS和JavaScript代码示例: HTML代码: ``` <div class="slider"> <img src="image1.jpg"> <img src="image2.jpg"> <img src="image3.jpg"> <div class="prev">上一张</div> <div class="next">下一张</div> </div> ``` CSS代码: ``` .slider { position: relative; width: 600px; height: 300px; } .slider img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; transition: opacity .5s ease-in-out; } .slider img.active { opacity: 1; } .slider .prev, .slider .next { position: absolute; top: 50%; transform: translateY(-50%); width: 50px; height: 50px; background-color: rgba(0,0,0,.5); color: #fff; text-align: center; line-height: 50px; cursor: pointer; } .slider .prev { left: 0; } .slider .next { right: 0; } ``` JavaScript代码: ``` var slider = document.querySelector('.slider'); var imgs = slider.querySelectorAll('img'); var prevBtn = slider.querySelector('.prev'); var nextBtn = slider.querySelector('.next'); var index = 0; function showImg() { for (var i = 0; i < imgs.length; i++) { imgs[i].classList.remove('active'); } imgs[index].classList.add('active'); } function prev() { index--; if (index < 0) { index = imgs.length - 1; } showImg(); } function next() { index++; if (index >= imgs.length) { index = 0; } showImg(); } prevBtn.addEventListener('click', prev); nextBtn.addEventListener('click', next); setInterval(function(){ next(); },3000); ``` 该示例中,我们首先使用CSS设置了图片容器的样式,使用JavaScript实现了自动切换和动切换的功能。在JavaScript中,我们使用setInterval函数每隔3秒自动切换到下一张图片。当用户点击左右箭头时,我们通过JavaScript改变当前显示的图片。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值