zoukankan      html  css  js  c++  java
  • 轮播图

     大概效果就是这样 每隔一段时间便更换一张图片

    <template>
      <div class="home">
        <div class="img-wrapper">
          <transition-group :name="animation">
            <div v-for="(item, index) in list" :key="index"
                v-show="index === currentIndex">
              <img :src="item.url"
                  @click="setCurrent(index)"
                  style=" 100%;max-height:200px;"/>
            </div>
          </transition-group>
        </div>
        <div class="wrapper">
          <div :class="{'on': currentIndex === index }"
              v-for="(item, index) in list" :key="index"
              @click="setCurrent(index)"><!--v-bind动态绑定类名,如果相等,则这个on类名存在-->
          </div>
        </div>
      </div>
    </template>

    <script>
    // @ is an alias to /src

    export default {
      name: 'Home',
      components: {
      },
      data() {
        return {
          animation: 'list1',
          list: [
            {
              id: 1,
              url: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1589821606002&di=ff748e6e7e774ba63ebf01e44a7c60ed&imgtype=0&src=http%3A%2F%2Fcdn.qiancipai.com%2F190305170514872174.jpg',
            },
            {
              id: 2,
              url: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1589821606002&di=b7318b20c6bc938f9f686989bdfff446&imgtype=0&src=http%3A%2F%2Ffile.youboy.com%2Fa%2F105%2F81%2F6%2F2%2F11099982s.jpg',
            },
            {
              id: 3,
              url: 'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2186080368,3144660073&fm=15&gp=0.jpg',
            },
            {
              id: 4,
              url: 'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=911607183,504846458&fm=15&gp=0.jpg',
            },
            {
              id: 5,
              url: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1589821708519&di=fe7bdae787c83305c75688ff39776bbd&imgtype=0&src=http%3A%2F%2Fi1.hdslb.com%2Fbfs%2Farchive%2Ff47d9b1af8b8c790a6a1ebdde3f0c0943d726869.jpg',
            }
          ],
          currentIndex: 0,
          timer1: null,
          timer2: null,
        }
      },
      mounted() {
        this.setTimer1();
      },
      methods: {

        /**
         * @desc 设置当前选中项
         */
        setCurrent(index) {
        if(index > this.currentIndex) {
          this.animation = 'list0'//如果点击的大于当前序号,则往左翻
        } else {
          this.animation = 'list1'
        }
          this.currentIndex = index
          
          this.clearTimer1() // 清除定时器,
          this.clearTimer2()// 清除定时器 避免没点击一次就开始下面这行代码就被触发一次,造成多次设置无限循环定时器的启动
          this.timer2 = setTimeout(() => { 
             // 过10秒后又开始设置无限循环定时器
            this.setTimer1()
          }, 1000 * 10)
        },

        /**
         * @desc - 清除无限循环定时器
         */
        clearTimer1() {
          clearInterval(this.timer1)
        },

        /**
         * @desc - 清除无限循环定时器
         */
        clearTimer2() {
          clearTimeout(this.timer2)
        },

        /**
         * @desc - 设置无限循环定时器
         */
        setTimer1(t = 5) {
          this.timer1 = setInterval(() => {
            if (this.currentIndex === this.list.length - 1) {
              this.animation = 'list1'
          
              this.currentIndex = 0
            } else {
              this.animation = 'list0'
              this.currentIndex++
            }
          }, 1000 * t)
        }
      },

      /**
       * @desc - 页面销毁之前清除定时器
       */
      beforeDestroy() {
        clearInterval(this.timer1)
        clearTimeout(this.timer2)
      }
    }
    </script>
    <style>
    /* 往左动画 */
    .list0-enter-active, .list0-leave-active {
      transition: all 0.25s ease 0s;
    }
    .list0-enter {
      opacity: 0;
      transform: translateX(100%);
    }
    .list0-leave-to {
      opacity: 0;
      transform: translateX(-100%);
    }

    /* 往右动画 */
    .list1-enter-active, .list1-leave-active {
      transition: all 0.25s ease 0s;
    }
    .list1-enter {
      opacity: 0;
      transform: translateX(-100%);
    }
    .list1-leave-to {
      opacity: 0;
      transform: translateX(100%);
    }
    </style>
    <style lang="scss" scoped>
    .home {
      position: relative;
       375px;
      height: 200px;

      .img-wrapper {
        position: relative;
        img {
          position: absolute;
        }
      }

      .wrapper {
        position: absolute;
        bottom: 10px;
        right: 0;
        display: flex;
        div {
           15px;
          height: 15px;
          margin: 10px;
          border-radius: 50%;
          background: aquamarine;
        }
        div.on {
          background: red;
        }
      }
    }

    </style>
  • 相关阅读:
    Linux命令:sed -i 解析、sed是什么、工作原理、基本语法使用、数字和正则定址、基本子命令以及最常用子命令 s 的用法
    【转】putty里面的连接key文件(ppk文件)转换为xshell里面使用的key文件
    【转】Go 中如何优雅关闭子进程?
    [转]golang 获取本机真实IP
    【转】prometheus数据写入TDengine
    怎么查看redhat的版本
    【转】YML是什么
    [转]为什么要进行URL编码
    [转]Ubuntu 上 Yarn 安装
    【转】docker -v 和Dockerfile 中VOLUME 区别
  • 原文地址:https://www.cnblogs.com/cookie-bubble/p/12931315.html
Copyright © 2011-2022 走看看