Home  >  Article  >  Web Front-end  >  Use vue to write a sample code for a carousel chart imitating a simplified book

Use vue to write a sample code for a carousel chart imitating a simplified book

亚连
亚连Original
2018-05-30 16:02:532066browse

This article mainly introduces the sample code for writing a carousel chart imitating a simple book using Vue. Now I share it with you and give it as a reference.

1. Show the final effect first:

##2. Solution ideas

The concept of Vue is to drive the view with data, so it refuses to achieve the scrolling effect by changing the margin-top of the element. After writing the css style, you only need to change the class of each image to achieve the carousel effect. The animation effect is completed by transition. The carousel image can be regarded as two (mainSlide and extraSlide). The position of each image is as shown in the figure:

3. Code implementation

Style of each slide:

$width: 800px;   // 容器宽度
$height: 300px;   // 容器高度
$bWidth: 500px;   // 大图片宽度
$sWidth: $width - $bWidth; // 小图片宽度
$sHeight: $height / 2; // 小图片高度
#slider-wrapper{
  width: $width;
  height: $height;
  margin: 0 auto;
  cursor: pointer;
  background: #ddd;
  border-radius: 5px;
  box-shadow: 0 1px 6px rgba(0,0,0,0.117647), 0 1px 4px rgba(0,0,0,0.117647);
  display: flex;
  overflow: hidden;
  p{
    display: inline-block;
  }
}
.main-slide{
  width: $bWidth;
  height: $height;
  float: left;
  transition: all .4s ease;
}
.extra-slide{
  width: $sWidth;
  position: relative;
  .extra-slide-item{
    position: absolute;
    width: $sWidth;
    height: $sHeight;
    left: 0;
    transition: .4s ease-out;
  }
  .extra-slide-top{
    top: -$sHeight;
  }
  .extra-slide-middle-first{
    top: 0;
    z-index: 2
  }
  .extra-slide-middle-second{
    top: $sHeight;
    z-index: 2
  }
  .extra-slide-bottom{
    top: $height
  }
  .extra-slide-hide{
    display: none!important;
  }
}

The template contains two carousel images:

<p id="slider-wrapper" @mouseover="stop" @mouseout="start">
  <!-- 轮播图1,mainSlide -->
  <p class="main-slide" :style="`background: url(${slideConfig[nowIndex].src})`"></p>
  <!-- 轮播图2,extraSlide -->
  <p class="extra-slide">
    <p class="extra-slide-item" :class="slideClass(i)" v-for="(v, i) in slideConfig" :key="i" :style="`background: url(${v.src}); background-size: cover`"></p>
  </p>
</p>

scripts section, set a nowIndex and change nowIndex regularly. The classes of all images change according to this nowIndex. The map type of es6 is used here. For details, click: http://www.jb51.net/article/111734.htm

export default {
  name: &#39;slider&#39;,
  data: function() {  
    return {
      slideInterval: null,
      nowIndex: 0,
      slideLength: this.slideConfig.length
    }
  },
  props: {
    slideConfig: {
      type: Array
    }
  },
  methods: {
    // 限制index不能超出图片列表长度
    resetIndex(i) {
      return i > this.slideLength - 1 ? i - this.slideLength : i
    },
    slideClass(i) {
      let nowIndex = this.nowIndex
      // Map就是key也可以是非字符串的对象,不用Map多写几个 if else 也可以
      let map = new Map([
        [this.resetIndex(nowIndex), &#39;extra-slide-top&#39;],
        [this.resetIndex(nowIndex + 1), &#39;extra-slide-middle-first&#39;],
        [this.resetIndex(nowIndex + 2), &#39;extra-slide-middle-second&#39;],
        [this.resetIndex(nowIndex + 3), &#39;extra-slide-bottom&#39;]
      ])
      // 图片的class根据nowIndex的变化而变化
      return map.get(i) ? map.get(i) : &#39;extra-slide-hide&#39;
    },
    start() {
      // 定时改变nowIndex
      this.slideInterval = setInterval(() => {
        this.nowIndex = this.nowIndex > this.slideLength - 2 ? 0 : this.nowIndex + 1
        console.log(this.nowIndex)
      }, 2000)
    },
    stop() {
      clearInterval(this.slideInterval)
      this.slideInterval = null
    }
  },
  mounted() {
    this.start()
  },
  destroyed() {
    this.stop()
  }
}

slideConfig, component props:

const prefix = &#39;/src/assets/&#39;
const slideConfig = [{
 src: prefix + &#39;s1.jpg&#39;,
 title: &#39;图1&#39;,
 desc: &#39;说明1&#39;
}, {
 src: prefix + &#39;s2.jpg&#39;,
 title: &#39;图2&#39;,
 desc: &#39;说明2&#39;
}, {
 src: prefix + &#39;s3.jpg&#39;,
 title: &#39;图3&#39;,
 desc: &#39;说明3&#39;
}, {
 src: prefix + &#39;s4.jpg&#39;,
 title: &#39;图4&#39;,
 desc: &#39;说明4&#39;
}, {
 src: prefix + &#39;s5.jpg&#39;,
 title: &#39;图5&#39;,
 desc: &#39;说明5&#39;
}, {
 src: prefix + &#39;s6.jpg&#39;,
 title: &#39;图6&#39;,
 desc: &#39;说明6&#39;
}]
export default slideConfig

Usage:

<slider :slideConfig="slideConfig" />

The above is what I compiled for everyone. I hope it will be helpful to everyone in the future.

Related articles:

Detailed analysis of several easily overlooked parts of the Vue document

Using jointjs in vue Method

A brief discussion on the simple method of using Baidu Map under Vue

The above is the detailed content of Use vue to write a sample code for a carousel chart imitating a simplified book. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn