フォトブラウザ

フォトブラウザは、写真の集合を表示するためのコンポーネントです。写真はズームとパンできます(オプション)。

フォトブラウザは、写真間のスライドにSwiperスライダーコンポーネントを使用します。

フォトブラウザアプリメソッド

フォトブラウザを操作するための関連するアプリメソッドを見てみましょう。

app.photoBrowser.create(パラメータ)- フォトブラウザインスタンスを作成します

  • パラメータ - オブジェクト。フォトブラウザのパラメータを含むオブジェクト

メソッドは作成されたフォトブラウザのインスタンスを返します。

app.photoBrowser.destroy(el)- フォトブラウザインスタンスを破棄します

  • el - HTMLElementまたは文字列(CSSセレクター付き)またはオブジェクト。破棄するフォトブラウザ要素またはフォトブラウザインスタンス。

app.photoBrowser.get(el)- HTML要素からフォトブラウザインスタンスを取得します

  • el - HTMLElementまたは文字列(CSSセレクター付き)。フォトブラウザ要素。

メソッドはフォトブラウザのインスタンスを返します。

例えば

var photoBrowser = app.photoBrowser.create({
  photos: [
    'path/to/photo-1.jpg',
    'path/to/photo-2.jpg'
  ],
});

フォトブラウザパラメータ

利用可能なフォトブラウザパラメータのリストを見てみましょう。

パラメータデフォルト説明
photos配列[]写真のURLの配列、または「url」(または「html」)と「caption」プロパティを持つオブジェクトの配列。
thumbs配列[]サムネイル画像のURLの配列。指定されていない場合、または空の配列の場合は、サムネイルはレンダリングされません。
expositionブール値trueフォトブラウザをクリックしたときの露出モードを有効/無効にします。
expositionHideCaptionsブール値false露出モードでキャプションも非表示にする場合はtrueに設定します。
swipeToCloseブール値trueこのパラメータが有効になっている場合、上下にスワイプしてフォトブラウザを閉じることができます。
popupPushブール値falseフォトブラウザポップアップを有効にして、開いているビューをプッシュします。
routableModalsブール値false開いたフォトブラウザをルーター履歴に追加します。これにより、ルーター履歴で戻ることでフォトブラウザを閉じることができ、現在のルートをフォトブラウザモーダルに設定できます。
url文字列photos/現在のルートとして設定されるフォトブラウザモーダルのURL
viewオブジェクト「page」フォトブラウザタイプを使用する場合、または`routableModals`が有効な場合にルーティングを設定する初期化されたビューインスタンスへのリンク。指定されていない場合は、デフォルトでメインビューで開かれます。
type文字列standaloneフォトブラウザを開く方法を定義します。`standalone`(カスタムトランジション効果でオーバーレイとして開かれます)、`popup`(ポップアップとして開かれます)、`page`(ビューに挿入され、新しいページとして読み込まれます)。
theme文字列lightフォトブラウザのカラースキーム。`light`または`dark`です。
captionsTheme文字列キャプションのカラースキーム。`light`または`dark`です。デフォルトでは、`theme`パラメータと同じです。
navbarブール値trueフォトブラウザのナビゲーションバーを削除するにはfalseに設定します。
toolbarブール値trueフォトブラウザのツールバーを削除するにはfalseに設定します。
pageBackLinkText文字列戻るフォトブラウザのナビゲーションバーの戻るリンクのテキスト
popupCloseLinkText文字列閉じるポップアップまたはスタンドアロンとして開かれた場合のフォトブラウザのナビゲーションバーの閉じるリンクのテキスト
navbarShowCountブール値undefinedナビゲーションバーのタイトルに「3/5」というテキストを表示するかどうかを定義します。指定されていない(undefined)場合、アイテムが1つ以上ある場合はこのテキストが表示されます。
navbarOfText文字列'of'写真のカウンターの「of」のテキスト:「3 of 5」
iconsColor文字列デフォルトの色のいずれか
swiperオブジェクトSwiperパラメータ。デフォルトは次のとおりです。
swiper: {
  initialSlide: 0,
  spaceBetween: 20,
  speed: 300,
  loop: false,
  preloadImages: true,
  keyboard: {
    enabled: true,
  },
  navigation: {
    nextEl: '.photo-browser-next',
    prevEl: '.photo-browser-prev',
  },
  zoom: {
    enabled: true,
    maxRatio: 3,
    minRatio: 1,
  },
  lazy: {
    enabled: true,
  },
},
virtualSlidesブール値true有効にすると、Swiperは仮想スライドを使用します。
closeByBackdropClickブール値true有効にすると、バックドロップをクリックするとフォトブラウザポップアップが閉じられます。
レンダリング関数
renderNavbar関数ナビゲーションバーをレンダリングする関数。ナビゲーションバーのHTML文字列を返す必要があります。
renderToolbar関数ツールバーをレンダリングする関数。ツールバーのHTML文字列を返す必要があります。
renderCaptionfunction(caption, index)キャプションをレンダリングする関数。キャプションのHTML文字列を返す必要があります。
renderObjectfunction(photo, index)写真オブジェクトをレンダリングする関数。写真オブジェクトのHTML文字列を返す必要があります。
renderLazyPhotofunction(photo, index)遅延読み込みされた写真スライドをレンダリングする関数。スライドのHTML文字列を返す必要があります。
renderPhotofunction(photo, index)写真をSwiperスライドとしてレンダリングする関数。スライドのHTML文字列を返す必要があります。
renderPage関数フォトブラウザページをレンダリングする関数。完全なページのHTMLレイアウト文字列を返す必要があります。
renderPopup関数フォトブラウザポップアップをレンダリングする関数。完全なポップアップのHTMLレイアウト文字列を返す必要があります。
renderStandalone関数フォトブラウザスタンドアロンモーダルをレンダリングする関数。完全なモーダルのHTMLレイアウト文字列を返す必要があります。
イベント
onオブジェクト

イベントハンドラのオブジェクト。例えば

var photoBrowser = app.photoBrowser.create({
  ...
  on: {
    opened: function () {
      console.log('photo browser opened')
    }
  }
})

以下のすべてのパラメータは、グローバルアプリパラメータの`photoBrowser`プロパティで使用して、すべてのフォトブラウザのデフォルトを設定できます。例えば

var app = new Framework7({
  photoBrowser: {
    type: 'popup',
  }
});

写真の配列

フォトブラウザを初期化するときは、`photos`パラメータに写真/ビデオを含む配列を渡す必要があります。この配列のさまざまなバリエーションを見てみましょう。

// If we need photo browser with just photos we may pass array with string urls:
var photos = [
    'image1.jpg',
    'image2.jpg',
    'image3.jpg',
    'image4.jpg',
];

//If we need to use caption for some of photos then each photo should be presented as object:
var photos = [
    {
        url: 'image1.jpg',
        caption: 'Caption 1'
    },
    {
        url: 'image2.jpg',
        caption: 'Second Caption'
    },
    // This one will be without caption
    {
        url: 'image3.jpg',
    },
    // This one will be also without caption
    'image4.jpg'
];

//If we need to use videos in some slides we need to pass HTML element of video element or iframe within "html" property:
var photos = [
    {
        url: 'image1.jpg',
        caption: 'Caption 1'
    },
    // Video element with caption
    {
        html: '<video src="video1.mp4"></video>',
        caption: 'Video Caption'
    },
    // This one is embedded video without caption
    {
        html: '<iframe src="..."></iframe>',
    },
    // This one will be also video without caption
    '<video src="video2.mp4"></video>'
];

フォトブラウザメソッドとプロパティ

フォトブラウザを初期化すると、便利なメソッドとプロパティを持つ初期化されたインスタンス(上記の例では`photoBrowser`変数など)が変数に格納されます。

プロパティ
photoBrowser.appグローバルアプリインスタンスへのリンク
photoBrowser.elフォトブラウザのHTML要素
photoBrowser.$elフォトブラウザのHTML要素を持つDom7インスタンス
photoBrowser.activeIndex現在アクティブな写真スライドのインデックス番号
photoBrowser.exposedフォトブラウザが露出モードの場合`true`
photoBrowser.openedフォトブラウザが現在開いている場合`true`
photoBrowser.urlフォトブラウザのURL(`url`パラメータで渡されたもの)
photoBrowser.viewフォトブラウザビュー(`view`パラメータで渡されたもの)または見つかった親ビュー
photoBrowser.swiper利用可能なSwiperメソッドとプロパティすべてを含む初期化されたSwiperインスタンスが含まれています。
photoBrowser.params初期化パラメータを含むオブジェクト
メソッド
photoBrowser.open(index)「index」パラメータと等しいインデックス番号の写真でフォトブラウザを開きます。「index」パラメータが指定されていない場合、最後に閉じられた写真で開きます。
photoBrowser.close()フォトブラウザを閉じます。
photoBrowser.expositionToggle()露出モードを切り替えます。
photoBrowser.expositionEnable()露出モードを有効にします。
photoBrowser.expositionDisable()露出モードを無効にします。
photoBrowser.destroy()フォトブラウザインスタンスを破棄します。
photoBrowser.on(event, handler)イベントハンドラを追加します。
photoBrowser.once(event, handler)発火後に削除されるイベントハンドラを追加します。
photoBrowser.off(event, handler)イベントハンドラを削除します。
photoBrowser.off(event)指定されたイベントのすべてのハンドラを削除します。
photoBrowser.emit(event, ...args)インスタンスでイベントを発火します。

フォトブラウザイベント

フォトブラウザは、フォトブラウザ要素で次のDOMイベントと、アプリおよびフォトブラウザインスタンスでイベントを発火します。

DOMイベント

イベントターゲット説明
photobrowser:openフォトブラウザ要素フォトブラウザが開きアニメーションを開始するとトリガーされます。
photobrowser:openedフォトブラウザ要素フォトブラウザが開きアニメーションを完了するとトリガーされます。
photobrowser:closeフォトブラウザ要素フォトブラウザが閉じアニメーションを開始するとトリガーされます。
photobrowser:closedフォトブラウザ要素フォトブラウザが閉じアニメーションを完了するとトリガーされます。
photobrowser:beforedestroyフォトブラウザ要素フォトブラウザインスタンスが破棄される直前にトリガーされます。

アプリとフォトブラウザインスタンスイベント

フォトブラウザインスタンスは、自分自身のインスタンスとアプリインスタンスの両方でイベントを発火します。アプリインスタンスのイベントには、`photoBrowser`というプレフィックスが付いた同じ名前があります。

イベントターゲット説明
swipeToClosephotoBrowserユーザーが上下にスワイプしてフォトブラウザを閉じると発火します。
tapphotoBrowserSwiperイベント。Swiperイベント。ユーザーがSwiperをクリック/タップしたときに発生します。引数として 'touchend' イベントを受け取ります。
クリックphotoBrowserSwiperイベント。Swiperイベント。ユーザーがSwiperをクリック/タップしたときに発生します。引数として 'touchend' イベントを受け取ります。
ダブルタップphotoBrowserSwiperイベント。Swiperイベント。ユーザーがSwiperのコンテナをダブルタップしたときに発生します。引数として 'touchend' イベントを受け取ります。
ダブルクリックphotoBrowserSwiperイベント。Swiperイベント。ユーザーがSwiperのコンテナをダブルタップしたときに発生します。引数として 'touchend' イベントを受け取ります。
スライド変更photoBrowserSwiperイベント。Swiperイベント。現在アクティブなスライドが変更されたときに発生します。
トランジション開始photoBrowserSwiperイベント。Swiperイベント。トランジション開始時に発生します。
トランジション終了photoBrowserSwiperイベント。Swiperイベント。トランジション終了後に発生します。
スライド変更トランジション開始photoBrowserSwiperイベント。Swiperイベント。他のスライド(次または前)へのアニメーション開始時に発生します。
スライド変更トランジション終了photoBrowserSwiperイベント。Swiperイベント。他のスライド(次または前)へのアニメーション終了後に発生します。
遅延画像読み込みphotoBrowserSwiperイベント。Swiperイベント。画像の遅延読み込み開始時に発生します。
遅延画像準備完了photoBrowserSwiperイベント。Swiperイベント。遅延読み込みされた画像が読み込まれたときに発生します。
タッチ開始photoBrowserSwiperイベント。Swiperイベント。ユーザーがSwiperをタッチしたときに発生します。引数として 'touchstart' イベントを受け取ります。
逆方向タッチ移動photoBrowserSwiperイベント。Swiperイベント。ユーザーがSwiper上で指を方向パラメータとは逆方向にタッチして移動したときに発生します。引数として 'touchmove' イベントを受け取ります。
タッチ終了photoBrowserSwiperイベント。Swiperイベント。ユーザーがSwiperから指を離したときに発生します。引数として 'touchend' イベントを受け取ります。
開くphotoBrowserフォトブラウザが開くアニメーションを開始したときにトリガーされます。引数として、イベントハンドラはphotoBrowserインスタンスを受け取ります。
photoBrowserOpenアプリ
開いたphotoBrowserフォトブラウザが開くアニメーションを完了した後にトリガーされます。引数として、イベントハンドラはphotoBrowserインスタンスを受け取ります。
photoBrowserOpenedアプリ
閉じるphotoBrowserフォトブラウザが閉じるアニメーションを開始したときにトリガーされます。引数として、イベントハンドラはphotoBrowserインスタンスを受け取ります。
photoBrowserCloseアプリ
閉じたphotoBrowserフォトブラウザが閉じるアニメーションを完了した後にトリガーされます。引数として、イベントハンドラはphotoBrowserインスタンスを受け取ります。
photoBrowserClosedアプリ
破棄前photoBrowserフォトブラウザインスタンスが破棄される直前にトリガーされます。引数として、イベントハンドラはphotoBrowserインスタンスを受け取ります。
photoBrowserBeforeDestroyアプリ

CSS変数

関連するCSS変数(CSSカスタムプロパティ)のリストを以下に示します。

:root {
  --f7-photobrowser-bg-color: #fff;
  --f7-photobrowser-bars-bg-color: rgba(var(--f7-bars-bg-color-rgb), 0.95);
  --f7-photobrowser-bars-text-color: var(--f7-bars-text-color);
  --f7-photobrowser-bars-link-color: var(--f7-bars-link-color);
  --f7-photobrowser-caption-font-size: 13px;
  --f7-photobrowser-caption-font-weight: 500;
  --f7-photobrowser-caption-light-text-color: #000;
  --f7-photobrowser-caption-dark-text-color: #fff;
  --f7-photobrowser-exposed-bg-color: #000;
  --f7-photobrowser-dark-bg-color: #000;
  --f7-photobrowser-dark-bars-bg-color: rgba(27, 27, 27, 0.8);
  --f7-photobrowser-dark-bars-text-color: #fff;
  --f7-photobrowser-dark-bars-link-color: #fff;
}

photo-browser.html
<template>
  <div class="page">
    <div class="navbar">
      <div class="navbar-bg"></div>
      <div class="navbar-inner sliding">
        <div class="title">Photo Browser</div>
      </div>
    </div>
    <div class="page-content">
      <div class="block block-strong-ios block-outline-ios">
        <p>Photo Browser is a standalone and highly configurable component that allows to open window with photo viewer
          and navigation elements with the following features:</p>
        <ul>
          <li>Swiper between photos</li>
          <li>Multi-gestures support for zooming</li>
          <li>Toggle zoom by double tap on photo</li>
          <li>Single click on photo to toggle Exposition mode</li>
        </ul>
      </div>
      <div class="block block-strong-ios block-outline-ios">
        <p>Photo Browser could be opened in a three ways - as a Standalone component (Popup modification), in Popup, and
          as separate Page:</p>
        <div class="grid grid-cols-3 grid-gap">
          <a class="button button-fill" @click=${openStandalone}>Standalone</a>
          <a class="button button-fill" @click=${openPopup}>Popup</a>
          <a class="button button-fill" @click=${openPage}>Page</a>
        </div>
      </div>
      <div class="block block-strong-ios block-outline-ios">
        <p>Photo Browser supports 2 default themes - default Light (like in previous examples) and Dark theme. Here is a
          Dark theme examples:</p>
        <div class="grid grid-cols-3 grid-gap">
          <a class="button button-fill" @click=${openStandaloneDark}>Standalone</a>
          <a class="button button-fill" @click=${openPopupDark}>Popup</a>
          <a class="button button-fill" @click=${openPageDark}>Page</a>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
  export default (props, { $f7, $on }) => {
    const photos = [
      {
        url: 'img/beach.jpg',
        caption: 'Amazing beach in Goa, India'
      },
      'http://placekitten.com/1024/1024',
      'img/lock.jpg',
      {
        url: 'img/monkey.jpg',
        caption: 'I met this monkey in Chinese mountains'
      },
      {
        url: 'img/mountains.jpg',
        caption: 'Beautiful mountains in Zhangjiajie, China'
      }
    ];
    const thumbs = [
      'img/beach.jpg',
      'http://placekitten.com/1024/1024',
      'img/lock.jpg',
      'img/monkey.jpg',
      'img/mountains.jpg'
    ]

    let standalone;
    let popup;
    let page;
    let standaloneDark;
    let popupDark;
    let pageDark;

    const openStandalone = () => {
      standalone.open();
    }
    const openPopup = () => {
      popup.open();
    }
    const openPage = () => {
      page.open();
    }
    const openStandaloneDark = () => {
      standaloneDark.open();
    }
    const openPopupDark = () => {
      popupDark.open();
    }
    const openPageDark = () => {
      pageDark.open();
    }
    $on('pageInit', () => {
      // Create PBs when page init
      standalone = $f7.photoBrowser.create({
        photos: photos,
        thumbs: thumbs,
      });
      popup = $f7.photoBrowser.create({
        photos: photos,
        thumbs: thumbs,
        type: 'popup',
      });
      page = $f7.photoBrowser.create({
        photos: photos,
        thumbs: thumbs,
        type: 'page',
        backLinkText: 'Back',
      });
      standaloneDark = $f7.photoBrowser.create({
        photos: photos,
        thumbs: thumbs,
        theme: 'dark',
      });
      popupDark = $f7.photoBrowser.create({
        photos: photos,
        thumbs: thumbs,
        type: 'popup',
        theme: 'dark',
      });
      pageDark = $f7.photoBrowser.create({
        photos: photos,
        thumbs: thumbs,
        type: 'page',
        backLinkText: 'Back',
        theme: 'dark',
      });
    });
    $on('pageBeforeRemove', () => {
      // Destroy PBs on page remove
      standalone.destroy();
      popup.destroy();
      page.destroy();
      standaloneDark.destroy();
      popupDark.destroy();
      pageDark.destroy();
    });

    return $render;
  };
</script>