zoukankan      html  css  js  c++  java
  • Vue.js 轮播组件

    <template>
      <div class="slide-show" @mouseover="clearInv" @mouseout="runInv">
        <div class="slide-img">
          <a :href="slides[nowIndex].href">
            <transition name="slide-trans">
              <img v-if="isShow" :src="slides[nowIndex].src">
            </transition>
            <transition name="slide-trans-old">
              <img v-if="!isShow" :src="slides[nowIndex].src">
            </transition>
          </a>
        </div>
        <h2>{{ slides[nowIndex].title }}</h2>
        <ul class="slide-pages">
          <li @click="goto(prevIndex)"><</li>
          <li v-for="(item, index) in slides"
              @click="goto(index)"
          >
            <a :class="{on: index === nowIndex}">{{ index + 1 }}</a>
          </li>
          <li @click="goto(nextIndex)">></li>
        </ul>
      </div>
    </template>
    
    <script>
        export default {
          name: "slide",
          props:{
            slides:{
              type:Array,
              default:[]
            },
            inv:{
              type:[Number ,String],
              default: 1000
            }
          },
          data(){
            return {
              nowIndex:0,
              isShow:true
            }
          },
          computed:{
            prevIndex(){
              if(this.nowIndex == 0){
                return this.slides.length - 1
              }else{
                return this.nowIndex-1
              }
            },
            nextIndex(){
              if(this.nowIndex == this.slides.length - 1){
                return 0
              }else{
                return this.nowIndex+1
              }
            }
          },
          methods:{
            goto (index) {
              this.isShow = false
              setTimeout(() => {
                this.isShow = true
                this.nowIndex = index
              }, 10)
            },
            runInv () {
              this.invId = setInterval(() => {
                this.goto(this.nextIndex)
              }, this.inv)
            },
            clearInv () {
              clearInterval(this.invId)
            }
          },
          mounted(){
            this.runInv()
          }
        }
    </script>
    
    <style scoped>
      .slide-trans-enter-active {
        transition: all .5s;
      }
      .slide-trans-enter {
        transform: translateX(900px);
      }
      .slide-trans-old-leave-active {
        transition: all .5s;
        transform: translateX(-900px);
      }
      .slide-show {
        position: relative;
        margin: 15px 15px 15px 0;
         900px;
        height: 500px;
        overflow: hidden;
      }
      .slide-show h2 {
        position: absolute;
         100%;
        height: 100%;
        color: #fff;
        background: #000;
        opacity: .5;
        bottom: 0;
        height: 30px;
        text-align: left;
        padding-left: 15px;
      }
      .slide-img {
         100%;
      }
      .slide-img img {
         100%;
        position: absolute;
        top: 0;
      }
      .slide-pages {
        position: absolute;
        bottom: 10px;
        right: 15px;
      }
      .slide-pages li {
        display: inline-block;
        padding: 0 10px;
        cursor: pointer;
        color: #fff;
      }
      .slide-pages li .on {
        text-decoration: underline;
      }
    </style>
    

      《====================        计算属性:只有在它的相关依赖数据发生改变时,才会重新赋值       =======================》

  • 相关阅读:
    【2】网站搭建:数据库选型
    【1】网站搭建:模型设计
    输入法评价
    站立会议个人博客六
    站立会议个人博客五
    站立会议个人博客四
    站立会议个人博客三
    第十一周学习进度表
    站立会议个人博客二
    典型用户和用户场景描述。
  • 原文地址:https://www.cnblogs.com/dyy-dida/p/10522864.html
Copyright © 2011-2022 走看看