vue 实现无限向上滚动

<template>
  <div id="box">
    <div
      id="con1"
      ref="con1"
      :class="{anim:animate==true}"
      @mouseenter="mEnter"
      @mouseleave="mLeave"
    >
      <p v-for="(item,index) in items" :key="index">中奖人的名字是--{{item.name}}</p>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      animate: false,
      items: [
        //消息列表对应的数组
        { name: "Kobe Bean Bryant" },
        { name: "Kyrie Irving" },
        { name: "Dwyane Wade" },
        { name: "Pau Gasol" },
        { name: "Dwight Howard" },
        { name: "DeMarcus Cousins" },
        { name: "Kevin Durant" }
      ]
    };
  },

  mounted() {
    this.timer1 = setInterval(this.scroll, 1000);
  },

  methods: {
    scroll() {
      let con1 = this.$refs.con1;
      con1.style.marginTop = "-30px";
      this.animate = !this.animate;
      var that = this; // 在异步函数中会出现this的偏移问题,此处一定要先保存好this的指向
      setTimeout(function() {
        that.items.push(that.items[0]);
        that.items.shift();
        con1.style.marginTop = "0px";
        that.animate = !that.animate; // 这个地方如果不把animate 取反会出现消息回滚的现象,此时把ul 元素的过渡属性取消掉就可以完美实现无缝滚动的效果了
      }, 500);
    },
    mEnter() {
      clearInterval(this.timer1);
    },
    mLeave() {
      this.timer1 = setInterval(this.scroll, 1000);
    }
  }
};
</script>


<style scoped>
* {
  margin: 0;
  padding: 0;
}
#box {
   300px;
  height: 175px;
  line-height: 30px;
  overflow: hidden;
  padding-left: 30px;
  border: 1px solid #ffffff;
  transition: all 0.5s;
}
.anim {
  transition: all 0.5s;
}
#con1 li {
  list-style: none;
  line-height: 30px;
  height: 30px;
}
</style>

  当我们鼠标在上边时停止,离开继续滚动

原文地址:https://www.cnblogs.com/BySee1423/p/13343616.html