JavaScript

【JavaScript】背景画像も変化するスライダーの作成方法

JavaScriptでスライドに合わせてbodyの背景画像も切り替わるスライダーの作り方をデモつきで紹介します。style.backgroundImageで背景を同期する仕組みと、切り替わらないときの確認点も解説します。

この記事の目次
  1. 背景画像も変化するスライダーのデモ
  2. JavaScriptコードの解説

JavaScriptで背景画像も変化するスライダーの作成方法を紹介します。

JavaScriptで背景画像を変えるには、要素.style.backgroundImage = "url(画像のパス)"と書くだけです。
今回のスライダーでは、各スライドのstyle属性に書いた背景画像をslides[activeSlide].style.backgroundImageで読み取り、そのままbodyのbackgroundImageに代入して、スライドと背景を同期させています。

背景画像も変化するスライダーのデモ

スポンサーリンク

JavaScriptコードの解説


  const body = document.body;
  const slides = document.querySelectorAll(".slide");
  const leftBtn = document.getElementById("left");
  const rightBtn = document.getElementById("right");
  
  // 初期化
  let activeSlide = 0;
  
  rightBtn.addEventListener("click", () => {
    // 右に進む
    activeSlide++;
  // 最後のスライドに行ったら最初に戻す
    if (activeSlide > slides.length - 1) {
      activeSlide = 0;
    }
  
    setBgToBody();
    setActiveSlide();
  });
  
  leftBtn.addEventListener("click", () => {
    activeSlide--;
  
  //   最初のスライドに行ったら最後に戻す
    if (activeSlide < 0) {
      activeSlide = slides.length - 1;
    }

    setBgToBody();
    setActiveSlide();
  });

  setBgToBody();

  // 背景をセットする
  function setBgToBody() {
    body.style.backgroundImage = slides[activeSlide].style.backgroundImage;
  }

  // アクティブなスライドを決定する
  function setActiveSlide() {
    slides.forEach((slide) => slide.classList.remove("is-active"));
    slides[activeSlide].classList.add("is-active");
  }

スライダーは、スライドとなる要素をすべて取得して、
index番号と紐づく変数によって変化させます。
上のようにactiveSlideという変数をスライダーのindexと紐付けると、
activeSlideの値を増やせば次のスライドになり、減らせば前のスライドになります。
スライドの変化はボタンが押されたときに起きるので、ボタンにクリックイベントを付与します。
その中で、まずactiveSlideの数値を変化させ、その結果によって生じる細かい動きを設定します。
スライド数には限りがあるので、その上限や下限にactiveSlideの値が一致したとき、どうするかを指定します。
また、コンテナー(上の場合はbody要素)の背景画像は、スライドのstyle属性から取得して表示させます。
スタイルシートの値をJavaScriptで読むこともできますが、htmlにstyle属性で背景画像をセットしておくほうが簡単に実装できます。

背景画像が切り替わらないときは、次の点を確認してください。
スライド側の背景画像をCSSファイルで指定している場合、slides[activeSlide].style.backgroundImageは空文字になります(style属性に書いた値しか読めません)。
CSS側の値を使いたい場合はgetComputedStyle(slides[activeSlide]).backgroundImageで読み取ります。
また、bodyの背景がぱっと切り替わって味気ない場合は、CSSでbody { transition: background-image 0.5s; }と書いてもbackground-imageはアニメーションしないため、半透明の疑似要素を重ねてopacityを変えるか、フェードで切り替える方法を組み合わせます。

スライダーを自作したい場合、スライダーの書き方も参考にしてみてください。
classListの付け外しやgetComputedStyleの使い方はJavaScriptでclass・styleを操作する方法に、スライドに合わせてボタンに波紋を出すなどの演出は波紋(リップル)アニメーションの作成方法にまとめています。

スポンサーリンク