轮播(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;
  }
}

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

相关推荐
芒果茶叶23 分钟前
并行SSR,SSR并行加载
前端·javascript·架构
vortex537 分钟前
解决 Kali 中 Firefox 下载语言包和插件速度慢的问题:配置国内镜像加速
前端·firefox·腾讯云
修仙的人39 分钟前
Rust + WebAssembly 实战!别再听说,学会使用!
前端·rust
maxine42 分钟前
JS Entry和 HTML Entry
前端
用户63310776123661 小时前
Who is a Promise?
前端
威风的虫1 小时前
JavaScript中的axios
开发语言·javascript·ecmascript
比老马还六1 小时前
Blockly元组积木开发
前端
笨笨狗吞噬者1 小时前
【uniapp】小程序体积优化,JSON文件压缩
前端·微信小程序·uni-app
bot5556661 小时前
“企业微信iPad协议”静默 72 小时:一台被遗忘的测试机如何成为私域的逃生梯
javascript·面试
西洼工作室2 小时前
浏览器事件循环与内存管理可视化
前端·javascript·css·css3