モーダルでビデオ再生をする

YouTube や Vimeo の組み込みビデオを、ボタンなどを押した時にモーダルで再生するための組み込みJSです。

デモ

使い方

js/config.js に設定されている「modalVideoMark」に設定されているクラス(デフォルト: js-modal-video)をクリックして再生したい要素に振ります。 次に「data-video-id」データ属性にビデオのidを指定します。

<button class="js-modal-video" data-video-id="MwlwcmF0hwo">ビデオを再生</button>

デフォルト設定

この機能の設定は、/js/config.jsの以下の箇所にあります。設定を変更する場合は、適用しているテーマ内にJavaScriptファイルを別途作成してください。詳しくは「組み込みJSについて:設定を編集する」を参照してください。

modalVideoMark: '.js-modal-video', // ここで指定したセレクターをクリックするとビデオが再生されます
modalVideoConfig: {
  channel: 'youtube', // どのサービスを使うか指定します
  youtube: { // youtubeの設定です。オプションはyoutubeのapiドキュメントを参照してください。
    autoplay: 1,
    cc_load_policy: 1,
    color: null,
    controls: 1,
    disablekb: 0,
    enablejsapi: 0,
    end: null,
    fs: 1,
    h1: null,
    iv_load_policy: 1,
    list: null,
    listType: null,
    loop: 0,
    modestbranding: null,
    origin: null,
    playlist: null,
    playsinline: null,
    rel: 0,
    showinfo: 1,
    start: 0,
    wmode: 'transparent',
    theme: 'dark'
  },
  ratio: '16:9', // ビデオの比率を指定
  vimeo: { // vimeoの設定です。オプションはvimeoのapiドキュメントを参照してください。
    api: false,
    autopause: true,
    autoplay: true,
    byline: true,
    callback: null,
    color: null,
    height: null,
    loop: false,
    maxheight: null,
    maxwidth: null,
    player_id: null,
    portrait: true,
    title: true,
    width: null,
    xhtml: false
  },
  allowFullScreen: true, // フルスクリーンの許可設定
  animationSpeed: 300, // モーダルのトグルアニメーションスピード(ms)
    classNames: { // モーダルコンポーネントのクラス名
      modalVideo: 'modal-video',
      modalVideoClose: 'modal-video-close',
      modalVideoBody: 'modal-video-body',
      modalVideoInner: 'modal-video-inner',
      modalVideoIframeWrap: 'modal-video-movie-wrap',
      modalVideoCloseBtn: 'modal-video-close-btn'
  },
  aria: { // スクリーンリーダーメッセージ
    openMessage: 'ビデオを開きました。',
    dismissBtnMessage: 'ここをクリックするとビデオを閉じます。'
  }
}

a-blog cms と View Transitions API で作るページ遷移のアニメーションの実装について


View Transitions API の利用することで、一覧ページの Entry_Summary から詳細ページの Entry_Body にページを遷移する際に、画像が拡大するようなアニメーションをつけることができます。実際の動きは、以下の YouTube の動画をご覧ください。

OpenStreetMap

OpenStreetMapがVer.2.9から利用可能になりました。

使い方

js-open-street-map という class 属性を適用すれば、簡単に好きなページで利用できます。

さらに、data 属性を指定することで経度、緯度、zoom値などを指定できます。



属性 入力する値
data-lat 緯度 35.18531791793727
data-lng 経度 136.89938921481374
data-zoom zoom値 14
data-lazy 表示領域(viewport)に入るまで、組み込みJSの実行を遅延させるかどうか(true | false) true
data-multiple 複数のピンを表示するかどうか(true | false) true
data-markers ピンを表示させたい位置情報を | 区切りで指定できます。 35.170394,136.887383|35.176559,136.885409|35.172762,136.887447
data-messages 複数のピンを表示させる場合に、それぞれのピンに対して表示するメッセージを [[:split:]] 区切りで指定できます。 メッセージ1[[:split:]]メッセージ2[[:split:]]メッセージ3
data-msg ピンが1つの場合に、表示するメッセージを指定できます。 メッセージ
<div class="js-open-street-map" data-lat="35.18531791793727" data-lng="136.89938921481374" data-zoom="14" data-lazy="true" style="width: 100%; height: 300px;"></div>

また、data-multipleという属性にtrueを設定し、data-markers属性に対してピンを立てたい位置情報を|区切りで記述します。そうすることで下のように複数ピンを表示することが可能になります。

<div class="js-open-street-map"
  data-lazy="true"
  data-multiple="true"
  data-lat="35.172775"
  data-lng="136.887466"
  data-zoom="15"
  data-markers='35.170394,136.887383|35.176559,136.885409|35.172762,136.887447'
  style="width: 100%; height: 400px;"
></div>

さらに、data-messagesという属性を使えばpin一つ一つにコメントをつけることも可能です。メッセージを区切りたい場合は、[[:split:]]このような記号を使って分割します。

<div class="js-open-street-map"
  data-lazy="true"
  data-multiple="true"
  data-lat="35.172775"
  data-lng="136.887466"
  data-zoom="15"
  data-markers='35.170394,136.887383|35.176559,136.885409|35.172762,136.887447'
  data-messages='<table><tr><td><a href="/realestate/entry-17.html">物件情報3</a></td></tr></table>[[:split:]]<table><tr><td><a href="/realestate/entry-16.html">物件情報2</a></td></tr></table>[[:split:]]<table><tr><td><a href="/realestate/entry-15.html">物件情報1</a></td></tr></table>'
  style="width: 100%; height: 400px;"
></div>

表示領域(viewport)に入るまで、組み込みJSの実行を遅延させる


OpenStreetMap の地図が画面の下部に存在する場合、組み込みJSの実行を、表示領域(viewport)に入るまで遅延させることで、パフォーマンスを向上させることが可能です。

data-lazy 属性の値に true を指定することで、組み込みJSの実行を遅延させることができます。

<div 
  class="js-open-street-map"
  data-lat="35.18531791793727"
  data-lng="136.89938921481374"
  data-zoom="14"
  data-lazy="true"
  style="width: 100%; height: 300px;"
></div>

設定

この機能の設定は、/js/config.js で設定されています。設定を変更する場合は、適用しているテーマ内にJavaScriptファイルを別途作成してください。詳しくは「組み込みJSについて:設定を編集する」を参照してください。



設定項目 説明 デフォルト
openStreetMapMark OpenStreetMap を表示する要素をセレクター形式で設定します。 '.js-open-street-map'
openStreetMapTileLayer 表示する OpenStreetMap のタイルレイヤーをURLで設定できます。 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'

【重要】CMSアップデートにより、Shoping Cart 拡張アプリが動作しなくなる問題について


2025年3月21日 a-blog cms に発見された脆弱性への対応で、CMSを以下バージョン以上にアップデートしているとCMSの仕様変更により「Shopping Cart」拡張アプリが動作しなくなります

脆弱性について

https://developer.a-blogcms.jp/blog/news/security-update202503.html

対象バージョン

  • Ver. 3.1.37 以上
  • Ver. 3.0.41 以上

アップデート方法

https://developer.a-blogcms.jp/document/ec-cart/update.html をご覧ください。

大変お手数ですが、CMSのバージョンアップに合わせ「Shopping Cart」拡張機能のアップデートのご対応をお願いいたします。

アダプティブ・イメージ

picture要素やsrcset属性がブラウザで実装されたことからこの機能は非推奨になりました。picture要素やsrcset属性をa-blog cmsで使う方法に関しては「レスポンシブイメージでユーザーの閲覧環境に最適な画像を表示しよう」をご覧ください。

a-blog cmsバージョン1.5.0からスマートフォンで閲覧したときはエントリーの画像を小さいサイズで表示する機能が追加されました。.js-adaptive_imageについて解説します。.js-adaptive_imageはPCサイトでは通常サイズの画像を表示し、ウィンドウ幅の狭いスマートフォンで閲覧したときは小さいサイズの画像を表示します。ページの容量を少なくできます。

小さいサイズ・通常サイズ・大きなサイズの画像生成について

エントリー作成画面から画像を投稿すると、小さいサイズ(tiny)・通常サイズ・大きなサイズ(large)の画像が生成されます。

生成する画像サイズについて

画像サイズは管理画面 > コンフィグ > 編集設定から設定します。 通常サイズは「サイズセレクト」から、小さいサイズ(tiny)と大きなサイズ(large)はイメージ編集の項目から設定します。



1. 設定の編集

この機能の設定は、/js/config.jsの以下の箇所にあります。設定を変更する場合は、適用しているテーマ内にJavaScriptファイルを別途作成してください。詳しくは「組み込みJSについて:設定を編集する」を参照してください。

//-----------------------
// adaptive image sizing
adaptiveImageMark : 'img.js-adaptive_image',
adaptiveImageSize : 500,

2. HTMLの編集

themes/system/include/unit.htmlのファイルをベースに、自分のカスタマイズしているフォルダ内に themes/ご利用のテーマ/include/unit.html をコピーし、のあたりを以下のように変更します。 に.js-adaptive_imageを追加してtiny画像を読み込んでください。

<!-- BEGIN column#image -->
<!-- 画像 -->
<div class="column-image-{align}" ><!-- BEGIN link#front -->
<a href="{url}"{viewer}[raw]><!-- END link#front -->
<img class="columnImage js-adaptive_image" src="%{ROOT_DIR}{tinyPath}" alt="{alt}" width="{tinyX}" height="{tinyY}" data-width="{x}" data-height="{y}" /><!-- BEGIN link#rear -->
</a><!-- END link#rear --><!-- BEGIN caption:veil -->
<p class="caption">{caption}</p><!-- END caption:veil -->
</div>
<!-- END column#image -->