自动滚动组件

<template>
  <div
    @mouseover="handlePause"
    @mouseleave="handleMove"
    class="seamless_wrap"
    ref="seamless"
  >
    <div class="scroll" :style="style">
      <div class="scroll_item" ref="item">
        <slot></slot>
      </div>
      <div class="scroll_item" v-show="ih >= wh">
        <slot></slot>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: "SeamLessScroll",
  data() {
    return {
      timer: null,
      style: {},
      wh: 0, //容器高度
      ih: 0, //内容高度
      scrollH: 0,
      timer2: null,
      times: 0,
    };
  },
  mounted() {
    this.init();
  },
  beforeDestroy() {
    clearTimeout(this.timer);
  },
  methods: {
    init() {
      this.wh = Number.parseInt(
        window.getComputedStyle(this.$refs.seamless).height
      );
      this.ih = Number.parseInt(
        window.getComputedStyle(this.$refs.item).height
      );

      if (this.ih >= this.wh) {
        this.handleMove();
      }

      this.timer2 = setTimeout(() => {
        if (this.times == 3 || this.ih) {
          clearTimeout(this.timer2);
        } else {
          this.init();
        }
      }, 200);
    },
    handleMove() {
      this.timer = setTimeout(() => {
        if (this.scrollH < this.ih) {
          this.style = {
            transform: `translateY(-${(this.scrollH += 1)}px)`,
          };
        } else {
          this.style = { transform: "translateY(0)" };
          this.scrollH = 0;
          this.style = {
            transform: `translateY(-${(this.scrollH += 1)}px)`,
          };
          this.scrollH = 1;
        }
        this.handleMove();
      }, 30);
    },
    handlePause() {
      window.clearTimeout(this.timer);
    },
  },
};
</script>

<style scoped>
.seamless_wrap {
  overflow: hidden;
}
</style>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值