teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

ご質問の追記内容により回答を修正

2021/01/21 09:26

投稿

Twoshi
Twoshi

スコア354

answer CHANGED
@@ -1,40 +1,49 @@
1
- ご質問拝見たしました。
1
+ Vue.jsのtransitionを利用すると良と思いました。
2
- ご質問内容からおそらく表題にあるv-pagination コンポーネントにtransitionをつけるのではなく、v-paginationでページを切り替え、切り替わる表示部分にtransitionをつけアニメーションをつけたいということかと思いました。
3
2
 
4
- 認識あっていれば...
5
- v-tabs コンポーネント併用してページの切り替えにtransitionをつけるのはいかがでょうか?
3
+ まず、記事表示部分 Cardタグを transitionタグで囲い、Cardタグにv-show="show"追加してみまた。
6
- 以下の例を作成してみました。
7
4
  ```HTML
8
- <div id="app">
5
+ <section class="p-posts">
9
- <v-tabs v-model="page">
6
+ <transition name="fade">
10
- <v-tab-item :value="1" transition="scroll-x-transition">
11
- <v-card>
7
+ <Card
8
+ v-show="show"
9
+ v-for="post in pagePosts"
10
+ :key="post.fields.slug"
11
+ :title="post.fields.title"
12
+ :slug="post.fields.slug"
12
- <v-card-text v-text="'ページ1'"></v-card-text>
13
+ :header-image="post.fields.headerImage"
14
+ :published-at="post.fields.publishedAt"
15
+ :tag="post.fields.tag.fields.tag"
16
+ :tag-slug="post.fields.tag.fields.tagSlug"
17
+ />
18
+ </transition>
13
- </v-card>
19
+ </section>
14
- </v-tab-item>
15
- <v-tab-item :value="2" transition="scroll-x-reverse-transition">
16
- <v-card>
17
- <v-card-text v-text="'ページ2'"></v-card-text>
18
- </v-card>
19
- </v-tab-item>
20
- <v-tab-item :value="3">
21
- <v-card>
22
- <v-card-text v-text="'ページ3'"></v-card-text>
23
- </v-card>
24
- </v-tab-item>
25
- </v-tabs>
26
- <v-pagination v-model="page" :length="3"> </v-pagination>
27
- </div>
28
20
  ```
29
21
 
30
- ```Javascript
22
+ 次に dataにshowを追加します。初期値:true
31
- new Vue({
23
+ ```Vue
32
- el: '#app',
33
- vuetify: new Vuetify(),
34
- data: {
24
+ data () {
25
+ return {
35
- page: 1
26
+ page: 1,
27
+ pagePosts: [],
28
+ pageSize: 6,
29
+ length:0,
30
+ show: true
36
31
  }
37
- })
32
+ }
38
33
  ```
39
34
 
35
+ 最後に pageChange関数を以下のようにしました。
36
+ ```Vue
37
+ pageChange: function(pageNumber){
38
+ this.show = false;
39
+ this.pagePosts = this.posts.slice(this.pageSize*(pageNumber -1), this.pageSize*(pageNumber))
40
+ window.setTimeout(() => {
41
+ this.show = true;
42
+ }, 500);
43
+
44
+ }
45
+ ```
46
+ ご定義いただいているstyleをそのまま利用します。
47
+ Cardコンポーネントをdivタグで代用し上記で動作いたしました。
48
+
40
- ご参考になれば幸いです。
49
+ もっと良い方法があるかもしれませんが、ご参考になれば幸いです。