フォトブラウザ
フォトブラウザは、写真の集合を表示するためのコンポーネントです。写真はズームとパンできます(オプション)。
フォトブラウザは、写真間のスライドに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パラメータ。デフォルトは次のとおりです。
| |
virtualSlides | ブール値 | true | 有効にすると、Swiperは仮想スライドを使用します。 |
closeByBackdropClick | ブール値 | true | 有効にすると、バックドロップをクリックするとフォトブラウザポップアップが閉じられます。 |
レンダリング関数 | |||
renderNavbar | 関数 | ナビゲーションバーをレンダリングする関数。ナビゲーションバーのHTML文字列を返す必要があります。 | |
renderToolbar | 関数 | ツールバーをレンダリングする関数。ツールバーのHTML文字列を返す必要があります。 | |
renderCaption | function(caption, index) | キャプションをレンダリングする関数。キャプションのHTML文字列を返す必要があります。 | |
renderObject | function(photo, index) | 写真オブジェクトをレンダリングする関数。写真オブジェクトのHTML文字列を返す必要があります。 | |
renderLazyPhoto | function(photo, index) | 遅延読み込みされた写真スライドをレンダリングする関数。スライドのHTML文字列を返す必要があります。 | |
renderPhoto | function(photo, index) | 写真をSwiperスライドとしてレンダリングする関数。スライドのHTML文字列を返す必要があります。 | |
renderPage | 関数 | フォトブラウザページをレンダリングする関数。完全なページのHTMLレイアウト文字列を返す必要があります。 | |
renderPopup | 関数 | フォトブラウザポップアップをレンダリングする関数。完全なポップアップのHTMLレイアウト文字列を返す必要があります。 | |
renderStandalone | 関数 | フォトブラウザスタンドアロンモーダルをレンダリングする関数。完全なモーダルのHTMLレイアウト文字列を返す必要があります。 | |
イベント | |||
on | オブジェクト | イベントハンドラのオブジェクト。例えば
|
以下のすべてのパラメータは、グローバルアプリパラメータの`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`というプレフィックスが付いた同じ名前があります。
イベント | ターゲット | 説明 |
---|---|---|
swipeToClose | photoBrowser | ユーザーが上下にスワイプしてフォトブラウザを閉じると発火します。 |
tap | photoBrowser | Swiperイベント。Swiperイベント。ユーザーがSwiperをクリック/タップしたときに発生します。引数として 'touchend' イベントを受け取ります。 |
クリック | photoBrowser | Swiperイベント。Swiperイベント。ユーザーがSwiperをクリック/タップしたときに発生します。引数として 'touchend' イベントを受け取ります。 |
ダブルタップ | photoBrowser | Swiperイベント。Swiperイベント。ユーザーがSwiperのコンテナをダブルタップしたときに発生します。引数として 'touchend' イベントを受け取ります。 |
ダブルクリック | photoBrowser | Swiperイベント。Swiperイベント。ユーザーがSwiperのコンテナをダブルタップしたときに発生します。引数として 'touchend' イベントを受け取ります。 |
スライド変更 | photoBrowser | Swiperイベント。Swiperイベント。現在アクティブなスライドが変更されたときに発生します。 |
トランジション開始 | photoBrowser | Swiperイベント。Swiperイベント。トランジション開始時に発生します。 |
トランジション終了 | photoBrowser | Swiperイベント。Swiperイベント。トランジション終了後に発生します。 |
スライド変更トランジション開始 | photoBrowser | Swiperイベント。Swiperイベント。他のスライド(次または前)へのアニメーション開始時に発生します。 |
スライド変更トランジション終了 | photoBrowser | Swiperイベント。Swiperイベント。他のスライド(次または前)へのアニメーション終了後に発生します。 |
遅延画像読み込み | photoBrowser | Swiperイベント。Swiperイベント。画像の遅延読み込み開始時に発生します。 |
遅延画像準備完了 | photoBrowser | Swiperイベント。Swiperイベント。遅延読み込みされた画像が読み込まれたときに発生します。 |
タッチ開始 | photoBrowser | Swiperイベント。Swiperイベント。ユーザーがSwiperをタッチしたときに発生します。引数として 'touchstart' イベントを受け取ります。 |
逆方向タッチ移動 | photoBrowser | Swiperイベント。Swiperイベント。ユーザーがSwiper上で指を方向パラメータとは逆方向にタッチして移動したときに発生します。引数として 'touchmove' イベントを受け取ります。 |
タッチ終了 | photoBrowser | Swiperイベント。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;
}
例
<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>