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

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

新規登録して質問してみよう
ただいま回答率
85.35%
jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

2517閲覧

vivus.jsを使用した手書き風アニメーションをslickスライドでactive(表示)されているタイミングでスタートさせるには

begerking

総合スコア28

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2020/03/18 20:00

編集2020/03/18 22:10

まずはじめに

初心者のため、もしかしたら非常に簡単なことかもしれません。
コードも作成したものの、無駄がある可能性があります。
色々と試してみたものの、どうしても実現出来ませんでした。
どなたかご教授頂けますと幸いです。

実現したいこと

slick.js(https://kenwheeler.github.io/slick/)のスライド上で、
表示されたタイミングでvivus.js(https://maxwellito.github.io/vivus/)を使用した
手書き風アニメーションをスタート、着火させたい。
スライドは全3枚です。

もしくは、slick.jsの場合、表示されているスライドにはclassにslick-activeが
付与されるので、そのclassが追加されたらアニメーションがスタートするような
ものでも構いません。

  • アニメーションの表現自体は成功していますが、問題は表示のタイミングです。
  • スライド1枚目はsetTimeoutで繰り返し設定をしているので表示はうまくいきますが、

2枚目以降、もしくは表示2回目以降がバラバラになってしまいます。

  • あくまで私の予想?なのですが、合計秒数とsetTimeoutの数値が合っていないからでは

ないかと思うのですが、それでもなぜか計算が合いません。

  • setIntervalで繰り返すということも考えたのですが、書き方がおかしいのか、

何回も実行してしまい、2回目・3回目とスライドの回数が増えるほど表示が早くなってしまいます。

参考にしたサイト

https://www.webprofessional.jp/how-to-create-the-invisible-pen-effect-in-svg-using-vivus-js/

現在の状況・試したコード

<path>の設定について
各スライドの**一番初めの<path>にのみ、 data-delay="60"**を追加しています。
なので60ほど遅れてアニメーションがスタートします。
cssの設定に関しては秒数を設定していないので省略致します。
※そもそもにこの60が0.06秒なのか、0.6秒なのか…。

●slickの設定はこちら

$('.slide ul').slick({ slidesToShow: 1, autoplay: true, autoplaySpeed: 5000, speed:500, cssEase:'ease-out' });

●vivusの設定はこちら
setTimeoutで数秒後に再度着火するようにしていますが、
これがどうしてもズレてしまいます。秒数計算が間違っているだけだとは
思うのですが、スライドとの兼ね合いもあり、なかなかうまくいきません。
※duration: 20の場合、何秒計算になるのでしょうか。合計で20かかる、ということなのか、
1つ1つの<path>が20かかっているということでしょうか。

//スライド1の手書きanimation設定 new Vivus('svg-animation1', { start: 'inViewport', type: 'scenario-sync', duration: 20, forceRender: false, animTimingFunction: Vivus.EASE }, function(anime1){ setTimeout(function(){ anime1.reset().play(); }, 5500); } ); //スライド2の手書きanimation設定 new Vivus('svg-animation2', { start: 'inViewport', type: 'scenario-sync', duration: 20, forceRender: false, animTimingFunction: Vivus.EASE }, function(anime2){ setTimeout(function(){ anime2.reset().play(); }, 5500); } ); //スライド3の手書きanimation設定 new Vivus('svg-animation3', { start: 'inViewport', type: 'scenario-sync', duration: 20, forceRender: false, animTimingFunction: Vivus.EASE }, function(anime3){ setTimeout(function(){ anime3.reset().play(); }, 5500); } );

以上になります。恐らくあと少しのところまで来ているのですが、
あと一歩が足りません。
大変恐縮ですが、解決策をお知りの方、
いらっしゃいましたら少しでも構いません。
解決に近づける助言・ご指導のほどよろしくお願いいたします。

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

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

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

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

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

m.ts10806

2020/03/18 21:03

>初心者のため、もしかしたら非常に簡単なことかもしれません。 「初心者アイコン」を質問に付加してください。
m.ts10806

2020/03/18 21:06

あとPHPは本件にどのように関係するのでしょうか? 「jQuery」および「jQueryプラグイン」のほうが関係すると思います。 タグを見直してください。
begerking

2020/03/18 21:06

初心者アイコンの存在すら知りませんでして、助言いただきありがとうございます!修正いたしました。
guest

回答2

0

ベストアンサー

切り替わりのイベントでVivusを動かすようにすれば良いのでは。

【afterChange | slick - にほんご。】
https://tr.you84815.space/slick/events/afterChange.html

投稿2020/03/19 15:30

kei344

総合スコア69606

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

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

begerking

2020/03/19 17:28

こちらを参考にしたところ、無事に実現できました! slickで制御するのは全く考えてなかったので 目からうろこでした。本当にありがとうございます!
guest

0

setTimeoutではなく、slickでafterChangeを使用することで
無事作成できました。

スライド1枚目の1回目だけはafter対象外なので、
1回きりで別途指示を出しました。

//1回目1枚目の設定 new Vivus('anime1', { start: 'inViewport', type: 'scenario-sync', animTimingFunction: Vivus.EASE }); //それ以外、基本的なスライドへの指示 $('.slide').on('afterChange', function(event, slick, currentSlide){ new Vivus('anime1', { start: 'inViewport', type: 'scenario-sync', animTimingFunction: Vivus.EASE }), new Vivus('svg-animation2', { start: 'inViewport', type: 'scenario-sync', animTimingFunction: Vivus.EASE }); });

投稿2020/03/19 17:32

begerking

総合スコア28

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問