vue-封装上下(垂直方向)轮播

需求:没有找到特别好的上下轮播插件-所以自己写了一个简单的demo

一.上下平滑轮播-移入停止-移出继续轮播

<!--
 * 消息滚动
-->
<template>
  <div class="news">
    <div id="roll" class="InfoBox" @mouseover="this.mouseOver" @mouseout="this.mouseOut">
      <div v-for="item in 5" :key="item" class="item">
        {{ item }}
      </div>
    </div>
  </div>
</template>

<script>
export default {
  mounted() {
    var area = document.getElementById("roll");
    // 多加了一组
    area.innerHTML += area.innerHTML;
    this.area = area;
    setInterval(this.scroll, 50);
  },
  data() {
    return {
      area: {},
      stop: false,
      scrollItemNumber: 0,
    };
  },
  methods: {
    scroll() {
      if (!this.stop) {
        // this.area.scrollHeight / 2 这是滚动所有元素的高度
        if (this.area.scrollTop >= this.area.scrollHeight / 2) {
          this.area.scrollTop = 0;
        } else {
          this.area.scrollTop++;
        }
      }
    },
    mouseOver() {
      this.stop = true;
    },
    mouseOut() {
      this.stop = false;
    },
  },
};
</script>
<style lang="scss" scoped>
.news {
  margin: 20px;
  height: 300px;
  background: aqua;
  text-align: center;

  .InfoBox {
    width: 300px;
    height: 300px;
    margin: 0 auto;
    overflow: hidden;
    background: rgb(94, 163, 233);

    .item {
      margin-top: 30px;
      padding: 10px;
      background: rgb(54, 230, 83);
      text-align: center;
      cursor: pointer;
    }
  }
}
</style>

二.加了控制条件的上下轮播-我只是写了个demo(我这个控制条件是5s停顿一次 接着轮播)

<!--
 * 消息滚动
-->
<template>
  <div class="news">
    <div id="roll" class="InfoBox" @mouseover="this.mouseOver" @mouseout="this.mouseOut">
      <div v-for="item in 5" :key="item" class="item">
        {{ item }}
      </div>
    </div>
  </div>
</template>

<script>
export default {
  mounted() {
    var area = document.getElementById("roll");
    // 多加了一组
    area.innerHTML += area.innerHTML;
    this.area = area;
    setInterval(this.scroll, 50);
  },
  data() {
    return {
      area: {},
      stop: false,
      scrollItemNumber: 0,
    };
  },
  methods: {
    scroll() {
      // 控制什么时间 停顿一下 我用的是 5s停顿一次 这个可以根据自己需求
      if (this.scrollItemNumber !== 0 && this.scrollItemNumber % 100 === 0) {
        this.stop = true;
        setTimeout(() => {
          this.stop = false;
          this.scrollItemNumber = 0
        }, 1000)
      }
      if (!this.stop) {
        this.scrollItemNumber++
        console.log(this.scrollItemNumber);

        // this.area.scrollHeight / 2 这是滚动所有元素的高度
        if (this.area.scrollTop >= this.area.scrollHeight / 2) {
          this.area.scrollTop = 0;
        } else {
          this.area.scrollTop++;
        }
      }
    },
    mouseOver() {
      this.stop = true;
    },
    mouseOut() {
      this.stop = false;
    },
  },
};
</script>
<style lang="scss" scoped>
.news {
  margin: 20px;
  height: 300px;
  background: aqua;
  text-align: center;

  .InfoBox {
    width: 300px;
    height: 300px;
    margin: 0 auto;
    overflow: hidden;
    background: rgb(94, 163, 233);

    .item {
      margin-top: 30px;
      padding: 10px;
      background: rgb(54, 230, 83);
      text-align: center;
      cursor: pointer;
    }
  }
}
</style>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值