2019
07/09

anime.jsとjQueryによるNivoSliderみたいなスライドショー

anime.jsgridオプションを見ていて、NivoSliderのことを思い出しました。

ADs

NivoSliderとは何か

派手なアニメーションが特徴のスライダー(カルーセル)です。jQueryプラグインとして動作します。

Nivo-Slider-jQuery

最近使っているサイトを見かけなくなったなと思って調べてみると、長年アップデートもされておらず公式サイトも行方不明になってしまったようで、リポジトリは残っているものの過去のものと言ってもいいような状況でした。

大げさなアニメーションは流行ではないかもしれませんが好きな人は好きだろうし使いどころもあるだろう、と思いanime.js(とjQuery)を使って作ってみました。

DEMO

仕組み

divをタイル状に並べ、backgroundに画像を指定して1枚の画像のように見せています。
その1個ずつのdivをアニメーションさせながら消したり動かしたりすることでインパクトのあるアニメーションを実装しています。
確かNivoSliderも同じ仕組みです。

HTML

HTMLはできるだけシンプルにしていじくり倒すのはjQueryに任せます。
div.sliderがスライダーの親要素となり、使用する画像には.slider-imgというクラスをつけます。
data-anime属性はアニメーションの種類を指定するオプションです(JSで定義します)。

CSS

div.sliderのwidthとheightがそのままスライダーの大きさになります。
pxでもいいですし、100vw/100vhと指定すればウインドウ全面をスライドショーとすることができます。

Javascript

まずはjQueryとanime.jsを読み込みます。

次にスクリプト部分を書いていきます。
jQuery3系を使う場合、以下のスクリプトは</body>直前に書くように(つまり<head>には書かない)ようにしてください。

設定

インターバルや分割数を指定します。
分割数は極端に多すぎるとさすがにしんどい(splitX * splitY個分divが生成される)のでほどほどにしておいたほうがいいと思います。

divを敷き詰める

スライド直下のdiv内部にdivを敷き詰めます。
これにbackgroundをずらしながら指定することで1枚の画像のように見せます。

敷き詰めたdivに背景を設定

ここが一番しんどかった…。
要は background-size: cover; background-position: center center; のように表示させることを目的としていますが、どんなサイズの画像であってもど真ん中に配置かつ余白ができないように拡大縮小してタイル状のdivに設定するということをやっています。

アニメーションパターンの定義

NivoSliderでも何種類かアニメーションのパターンがありましたので、何パターンか定義してdata-anime属性で使い分けるようにしました。

とりあえず4種類ですが、anime.jsの記法は簡単なのでパターンも増やしやすいと思います。

アニメーション本体

前述のアニメーションパターンに共通の設定(targetsやcomplete)を追加し、アニメーション関数を完成させます。
要は連想配列の足し算です。

実行

最後に実行します。
resize時に背景指定関数を実行することで、ウインドウをリサイズしてもズレないようになっています。

ソース全文はDEMOをご参照ください。

ADs

Post Comments

メールアドレスが公開されることはありません。

Comments

コメントはまだありません。