みなさんこんにちは!
時々このブログを除いてくれてる友人からもう少しプライベートなこと書いてみたら?
と言われたのですが、特に書くこともなく…
ということで笑
今日も早速、表題について解説。
SVGでテキストなどを書き出して、線画から塗りといったアニメーションをウェブサイトで実装するのが一時期流行りましたよね。
最近になって過去に自分が起こした記事で上記のアニメーションがIEのみ表示されてない、という事態が発覚し、
その対応策を講じるにあたって意外と時間を要したので、ここであたらめて説明しておきたいと思います。
もともとはCSSアニメーションだけで動かしていた
もともとSVGで起こしたファイル(SVGのソース)を、WPの固定ページ部分にそのまま貼り付けて、SVGにクラスを付与して
それをCSSに下記のようなソースを記述して動かしていました。
.layer {
stroke: #a09373;
fill: #a09373;
stroke-width: 1.6;
fill-opacity: 0;
-webkit-animation: DASH 5s 2s ease-in 1;
animation: DASH 5s 2s ease-in 1;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
stroke-dasharray: 2000;
stroke-dashoffset: 2000;
}
@keyframes DASH{
0%{stroke-dashoffset:3000;}
40% { fill-opacity: 0; stroke-dashoffset: 0;}
100%{stroke-dashoffset:0; fill-opacity: 1;}
}
@-moz-keyframes DASH{
0%{stroke-dashoffset:3000;}
40% { fill-opacity: 0; stroke-dashoffset: 0;}
100%{stroke-dashoffset:0; fill-opacity: 1;}
}
@-webkit-keyframes DASH{
0%{stroke-dashoffset:3000;}
40% { fill-opacity: 0; stroke-dashoffset: 0;}
100%{stroke-dashoffset:0; fill-opacity: 1;}
}
@-o-keyframes DASH{
0%{stroke-dashoffset:3000;}
40% { fill-opacity: 0; stroke-dashoffset: 0;}
100%{stroke-dashoffset:0; fill-opacity: 1;}
}
@-ms-keyframes DASH{
0%{stroke-dashoffset:3000;}
40% { fill-opacity: 0; stroke-dashoffset: 0;}
100%{stroke-dashoffset:0; fill-opacity: 1; }
}
IE以外では問題なく動いていたんですが、IEだけ動かない。
で、アニメーション要素である「keyframes」をIEに対応させるために
ごにゃごにゃ調べてみたけどうまくいかなかったんです。
で、結局頼ることにしたのがこれ笑
Vivus.jsでIEでも動かなかったSVGアニメーションを動かそう!
使い方もめちゃくちゃ簡単です。
header部分にVivus.jsを組み込みます。CDNもあるのでそのまま引っ張ってくることも可能です。
ダウンロードはこちらから!
【URL】https://github.com/maxwellito/vivus
<script src="https://cdn.jsdelivr.net/npm/vivus@latest/dist/vivus.min.js"></script> //CDN <script src="自分の入れたディレクトリを記述/vivus.min.js"></script> //ダウンロードしてきた場合
用意しておいたSVGファイルのSVGタグにidを適当に付与します。
<svg id="layer"> <style> ~... </style> <path ...> <path ...> <g> <path ...> <path ...> </g> </svg>
あとはCSSでもろもろ調整。私は線画からの塗り…をしたかったので、
<style> ~... </style>
内にもとから入っていた「/*fill:none;*/」はコメントアウトしました!
#layer {
max-width: 480px;
width: 100%;
height: 300px;
}
#layer .st0 {
fill: #a09373;
fill-opacity: 0;
}
ここまでくればあとはJSを記述するだけです!
footer付近にかかないと私の場合はうまく動きませんでした。
そこだけご注意を!
<script>
new Vivus('layer', {duration: 200}, function(){
Snap('#layer').selectAll('path').animate({
'fill-opacity': 1
}, 300)
});
</script>
同じようにIEだけ動かない!と行き詰った方の参考になればいいなと思います。
では!