zoukankan      html  css  js  c++  java
  • vue 实现跑马灯 transform

    参考网址:https://blog.csdn.net/webZRH/article/details/83859905

    <template>
      <div class="marquee" ref="marqueeRef">
        <span class="carousel_arrow carousel_arrow_left" @click="prePage">
          <i class="el-icon-arrow-left"></i>
        </span>
        <span class="carousel_arrow carousel_arrow_right" @click="nextPage">
          <i class="el-icon-arrow-right"></i>
        </span>
        <div
          class="marquee_item is-animating"
          :style="{
            transform: transform,
            transition: 'transform ' + transition + 'ms',
          }"
        >
          <div v-for="(carousel, index) in carouselData" :key="index">
            <slot name="after" :carousel="carousel"></slot>
          </div>
        </div>
      </div>
    </template>
    
    <script>
    export default {
      name: "marquee", //跑马灯--横向
      props: {
        carouselData: {
          required: true,
          type: Array,
          default: [],
          desc: "轮播数组",
        },
        autoplay: {
          type: Boolean,
          default: false,
          desc: "是否自动播放",
        },
        interval: {
          type: Number,
          default: 3000,
          desc: "自动切换的时间间隔,单位为毫秒",
        },
        direction: {
          type: String,
          default: "horizontal",
          desc: "走马灯展示的方向",
        },
      },
      computed: {
        transform() {
          return this.direction === "horizontal"
            ? "translateX(" + this.translateX + "px) scale(1)"
            : "translateY(" + this.translateY + "px) scale(1)";
        },
      },
      data() {
        return {
          index: 0,
          transition: 300,
          translateX: 0,
          translateY: 0,
          marqueeWidth: 640,
        };
      },
      mounted() {
        this.marqueeWidth = this.$refs.marqueeRef.clientWidth;
        console.log(this.marqueeWidth);
        this.marquee();
      },
      methods: {
        nextPage() {
          if (this.index < this.carouselData.length) {
            this.index++;
          } else {
            this.index = 0;
          }
          this.marquee();
        },
        prePage() {
          if (this.index > 0) {
            this.index--;
          } else {
            this.index = 0;
          }
          this.marquee();
          let that = this;
          if (that.autoplay) {
            setTimeout(() => {
              that.index++;
              that.marquee();
            }, that.interval);
          }
        },
        marquee() {
          let index = this.index;
          console.log(index);
          if (index == this.carouselData.length) {
            this.index = 0;
            this.transition = 0;
            this.translateX = 0; // x
            this.translateY = 0; // y
          } else {
            this.transition = 300;
            this.translateX = "-" + index * this.marqueeWidth; // x
            this.translateY = "-" + index * 40; // y
          }
        },
      },
    };
    </script>
    
    <style lang="less" scoped>
    // 左右滚动
    .marquee {
       100%;
      height: 390px;
      overflow: hidden;
      position: relative;
    }
    .marquee_item {
       100%;
      height: 100%;
      background: #fff;
      display: block;
      margin: 0 auto;
      white-space: nowrap;
      position: relative;
      > div {
        display: inline-block;
         100%;
        height: 100%;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
      }
    }
    .carousel_arrow {
      height: 36px;
      line-height: 36px;
       36px;
      cursor: pointer;
      transition: 0.3s;
      border-radius: 50%;
      background-color: rgba(31, 45, 61, 0.11);
      color: #fff;
      position: absolute;
      top: 50%;
      z-index: 10;
      transform: translateY(-50%);
      text-align: center;
      font-size: 12px;
    }
    .carousel_arrow_left {
      left: 6px;
    }
    .carousel_arrow_right {
      right: 6px;
    }
    .is-animating {
      -webkit-transition: -webkit-transform 0.4s ease-in-out;
      transition: -webkit-transform 0.4s ease-in-out;
      transition: transform 0.4s ease-in-out;
      transition: transform 0.4s ease-in-out, -webkit-transform 0.4s ease-in-out;
    }
    </style>
  • 相关阅读:
    深入浅出AQS之组件概览
    深入浅出AQS之条件队列
    深入浅出AQS之共享锁模式
    深入浅出AQS之独占锁模式
    Android中RecyclerView用法,一步一步教你如何使用RecyclerView以及带你走过编码中可能会出现的坑~
    检测jquery是否正确引入
    对于使用JDBC连接mysql数据时The server time zone value '¤¤°ê¼Ð·Ç®É¶¡'...的异常问题解决。
    MYSQL8.0以上版本ROOT密码报错及修改
    MYSQL安装教程
    linux centos安装nginx1.7.4
  • 原文地址:https://www.cnblogs.com/zhaomeizi/p/14638544.html
Copyright © 2011-2022 走看看