通过Vue js循环循环动画或活动类

Posted

技术标签:

【中文标题】通过Vue js循环循环动画或活动类【英文标题】:Cycle animation or active class through Vue js loop 【发布时间】:2020-02-13 16:44:48 【问题描述】:

我已经在一个旧的 vanilla js 应用程序中创建了这个效果。我有一系列具有悬停动画的块,当没有悬停时,动画会逐块循环。

我已经在 Vue js 中重建了整个应用程序,其他一切都变得更加容易。这是应用程序的唯一部分,我正在努力以没有 dom 操作的“Vue”方式进行操作。基本上我有一个 3 秒的超时,组件获取“活动”类,然后该类切换到 v-for 中的下一个组件。

有什么建议吗?

【问题讨论】:

【参考方案1】:

您应该只需要使用data 中的属性来表示相关状态。每当您想直接操作 DOM 时,只需更新一些状态并将其相应地连接到模板。

希望这个演示能满足您的需求:

new Vue(
  el: '#app',
  
  data () 
    return 
      active: 0,
      
      items: [
        'Red',
        'Green',
        'Blue',
        'Yellow'
      ]
    
  ,
  
  mounted () 
    this.startTimer()
  ,
  
  destroyed () 
    this.stopTimer()
  ,
  
  methods: 
    onMouseEnter (index) 
      this.stopTimer()
      this.active = index
    ,
    
    onMouseLeave () 
      this.startTimer()
    ,
    
    startTimer () 
      if (this.timerId) 
        return
      
    
      this.timerId = setInterval(() => 
        this.active = (this.active + 1) % 4
      , 500)    
    ,
    
    stopTimer () 
      clearInterval(this.timerId)
      this.timerId = null
    
  
)
ul 
  border: 1px solid #777;
  margin: 0;
  padding: 0;


li 
  list-style: none;
  padding: 5px;


.active 
  background: #ccf;
<script src="https://unpkg.com/vue@2.6.10/dist/vue.js"></script>

<div id="app">
  <ul>
    <li
      v-for="(item, index) in items"
      :key="item"
      :class=" active: active === index "
      @mouseenter="onMouseEnter(index)"
      @mouseleave="onMouseLeave"
    >
       item 
    </li>
  </ul>
</div>

【讨论】:

以上是关于通过Vue js循环循环动画或活动类的主要内容,如果未能解决你的问题,请参考以下文章

如何缓存或预渲染画布动画

js通过循环多张图片实现动画效果

Vue JS:循环通过对象内联属性

Vue过渡&循环切换&放大缩小动画

Vue.js:通过循环遍历数组值来绑定文本字段的值

Vue.js v-for 在循环组件中增加一些变量