質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

2008閲覧

Vue.jsでクリックされたときにCSSアニメーションを走らせたい。

nztm

総合スコア16

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/02/06 03:42

Vue.js(Nuxt.js)で、ボタンがクリックされたときに
CSSの#animationを<div class="object">で発火させたいです。

v-showでtrue falseを切り替えるのではなく、methodsなどでクリック毎に実行されるようにしたいと考えています。

自分の調べ方が間違っているのか、v-showでの切り替えやtransitionを用いたものしかヒットせず、
このようにしたい場合はどうすればいいのでしょうか。

どなたかお知恵をお借りできますと助かります。

Vue

1<template> 2 <div class="object"> 3 <p>Hello World!</p> 4 </div> 5 <button @click="startAnimation">click!</button> 6</template> 7 8<script> 9export default { 10} 11</script> 12 13<style scoped> 14#animation { 15 animation-direction: normal; 16 animation-duration: 1s; 17 animation-name: anim_sc; 18 animation-timing-function: ease; 19 transform: scale(1, 1); 20 21 @keyframes anim_sc { 22 50% { 23 transform: scale(0.9, 0.9); 24 } 25 26 100% { 27 transform: scale(1, 1); 28 } 29 } 30} 31</style>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

以下のコードで、ボタンクリック時にアニメーションさせることができました。
クリックするとdiv要素にanimationクラスを追加し、そのタイミングでアニメーションが起こります。

なお、クリックするたびにアニメーションを起こすには追加したanimationクラスを外す処理が必要で、それをdoAnimメソッド内のsetIntervalで行っています。
CSSでanimation-durationに1Sを指定されているので、少し余裕を持たせてdelayに1100を指定しています。

vue

1<template> 2 <div class="object" :class="{ animation: isAnim }"> 3 <p>Hello World!</p> 4 </div> 5 <button @click="doAnim">click!</button> 6</template> 7 8<script> 9export default { 10 data() { 11 return { 12 isAnim: false, 13 interval: null 14 } 15 }, 16 methods: { 17 doAnim() { 18 if (this.isAnim === true || this.interval !== null) { 19 return 20 } 21 // animation start 22 this.isAnim = true 23 // set interval 24 this.interval = setInterval(() => { 25 // animation stop 26 this.isAnim = false 27 // clear interval 28 clearInterval(this.interval) 29 this.interval = null 30 }, 1100) 31 } 32 } 33} 34</script> 35 36<style scoped> 37.animation { 38 animation-direction: normal; 39 animation-duration: 1s; 40 animation-name: anim_sc; 41 animation-timing-function: ease; 42 transform: scale(1, 1); 43} 44@keyframes anim_sc { 45 50% { 46 transform: scale(0.9, 0.9); 47 } 48 49 100% { 50 transform: scale(1, 1); 51 } 52} 53</style>

スタイルについては

  • #animation.animationへリネーム
  • @keyframesの記述位置を修正

しています。

投稿2020/02/06 11:12

rubytomato

総合スコア1752

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nztm

2020/02/06 12:49

できました!! ありがとうございます!
guest

0

cssにクラスを付加してクラスのつけ外しでやってみては?

投稿2020/02/06 04:09

yambejp

総合スコア114810

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nztm

2020/02/06 05:41

そのやり方がわからず、質問しています。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問