上記の画像はHTML、CSS、Javascriptを使用して作成しています。

ここでは、上記のように、画像がフェイドインしながらズームアップし、そしてフェイドアウトしていく処理を解説しています。

今回の記事は、https://wemo.tech/1653の記事を参考にして作成させて頂きました。コードについてはほぼ一緒ですが、WordPressで使用するために微妙な違いがあるので、WordPressでJavascriptを実装して画像の操作ををしたい場合に参考になると思います。

では、早速解説しています。

まずは、HTMLの設定から

HTMLの設定はこれだけです。今回は画像を3枚用意しました。

1.divタグで画像の枠全体を囲む。class=”wrapper”を設定。

2.ulタグでliタグを囲む。id=”slide_wrapper”を設定。

3.liタグで画像を囲む。class=”slide_items”を設定。

4.imgタグを挿入。

HTMLの設定としては以上になります。

次にCSSの設定。

次にCSSの設定。

CSSは少し複雑に感じるかも知れません。

.wrapperを設定

ulタグを囲む大枠の設定になります。paddingとmarginについてはこれを見ている人ならきっと分ると思います。

ポイントは、width。widthについては、今回は87%としています。ulタグを囲む大枠が大きくなりすぎると、ズームアップの際に

余白が生まれてしまうので、少しずつ縮めていき87%になりました。ここでは画像のサイズとの兼ね合いになるので、調整しながら

適用させていくのが良いですね。

#slide_wrapper

まず、position:relativeでulタグの配置位置を設定しています。あとで、position: absolute;top:0;left:0;を設定する時に、基準の位置がutタグの左上になるようにするためです。

overflow: hidden;ははみ出した部分は非表示にするためです。はみ出すとかっこわるいですから(*^-^)

#slide_wrapper .slide_items

opacity: 0;で一番最初は非表示の状態に。

transition: opacity 2s linear, transform 7.5s linear;であとで設定する.showと.zoomの適用をゆるやかにしています。ここが今回のCSSのポイントになります。

opacity 2s;で#slide_wrapper .slide_itemsのopacity: 0;と.showのopacity: 1;を2秒間かけて実現。

transform 7.5s linear;で.zoomのtransform: scale(1.3);を7.5秒かけて実現する動きを設定しています。

#slide_wrapper .slide_items:not(:first-child)

position: absolute;で#slide_wrapperに設定したposition: relative;の配置を引き継ぎ。

さらに、その配置位置を基準にtop;0;left:0;を設定。つまり#slide_wrapperの左上に配置しています。

#slide_wrapper .slide_items.show

opacity: 1;で画像が表示されるようにする設定。

#slide_wrapper .slide_items.zoom

transform: scale(1.3);で画像を1.3倍に拡大しています。

今回のCSSのポイント

今回のCSSのポイントとしては、#slide_wrapper .slide_items で指定した、transition: opacity 2s linear, transform 7.5s linear;が#slide_wrapper .slide_items.showで指定したopacity: 1;と#slide_wrapper .slide_items.zoomで指定したtransform: scale(1.3);にも適用されるところです。

このあとで説明するJavascriptの設定で、CSSを追加、削除をしているので、#slide_wrapper .slide_itemsのtransition: opacity 2s linear, transform 7.5s linear;が#slide_wrapper .slide_items.showのopacity: 1;と#slide_wrappe .slide_items.zoomで指定したtransform: scale(1.3);にも適用される形になります。

また、CSSの読み込みについては、WordPressに既に適用されているCSSファイルの最後に追記する形で対応できます。(既に設定されているidやclassと重複しないようにだけ注意すればOKです。)

では最後にJavascriptの設定の解説をします。

最後にJavascriptの設定

使用する変数の定義と宣言

まずは、使用する変数の定義から入っていきます。

const slide = document.getElementById(‘slide_wrapper’);で <ul id=”slide_wrapper”>~~~</ul>の情報全体を取得します。

const slideItem = slide.querySelectorAll(‘.slide_items’);で上記で取得した情報から<li class=”slide_items”>~~~</li>の情報を配列で取得。

const totalNum = slideItem.length – 1;で<li class=”slide_items”>~~~</li>の配列の長さ、つまり配列要素の数を取得。

const FadeTime = 2000;で画像がフェイドアウトする秒数を2秒に指定。

const IntarvalTime = 5000;で関数の繰り返し処理の時間間隔を5秒に指定。

let nowNum = 0;で今の表示している画像変数の初期化。

let nowSlide;で現在表示している画像の変数を宣言。

let NextSlide;で次に表示する画像の変数を宣言。

最初の画像を表示

slideItem[0].classList.add(‘show’, ‘zoom’);で最初のli要素にCSSの.showと.zoomを追加設定。これでまずは一枚目の画像がフェードインしてきます。

条件分岐と関数内の変数設定

if (nowNum < totalNum)で表示している画像が、画像の総数よりも小さい場合に処理を開始する設定。

let nowSlide = slideItem[nowNum];で現在表示している画像を変数に格納(配列変数)。

let NextSlide = slideItem[++nowNum];で現在表示している画像に1を足して、次に表示される画像を変数に格納(配列変数)。

また、画像の総数よりも小さくない、つまり画像の総枚数にnowNumが達した場合は、else以下の処理が実行される事になります。

.showを削除して画像をフェイドアウト

nowSlide.classList.remove(‘show’);で今表示されている画像のclassの.showを削除することで、画像をフェイドアウト。

.showと.zoomを追加して表示、ズームアップ

NextSlide.classList.add(‘show’, ‘zoom’);で次の画像のclassの.showと.zoomを追加することで、表示とズームアップ。

.zoomを削除してズームアップ停止。

nowSlide.classList.remove(‘zoom’);で今表示されている画像のズームアップを停止。

この処理にsetTimeoutを設定することで、2秒後にズームアップが停止する設定になっています。

繰り返し処理

上記の処理の流れをsetInterval関数で囲むことで、これらの処理が繰り返されます。

関数実行

window.onload=sliderStart;で関数を実行しています。

WordPressでjavascriptの読み込み

最後にWordPressでJavascriptを読み込む方法について解説しますね。

WordPressでJavascriptを読み込む場合によく使われるのが、「wp enqueue script」関数。

この関数をfunctions.phpに記述します。記述方法としては以下の通りになります。

まず、if文で条件分岐を設定します。

これをしないと、全てのページに今回のJavascriptのスクリプトが読み込ま()れてしまい、不要なスクリプトを読み込んでしまうページが大量発生してしまいますからね。

条件に使っているのは、is_single()です。

この()の中に個別ページの番号を挿入することで、特定の個別ページのみに今回のJavascriptのスクリプトを読み込ませることができます。

因みに、個別ページのページ番号は投稿画面のURLに記されているpost.php?post=○○○の○○○のことです。

このページは「339」と表示されていたので、is_single(‘339’)と記述しています。

そして、wp enqueue script()関数を使って今回のスクリプトを読み込みます。

(wp enqueue script()関数の詳しい使い方を知りたい方は、「WordPressでjavascriptを読み込む2つの方法。あなたはどっち派?」を参照してみて下さい。)

ただ、今回の場合、子テーマを使用してスクリプトを読み込んでいるので、読み込み用のパスを作る時に、get_stylesheet_directory_uri()を使用していますが、子テーマを使わない場合はget_template_directory_uri()を使ってパスを作って下さいね。

ここを間違うとちゃんと読み込んでくれませんから。結構、要注意です。

WordPressJavascriptを使って画像をズームアップしながらフェイドイン・アウトする方法まとめ。

以上がWordPressでJavascriptを使って、画像をズームアップしながらフェイドイン・フェイドアウトする方法になります。

分ってしまえば、それ程難しくはないですが、普段CSSやJavascriptを触っていない人からすると少し複雑に思えるかも知れないですね。

ただ、今回紹介したコードはCSSのidやclassの重複がなければほぼコピペで使えます。(is_singleのページ番号はコピペ不可)

もし、WordPressでJavascriptの実装をするなら参考にして貰えると嬉しいです。