slick sliderで静止画と動画をスライドさせる(未検証)

Filed under: JavaScript — kdcs @ 2025年8月1日 金曜日

slick sliderで静止画と動画をスライドさせる方法 copilot

html

<div class="slider">
  <div><img src="img1.jpg" /></div>
  <div><img src="img2.jpg" /></div>
  <div><img src="img3.jpg" /></div>
  <div>
    <video id="video-slide" width="100%" muted>
      <source src="video.mp4" type="video/mp4">
    </video>
  </div>
</div>

javascript(jQuery + Slick)

$(document).ready(function(){
  const $slider = $('.slider');
  const $video = $('#video-slide')[0];

  $slider.slick({
    autoplay: true,
    autoplaySpeed: 3000,
    pauseOnHover: false,
    pauseOnFocus: false,
    arrows: true,
    dots: true
  });

  // スライドが変わる直前に動画を停止&リセット(動画から離れるとき)
  $slider.on('beforeChange', function(event, slick, currentSlide, nextSlide){
    const isVideoSlide = currentSlide === slick.slideCount - 1;
    const isLeavingVideo = nextSlide !== slick.slideCount - 1;

    if (isVideoSlide && isLeavingVideo) {
      $video.pause();
      $video.currentTime = 0;
    }
  });

  // スライドが変わった後に動画スライドなら再生&自動スライド停止
  $slider.on('afterChange', function(event, slick, currentSlide){
    const isVideoSlide = currentSlide === slick.slideCount - 1;

    if (isVideoSlide) {
      $slider.slick('slickPause');
      $video.currentTime = 0;
      $video.play();
    } else {
      $video.pause();
      $video.currentTime = 0;
    }
  });

  // 動画が終了したらスライダーを再開し、動画を先頭に戻す
  $video.addEventListener('ended', function(){
    $video.currentTime = 0;
    $slider.slick('slickPlay');
  });
});

・muted 属性は自動再生を許可するために重要です(ブラウザの仕様)。
・slickPause() / slickPlay() で自動スライドの制御。
・currentTime = 0 で動画を先頭に戻す。
・beforeChange と afterChange の両方で動画の状態を管理。

safariでslicksliderのスライド範囲に適用したborder-radiusが効かない対策

Filed under: css — kdcs @ 2025年7月24日 木曜日

slicksliderのスライド範囲にborder-radius:10px;overflow: hidden;を適用して中身の画像を角丸表示させようとしたが、safariだけ角丸にならない。safari特有のバグらしい。

対策方法は以下
.slick-list や .slick-track が overflow を制御しているため、それぞれに角丸と隠すスタイルを加えることで画像のはみ出しを防げる。

.slick-slider,
.slick-list,
.slick-track {
  border-radius: 10px;
  overflow: hidden;
}

画面幅によって要素のクラスを切り替えるjavascript

Filed under: JavaScript — kdcs @ 2025年7月17日 木曜日

パソコン版とモバイル版で違う動きをさせたい場合、動きを付ける要素のクラスをpcとmobileで切り替える方法。

例はheaderというidに、画面幅が780pxより広いときは「pc」、780px以下のときは「mobile」というクラスを付与して切り替える。

function updateHeaderClass() {
  const header = document.getElementById("header");
  if (!header) return;

  if (window.innerWidth <= 780) {
    header.classList.add("mobile");
    header.classList.remove("pc");
  } else {
    header.classList.add("pc");
    header.classList.remove("mobile");
  }
}

// 初回の実行
updateHeaderClass();

// ウィンドウサイズ変更時にクラス更新
window.addEventListener("resize", updateHeaderClass);

window.innerWidth を使って現在の画面幅を取得。
classList.add() と classList.remove() で不要なクラスを確実に排除。
resize イベントで画面サイズ変更に応答。

advanced custom fieldsでチェックボックスの値を利用した条件分岐

Filed under: wordpressプラグイン — kdcs @ 2025年7月11日 金曜日

advanced custom fieldsでチェックボックスの値を利用して出力するhtmlを変える(すべて出力する)方法。

copilotに尋ねた結果

<?php
$selected = get_field('checkbox_field_name');
if (in_array('option1', $selected)) {
  echo '<p>選択肢1が選ばれました</p>';
}
if (in_array('option2', $selected)) {
  echo '<p>選択肢2が選ばれました</p>';
}
?>

実際のコード
フィールドは「room_tobacco」で選択肢として、禁煙はno、喫煙はyes

<?php $selected = get_field('room_tobacco');
if (in_array('no', $selected)) {
echo '<span class="no-smoking"><i class="fa iconx-no-smoking"></i> 禁煙</span>';
  }
if (in_array('yes', $selected)) {
echo '<span class="smoking"><i class="fa iconx-yes-smoking"></i> 喫煙</span>';
  }
?>

こうすると、チェックボックス未入力の場合に$selectedの値がnullになり、「in_array(): Argument #2 ($haystack) must be of type array, null given」というエラーになる。

解決策1【nullチェックを追加する】-WordPressデバッグモードでエラー出ず
is_array()で配列かどうかを確認してからin_array()を使う

<?php $selected = get_field('room_tobacco');
if (is_array($selected) && in_array('no', $selected)) {
    echo '<span class="no-smoking"><i class="fa iconx-no-smoking"></i> 禁煙</span>';
  }
if (is_array($selected) && in_array('yes', $selected)) {
    echo '<span class="smoking"><i class="fa iconx-yes-smoking"></i> 喫煙</span>';
  }
?>

解決策2【(array)を入れる】
in_arrayの第2引数$selectedの前に(array)を入れる

<?php $selected = get_field('room_tobacco');
if (in_array('no', (array)$selected)) {
    echo '<span class="no-smoking"><i class="fa iconx-no-smoking"></i> 禁煙</span>';
  }
if (in_array('yes', (array)$selected)) {
    echo '<span class="smoking"><i class="fa iconx-yes-smoking"></i> 喫煙</span>';
  }
?>

解決策3【elseを入れて値が無い場合の処理をさせる】

<?php $selected = get_field('room_tobacco');
if (in_array('no', $selected)) {
    echo '<span class="no-smoking"><i class="fa iconx-no-smoking"></i> 禁煙</span>';
  }
if (in_array('yes', $selected)) {
    echo '<span class="smoking"><i class="fa iconx-yes-smoking"></i> 喫煙</span>';
  }
else {
    echo '';
  }
?>

CSSのclamp関数でフォントサイズを可変にする方法

Filed under: css — kdcs @ 2025年6月14日 土曜日

ページがレスポンシブ対応の場合、フォントサイズも可変させたい場合がある。
cssのclamp関数を使うと画面幅に応じてフォントサイズを可変させることができる

font-size: clamp(最小値, 基準値, 最大値);

基準値はvwでフォントサイズを指定し、その計算方法はこちら
例:コンテンツの幅が1200pxの時にフォントサイズを16pxで表示させる

vwの計算方法
(基準となる文字サイズ)÷(基準となる幅)× 100

16 ÷ 1200 × 100 = 1.33...

この基準値に合わせてフォントサイズの最小値13px、最大値16pxとすると以下の通り

font-size: clamp(13px, 1.33vw, 16px);

min() max() clamp()のサポートブラウザを見る

サイト内検索

カテゴリー

最近の投稿

↑上に戻る