Vue.jsでリストの並べ替えをアニメーション化する方法

サミュエル・デ・バッカー

Vue.jsを使用してリストの並べ替えをアニメーション化しようとしていますが、すべてのアイテムがアニメーション化されているわけではありません。なぜなのかご存知ですか?そしてそれを機能させる方法は?

new Vue({
  el: '#app',
  data: {
    reverse: 1,
    items: [
      { name: 'Foo' },
      { name: 'Bar' },
      { name: 'Baz' },
      { name: 'Qux' }
    ]
  }
})
.moving-item {
  transition: all 1s ease;
  -webkit-transition: all 1s ease;
}
ul {
  list-style-type: none;
  padding: 0;
  position: relative;
}
li {
  position: absolute;
  border: 1px solid #42b983;
  height: 20px;
  width: 150px;
  padding: 5px;
  margin-bottom: 5px;
  color: #42b983;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.0-alpha.2/vue.min.js"></script>
<div id="app">
  <button on-click="reverse = Math.abs(reverse-1)">
    <span v-if="reverse == 0">△</span>
    <span v-if="reverse == 1">▽</span> Order
  </button>
  <ul>
    <li class="moving-item" v-for="item in items | orderBy 'name' reverse" bind-style="{ top: ($index * 35) + 'px'}">{{ item.name }}</li>
  </ul>  
</div>

デビッドK.ヘス

問題は、ソート中に要素の1つだけがDOMに残っていることだと思います。他の3つは、新しい順序を満たすために削除および再挿入されていますが、その結果、アニメーションはトリガーされていません。

通常、アニメーションはVue遷移システム(http://vuejs.org/guide/transitions.htmlを使用して行われます。ただし、その手法を使用すると、位置の状態を追跡しない削除と再挿入の同じ基本的な問題が発生します。通常、アイテムは以前の位置と新しい位置に関係なくアニメーション化されます(古い位置でのフェードアウトや新しい位置でのフェードインなど)。

本当に古い位置から新しい位置にアニメーション化する必要がある場合は、削除する前に各アイテムの前の位置を記憶し、挿入時に新しい位置にアニメーション化する独自のJavascriptトランジションを作成する必要があると思います。 。

ここに良い出発点となる例があります:http//vuejs.org/guide/transitions.html#JavaScript_Only_Transitions

別のオプションは、フィルターでソートせず、代わりにjavascriptでソートすることです(v-for1回だけレンダリングされるように)。次に、次のように、アイテムの新しいインデックスパラメータに対してバインドスタイルをターゲットにします。

new Vue({
  el: '#app',
  data: {
    reverse: 1,
    items: [
      { name: 'Foo', position: 0 },
      { name: 'Bar', position: 1 },
      { name: 'Baz', position: 2 },
      { name: 'Qux', position: 3 }
    ]
  },
  methods: {
    changeOrder: function (event) {
      var self = this;
      self.reverse = self.reverse * -1
      var newItems = self.items.slice().sort(function (a, b) { 
        var result;
        if (a.name < b.name) {
          result = 1
        }
        else if (a.name > b.name) {
          result = -1
        }
        else {
          result = 0
        }
        return result * self.reverse
      })
      newItems.forEach(function (item, index) {
        item.position = index;
      });
    }
  }
})
 
.moving-item {
  transition: all 1s ease;
  -webkit-transition: all 1s ease;
}
ul {
  list-style-type: none;
  padding: 0;
  position: relative;
}
li {
  position: absolute;
  border: 1px solid #42b983;
  height: 20px;
  width: 150px;
  padding: 5px;
  margin-bottom: 5px;
  color: #42b983;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.0-alpha.2/vue.min.js"></script>
<div id="app">
  <button on-click="changeOrder">
    <span v-if="reverse == -1">△</span>
    <span v-if="reverse == 1">▽</span> Order
  </button>
  <ul>
    <li class="moving-item" v-for="item in items" bind-style="{ top: (item.position * 35) + 'px'}">{{ item.name }}</li>
  </ul>  
</div>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Vue.jsを使用してあるリストから別のリストに移動するtodoをアニメーション化する方法は?

分類Dev

vueとcssのみを使用してアニメーションで背景色を切り替える方法

分類Dev

リストアイテムが削除されたときにVueでリストアイテムをアニメーション化する方法

分類Dev

VueでCSSアニメーションをリセットする方法

分類Dev

vue.jsのタイプでコメントを並べ替える

分類Dev

リストの並べ替えをアニメーション化するreact.jsフレンドリーな方法は何ですか?

分類Dev

Vue.jsで並べ替え可能な配列とコンポーネントを順番に保持する方法

分類Dev

Vue.jsがリストの並べ替えを元に戻しているようです

分類Dev

Vue.js-配列内のオブジェクトを特定のプロパティで並べ替えて「v-for」でレンダリングする方法

分類Dev

vuexアクションVue.jsでオブジェクト配列を並べ替えることができません

分類Dev

Vue-テーブルの行の変更をアニメーション化する方法

分類Dev

アクション内でjs-vue-modalをトリガーする方法

分類Dev

アニメーションでvueコンポーネントを反復処理する方法

分類Dev

ボタンをクリックしながら、Vue.jsのリストを名前で並べ替えます

分類Dev

Vue.js:メソッドに基づいてリストを並べ替える

分類Dev

Vue.jsフィルタリングされた結果を日付で並べ替える方法

分類Dev

Vue Konva アニメーションで複数の円をレンダリングするパフォーマンスを向上させる

分類Dev

Vue-計算されたフィルター済みリストの変更時にアニメーションをトリガーする

分類Dev

Vue.jsでトランジションをトリガーする方法

分類Dev

並べ替える値が計算の結果である場合にVueで列を並べ替える方法

分類Dev

React Native FlatListで並べ替えをアニメーション化する方法は?

分類Dev

Vue.jsアプリケーション間で「計算された」メソッドを共有する方法

分類Dev

Vue.js:JS-アニメーション-GSAPとのフック-アニメーションを機能させないままにする

分類Dev

Vue.js 3 / ViteアプリケーションでjQueryを$にインポートする方法

分類Dev

LaravelでVueで価格と日付を並べ替える方法

分類Dev

Vue.js-コンポーネントを更新する前に、アニメーションが終了するまで待ちます

分類Dev

vueアプリケーションでchessboard.jsをインポートする際の問題

分類Dev

Vueの再帰コンポーネントでアクティブクラスを切り替える方法は?

分類Dev

Vueでアクティブメニューオプションを設定する方法

Related 関連記事

  1. 1

    Vue.jsを使用してあるリストから別のリストに移動するtodoをアニメーション化する方法は?

  2. 2

    vueとcssのみを使用してアニメーションで背景色を切り替える方法

  3. 3

    リストアイテムが削除されたときにVueでリストアイテムをアニメーション化する方法

  4. 4

    VueでCSSアニメーションをリセットする方法

  5. 5

    vue.jsのタイプでコメントを並べ替える

  6. 6

    リストの並べ替えをアニメーション化するreact.jsフレンドリーな方法は何ですか?

  7. 7

    Vue.jsで並べ替え可能な配列とコンポーネントを順番に保持する方法

  8. 8

    Vue.jsがリストの並べ替えを元に戻しているようです

  9. 9

    Vue.js-配列内のオブジェクトを特定のプロパティで並べ替えて「v-for」でレンダリングする方法

  10. 10

    vuexアクションVue.jsでオブジェクト配列を並べ替えることができません

  11. 11

    Vue-テーブルの行の変更をアニメーション化する方法

  12. 12

    アクション内でjs-vue-modalをトリガーする方法

  13. 13

    アニメーションでvueコンポーネントを反復処理する方法

  14. 14

    ボタンをクリックしながら、Vue.jsのリストを名前で並べ替えます

  15. 15

    Vue.js:メソッドに基づいてリストを並べ替える

  16. 16

    Vue.jsフィルタリングされた結果を日付で並べ替える方法

  17. 17

    Vue Konva アニメーションで複数の円をレンダリングするパフォーマンスを向上させる

  18. 18

    Vue-計算されたフィルター済みリストの変更時にアニメーションをトリガーする

  19. 19

    Vue.jsでトランジションをトリガーする方法

  20. 20

    並べ替える値が計算の結果である場合にVueで列を並べ替える方法

  21. 21

    React Native FlatListで並べ替えをアニメーション化する方法は?

  22. 22

    Vue.jsアプリケーション間で「計算された」メソッドを共有する方法

  23. 23

    Vue.js:JS-アニメーション-GSAPとのフック-アニメーションを機能させないままにする

  24. 24

    Vue.js 3 / ViteアプリケーションでjQueryを$にインポートする方法

  25. 25

    LaravelでVueで価格と日付を並べ替える方法

  26. 26

    Vue.js-コンポーネントを更新する前に、アニメーションが終了するまで待ちます

  27. 27

    vueアプリケーションでchessboard.jsをインポートする際の問題

  28. 28

    Vueの再帰コンポーネントでアクティブクラスを切り替える方法は?

  29. 29

    Vueでアクティブメニューオプションを設定する方法

ホットタグ

アーカイブ