数字变化时的滚动效果(VUE)组件化

Posted soonk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数字变化时的滚动效果(VUE)组件化相关的知识,希望对你有一定的参考价值。

1.外部引入
styleHeight:样式的高度,Number: 数字大小
<compute-number
                :styleHeight="44"
                :number="Number(1905)"
              >
</compute-number>
 
2.组件代码
<template>
  <div id="demo">
    <div class="nwwest-roll" :style="{‘height‘: styleHeight + ‘px‘}" id="nwwest-roll">
      <ul id="roll-ul" class="roll-ul">
        <li v-for="(item, index) in list"  :style="{‘height‘: styleHeight + ‘px‘}" ref="rollul" class="rollLi" :class="{anim:animate==true}">
          <span class="name">{{item}}</span>
        </li>
      </ul>
    </div>
  </div>
</template>
<script>
  export default {
// 此处是模拟数字变化,所以数字都不会改变,
    props: {
      number: {
        type: Number,
        default: 0
      },
      styleHeight: {
        type: Number,
        default: 0
      }
    },
    watch: {
      number (newValue, oldValue) {
        this.list[1] = newValue
        this.list[0] = oldValue
        this.num = newValue;
      }
    },
    data () {
      return {
        animate: true,
        list: [this.number, this.number],
        num: this.number,
        newNum: this.number,
        timeout: ‘‘,
        timeInterval: ‘‘
      }
    },
    mounted () {
      this.timeInterval = setInterval(() => {
        this.scroll(this.number);
      }, 4000);
    },
    beforeDestroy() {
      clearInterval(this.timeout)
      clearInterval(this.timeInterval)
    },
    methods: {
      scroll(num){
        let con1 = this.$refs.rollul;
        /* styleHeight */
        // let marginTopHeight = (this.styleHeight - 10) + ‘px‘
        con1[0].style.marginTop = 0;
        this.animate = !this.animate;
        var that = this;
        that.timeout = setTimeout(() =>{
          that.list[1] = num
          con1[0].style.marginTop = -this.styleHeight + ‘px‘;
          that.animate = !that.animate;
          setTimeout(() => {
            that.list[0] = num
          }, 1000);
        }, 80)
      }
    }
  }
</script>
<style lang="" scoped>
  .nwwest-roll {
    overflow: hidden;
  }
  .nwwest-roll .name{
    display: inline-block;
  }
 
  .roll-ul {
    list-style: none;
    padding: 0;
    margin: 0;
  }
  .anim {
    transition: all 1s;
  }
</style>

以上是关于数字变化时的滚动效果(VUE)组件化的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条

vue 滚动条选中元素自动滚动到可视区域里居中显示

vue项目中滚动时导航吸顶效果(固定定位)

WPF中ListBox滚动时的缓动效果

数字滚动插件 vue-count-to 使用时出现文本抖动?

vue 纯手写滚动条,封装滚动条组件