轮播(css+js)

目录

1.实现效果

2.基础代码演示

2.1js代码

2.1css样式

2.3实现效果

3.实现点击切换

3.1给button添加点击事件

3.2效果图如下

3.3发现问题

3.3.1不循环

3.3.2循环


1.实现效果

2.基础代码演示

2.1js代码

复制代码
 <div class="out-box">
      <div class="test-swiper">
       <div class="swiper-box">
        <div class="swiper-item" v-for="(item,index) in 7" :key="index">
          <img src="" alt="">
          <p>学习+积累</p>
        </div>
       </div>
     </div>
     <button class="button-one one">上一张</button>
      <button class="button-one two">下一张</button>
    </div>

2.1css样式

复制代码
.out-box{
   position: relative;
   width: 100%;
  .test-swiper{
    background-color: #d3d8e2;
    width: 1200px;
    margin:0 auto;
    height: 500px;
    position: relative;
    overflow: hidden;
    .swiper-box{
      position: absolute;
      display: flex;
      .swiper-item{
        width: 400px;
        height: 400px;
        background-color: #B7CBEA;
        margin:50px 100px;
      }
    }
  }
  .button-one{
    background-color: rgb(174, 165, 166);
    position: absolute;
    top: 50%;
    width: 50px;
    height: 50px;
    border-radius: 100%;
  }
  .one{
    left: 430px;
  }
  .two{
    right:430px;
  }
}

2.3实现效果

3.实现点击切换

3.1给button添加事件,transform和切换效果

复制代码
<div class="out-box">
      <div class="test-swiper">
       <div class="swiper-box" :style="{transform:`translateX(${translateXtest}px)`,transition: 'transform 0.5s ease-in-out' }">
        <div class="swiper-item" v-for="(item,index) in testList" :key="index">
          <img src="" alt="">
          <p>学习+积累</p>
        </div>
       </div>
     </div>
     <button class="button-one one" @click="onPre">上一张</button>
     <button class="button-one two" @click="onNext">下一张</button>
</div>

export defatult{
  data(){
    return{ 
       testList:[{},{},{},{}]
       testIndex:0
       }
   }
}
 computed: {
    translateXtest(){
      // 计算需要移动的距离
      return -this.testIndex * (400 + 200);
    },
}

onPre(){
   if(this.testIndex>0){ this.testIndex--}
},
onNext(){
  if(this.testIndex<this.testList.length-1){ this.testIndex++}
}

3.2效果图如下

3.3发现问题

发现数组长度只有3,当触发最后一次onNext操作时候,出现空白,如何解决

3.3.1不循环

一次显示2张图片,添加条件testIndex<testList.length-2

onNext(){

if(this.testIndex<this.testList.length-2){this.testIndex++}

}

3.3.2循环

可以当到最后显示testList最后一个数据时,让数组拼接

复制代码
onNext(){
  this.testIndex++
  if(this.testIndex>this.testList.length){
     this.testList=this.testList.concat(this.testList)
    }
}

4.完整代码

复制代码
<div class="out-box">
      <div class="test-swiper">
       <div class="swiper-box" :style="{ transform:`translateX(${translateXtest}px)`,transition: 'transform 0.5s ease-in-out' }">
        <div class="swiper-item" v-for="(item,index) in testList" :key="index">
          <img src="" alt="">
          <p>学习+积累{{ index }}</p>
        </div>
       </div>
     </div>
     <button class="button-one one" @click="onPrev">上一张</button>
     <button class="button-one two" @click="onNext">下一张</button>
</div>

export defatult{
  data(){
    return{ 
       testList:[{},{},{},{}]
       testIndex:0
       }
   }
}
 computed: {
    translateXtest(){
      // 计算需要移动的距离
      return -this.testIndex * (400 + 200);
    },
}

onPre(){
   if(this.testIndex>0){ this.testIndex--}
},
onNext(){
   if(this.testIndex<this.testList.length-2){this.testIndex++}
}

.out-box{
   position: relative;
   width: 100%;
  .test-swiper{
    background-color: #d3d8e2;
    width: 1200px;
    margin:0 auto;
    height: 500px;
    position: relative;
    overflow: hidden;
    .swiper-box{
      position: absolute;
      display: flex;
      .swiper-item{
        width: 400px;
        height: 400px;
        background-color: #B7CBEA;
        margin:50px 100px;
      }
    }
  }
  .button-one{
    background-color: rgb(174, 165, 166);
    position: absolute;
    top: 50%;
    width: 50px;
    height: 50px;
    border-radius: 100%;
  }
  .one{
    left: 430px;
  }
  .two{
    right:430px;
  }
}

如果有好的循环方式,欢迎留言

相关推荐
qiyue771 分钟前
AI编程专栏(三)- 实战无手写代码,Monorepo结构框架开发
前端·ai编程
轻语呢喃5 分钟前
React智能前端:从零开始的识图学单词项目(一)
javascript·react.js·aigc
断竿散人6 分钟前
JavaScript 异常捕获完全指南(下):前端框架与生产监控实战
前端·javascript·前端框架
Danny_FD7 分钟前
Vue2 + Vuex 实现页面跳转时的状态监听与处理
前端
小飞悟8 分钟前
别再只会用 px 了!移动端适配必须掌握的 CSS 单位
前端·css·设计
安思派Anspire8 分钟前
LangGraph + MCP + Ollama:构建强大代理 AI 的关键(一)
前端·深度学习·架构
LRH9 分钟前
JS基础 - 基于 Generator + Promise 实现 async/await 原理
前端·javascript
Jolyne_10 分钟前
可配置永久生效的Table组件的封装过程
前端·react.js
自由逐风10 分钟前
前端小数点精度问题解析
javascript
断竿散人10 分钟前
JavaScript 异常捕获完全指南(上):从同步异步到 Promise 错误处理
前端·javascript·promise