vue轮播图

vue轮播图的实现

实现网易云音乐pc端主页的轮播图效果。

目标效果:

在这里插入图片描述

实现效果:

在这里插入图片描述

实现

轮播图实现的方法很多,这是我实现的方法。
思路:根据图片的位置,设置不同的样式,分为左,中,右,后。然后使用过度实现动画效果。使用setinterval计时。

基本内容

内容和样式

<template>
  <div class="banner">
    <ul class="banner__swap">
      <li v-for="(item, index) in banners"
      :key="index"
      :class="{banner__swap__item: Math.abs(index - showIndex) > 1,
      'banner__swap__left': index === showIndex-1 ,
      'banner__swap__right': index === showIndex+1,
      'banner__swap__show': index === showIndex
      }">
        <img :src="item.imageUrl" alt="" class="banner__swap__item__image">
      </li>
    </ul>
  </div>
</template>
<script>
//获取轮播图数据
import {
      getBanner } from '../../../api/api-banner'
export default {
     
  name: 'Banner',
  data () {
     
    return {
     
      banners: [],
      showIndex: 1,
      timeOut: 0
    }
  },
  methods: {
     
    async getBannerData () {
     
      const result = await getBanner()
      this.banners = result.banners
    }
  },
  created () {
     
    this.getBannerData()
    this.startBanner()
  }
}
</script>


<style lang='scss'>
.banner{
     
  position: relative;
  height: 230px;
  &__swap{
     
    position: relative;
    display: block;
    width: 100%;
    height: 200px;
    &__item{
     
      display: block;
      position: absolute;
      left: 50%;
      top: 0;
      transform: translateX(-50%);
      transition: all 1500ms  ;
      width: 540px;
      height: 200px;
      z-index: 1;
      &__image{
     
        border-radius: 5px;
        width: 100%;
        height: 100%;
      }
    }
    &__left{
     
      position: absolute;
      width: 432px;
      height: 160px;
      left: 0;
      top: 20px;
      transform: none;
      z-index: 2;
      transition: all  1500ms ;
      &__image{
     
        border-radius: 5px;
        width: 100%;
        height: 100%;
      }
    }
    &__right{
     
      position: absolute;
      width: 432px;
      height: 160px;
      right: 0;
      top: 20px;
      left: unset;
      transform: none;
      z-index: 2;
      transition: all  1500ms ;
      &__image{
     
        border-radius: 5px;
        width: 100%;
        height: 100%;
      }
    }
    &__show{
     
      position: absolute;
      left: 50%;
      top:0;
      transform: translateX(-50%);
      transition: all 1500ms ;
      z-index: 3;
      &__image{
     
        border-radius: 5px;
        width: 100%;
        height: 100%;
      }
    }
  }
}
</style>

getBanner()可以获取轮播图数据。

这是返回的信息:

在这里插入图片描述
具体的数据:

在这里插入图片描述
这里我们只需要图片地址。

轮播图随时间滚动

这里只需要设置定时器,定时更改showIndex的值,各图片的样式就会发生变化,产生过度效果,就动起来了。

<script>
import {
      getBanner } from '../../../api/api-banner'
export default {
     
  name: 'Banner',
  data () {
     
    return {
     
      banners: [],
      showIndex: 1,
      timeOut: 0
    }
  },
  methods: {
     
    async getBannerData () {
     
      const result = await getBanner()
      console.log(result.banners)
      this.banners = result.banners
      this.banners.push(result.banners[0])
      this.banners.unshift(result.banners[result.banners.length - 2])
      console.log(this.banners)
    },
    // 开始轮播
    startBanner () {
     
      this.timeOut = setInterval(() => {
     
        this.showIndex++
        if (this.showIndex >= this.banners.length - 2) {
     
          this.showIndex = 1
        }
      }, 5000)
    }
 }
  created () {
     
    this.getBannerData()
    this.startBanner()
  }
}
</script>

鼠标悬浮停止滚动

添加鼠标悬浮事件,在回调函数中停止计时。


	//添加事件
  <div class="banner" @mouseover="overStop" @mouseout="outStart">


<script>
methods: {
     
// 鼠标停留停止计时
    overStop () {
     
      clearInterval(
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue.js是一款流行的JavaScript框架,它可以帮助你快速构建交互式的Web应用程序。如果你想在Vue.js中实现轮播图,可以考虑使用Vue.js的插件或者组件库。 以下是使用Vue.js实现轮播图的一些步骤: 1. 安装Vue.js轮播图组件库 你可以使用npm或yarn等包管理工具来安装Vue.js轮播图组件库,例如: ``` npm install vue npm install vue-awesome-swiper --save ``` 其中,vue-awesome-swiper是一个基于Swiper封装的Vue.js组件库,可以方便地实现轮播图效果。 2. 引入轮播图组件 在Vue.js应用程序中,你可以通过import语句引入轮播图组件,并注册为全局或局部组件。例如: ```javascript import Vue from 'vue' import VueAwesomeSwiper from 'vue-awesome-swiper' Vue.use(VueAwesomeSwiper) ``` 3. 使用轮播图组件 在Vue.js模板中,你可以使用轮播图组件,并设置一些参数和样式。例如: ```html <template> <div class="swiper-container"> <div class="swiper-wrapper"> <div class="swiper-slide">Slide 1</div> <div class="swiper-slide">Slide 2</div> <div class="swiper-slide">Slide 3</div> </div> <div class="swiper-pagination"></div> </div> </template> <script> export default { data() { return { swiperOptions: { pagination: { el: '.swiper-pagination' }, autoplay: true } } }, mounted() { this.$nextTick(() => { new Swiper('.swiper-container', this.swiperOptions) }) } } </script> <style> .swiper-container { width: 100%; height: 300px; } .swiper-slide { text-align: center; font-size: 18px; background: #eee; } </style> ``` 在上述代码中,我们使用了swiper-container、swiper-wrapper、swiper-slide和swiper-pagination等样式来实现轮播图效果。同时,我们还在mounted钩子函数中使用了Swiper构造函数来初始化轮播图。 希望以上内容对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值