zoukankan      html  css  js  c++  java
  • vue组件系列-走马灯组件

    <template>
      <div class="sec-alert">
        <div :class="{ animated: isAnimating }">
          <div class="line" v-text="tips[0]"></div>
          <div class="line" v-text="tips[1]"></div>
        </div>
      </div>
    </template>
    <script>
    import { broadcast } from '../utils/data.js';
    let timer
    export default {
      name: 'Broadcast',
      props: {
      },
      data() {
        return {
          ti: 0,
          tips: [],
          isAnimating: false,
          alerts: broadcast.data || []
        }
      },
      methods:{
        startAnimate() {
          if (timer) clearInterval(timer)
          let _alerts
          if (this.alerts.length === 0){
            _alerts = []
          } else if (this.alerts.length === 1) {
            _alerts = [ this.alerts[0], this.alerts[0] ]
          } else {
            _alerts = this.alerts
          }
          this.ti = 1
          this.tips = _alerts.slice(0, 2)
           //this.ti = 0
          //this.tips = _alerts.slice(this.ti, this.ti + 2)
          timer = setInterval(() => {
            this.isAnimating = true
            setTimeout(() => {
              this.isAnimating = false
              this.$nextTick(() => {
                            //这里是数据随机取法
                let _ridx = Math.floor(Math.random() * _alerts.length);
                this.tips = [_alerts[this.ti], _alerts[_ridx]];
                this.ti = _ridx;
      
                            //数据按顺序取法
                          if (this.ti === _alerts.length - 2) {
                           this.ti = this.ti + 1
                          this.tips = [ _alerts[_alerts.length - 1], _alerts[0] ]
                        } else {
                          this.ti = (this.ti + 1) % _alerts.length
                          this.tips = _alerts.slice(this.ti, this.ti + 2)
                        }
                    
              })
            }, 500)
          }, 3000);
        }
      },
      mounted() {
        this.startAnimate()
      },
      watch: {
        alerts() {
          if (this.alerts && this.alerts.length) {
            this.startAnimate()
          }
        }
      },
      destroyed() {
        if (timer) {
          clearInterval(timer)
          timer = null
        }
      }
    }
    </script>
    <style lang="postcss">
    
      .sec-alert {
        95%; 
        margin:0 auto;
        height: 61px;
        border-radius: 6px;
        background: url('../assets/images/hongbao_scroll_icon.jpg') no-repeat 20px center #db2031;
        overflow: hidden;
        padding-left: 73px;
        .line{
          line-height:61px;
          font-family: PingFangSC;
          font-size: 26px;
          letter-spacing: 0.52px;
          color: #f9d587;
        }
        .animated {
          transform: translateY(-50%);
          transition: transform .4s linear;
        } 
      }
    </style>            
  • 相关阅读:
    使用ffmpeg将mp4切片成ts slice 并生成m3u8命令,同时让IIS支持支持 m3u8
    C# 自动下移动光标 。winform 发送tab,在WPF中
    C# 获取当前程序路径方法整理
    Jeecg-Boot 2.0.0 版本发布,基于Springboot+Vue 前后端分离快速开发平台
    vue2.0源码-丰富的选项合并策略
    JavaScript 核心原理精讲
    前端性能优化
    Vue Router模式
    css3实现圆角三角形
    CSS动画
  • 原文地址:https://www.cnblogs.com/sybboy/p/12207235.html
Copyright © 2011-2022 走看看