轮播资讯图非定位实现

文章介绍了一种非传统定位方式实现的轮播图,实际上是一个资讯展示组件,不支持自动滚动。通过设置负margin值,特别是调整`.items`的`margin-left`来实现在不同图片间的平滑切换,同时结合JQuery处理点击事件,改变选中状态并相应移动图片。整个组件要求展示框和元素大小一致,以确保内容准确显示。

提供一种轮播图非position定位的实现,非无限滚动的版本。
说是轮播图,其实更像资讯展示组件,因为并不会自动滚动。
关键在于margin设置负值。margin设置负值同样会有效果,如margin-left>=0?右移:左移。
而给图片们的容器设置移动,可以便捷的设置移动margin-left:-x*100%的距离,保证准确将图片正好展示在展示框中:前提是展示框和要展示元素大小一直

//展示框
<div class="show">
    <div class="items">
      <div class="item1"></div>
      <div class="item2"></div>
      <div class="item3"></div>
    </div>
  </div>
  //一些点来主动切换图片
  <p class="changecontrol">
    <span class="active"></span><span></span><span></span>
    //部分操作使用JQuery
    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
    <script>
      const spans = document.querySelectorAll('.changecontrol>span');
      $('.changecontrol').click(function (e) {
        document.querySelector('.changecontrol>.active') && document.querySelector('.changecontrol>.active').classList.remove('active')
        e.target.classList.add('active');
        //让对应图片也移动
        spans.forEach((span, index) => {
          if (span.className.includes('active')) {
            document.querySelector('.items').style.marginLeft = `-${index}00%`;
          }
        })
      })
    </script>
<style>
    /* 要展示的元素和展示框大小一致 */
    .show,
    .item1,
    .item2,
    .item3 {
      width: 200px;
      height: 200px;
    }

    .show {
      border: 3px dodgerblue solid;
      margin: 20px auto;
      overflow: hidden;
    }

    .items {
      overflow: hidden;
      /* 宽度根据内容宽度决定 内容宽度个数*/
      width: 600px;
      height: 100%;
      /* 每次移动100%整倍数,确保展示内容准确展示在中 */
      margin-left: 0%;
      transition: margin-left 0.6s cubic-bezier(0.13, 0.39, 0.45, 0.94);
    }

    .item1,
    .item2,
    .item3 {
      float: left;
    }

    .item1 {
      background-color: #b6a014;
    }

    .item2 {
      background-color: #80a492;
    }

    .item3 {
      background-color: #422517;
    }

    .changecontrol>span {
      display: inline-block;
      width: 20px;
      height: 20px;
      border-radius: 50%;
      background-color: #9aa7b1;
    }

    .changecontrol>.active {
      background-color: #2c2f3b;
    }
  </style>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨灰ash2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值