照片瀏覽器

相片瀏覽器是一個相片瀏覽器元件,用於顯示相片/影像的集合。相片可以縮放和平移(選用)。

相片瀏覽器使用 Swiper Slider 元件在相片之間滑動。

相片瀏覽器應用程式方法

讓我們看看相關的應用程式方法,以使用相片瀏覽器

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'
  ],
});

相片瀏覽器參數

讓我們看看所有可用的相片瀏覽器參數清單

參數類型預設值描述
相片陣列[]包含相片 URL 的陣列,或包含「url」(或「html」)和「標題」屬性的物件陣列。
縮圖陣列[]包含縮圖影像 URL 的陣列。如果未指定或陣列為空,則不會渲染縮圖
展示布林值true點選相片瀏覽器時啟用或停用展示模式。
展示隱藏標題布林值false如果您也想要在展示模式中隱藏標題,請設定為 true
向上滑動關閉布林值true當啟用此參數時,您可以向上/向下滑動來關閉相片瀏覽器
快顯推播布林值false啟用相片瀏覽器快顯視窗,以在開啟時推播後面的檢視/畫面
可路由的視窗布林值false會將開啟的相片瀏覽器新增至路由記錄,這使得能夠透過在路由記錄中返回來關閉相片瀏覽器,並將目前的路由設定為相片瀏覽器視窗
網址字串相片/相片瀏覽器視窗網址,將會設定為目前的路由
檢視物件如果你想使用「頁面」相片瀏覽器類型,或在啟用 routableModals 時設定路由的位置,請連結到已初始化的檢視實例。預設情況下,如果未指定,它將在主檢視中開啟。
類型字串獨立定義相片瀏覽器開啟的方式。可以是 獨立(將以自訂轉場效果作為疊加層開啟)、快顯視窗(將作為 快顯視窗 開啟)、頁面(將注入檢視並載入為新頁面)。
佈景主題字串淺色相片瀏覽器色彩主題,可以是 淺色深色
說明文字主題字串說明文字色彩主題,也可以是 淺色深色。預設情況下,等於 佈景主題 參數
導覽列布林值true設為 false 以移除相片瀏覽器的導覽列
工具列布林值true設為 false 以移除相片瀏覽器的工具列
頁面返回連結文字字串返回相片瀏覽器導覽列中返回連結的文字
快顯視窗關閉連結文字字串關閉在快顯視窗中或作為獨立項目開啟時,相片瀏覽器導覽列中關閉連結的文字
導覽列顯示計數布林值未定義定義是否在導覽列標題中顯示「5 個中的 3 個」文字。如果未指定(未定義),則在有超過 1 個項目時顯示此文字
導覽列「的」文字字串「的」相片計數器中「的」文字:「5 個中的 3 個」
圖示顏色字串預設顏色 之一
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,
  },
},
虛擬投影片布林值true啟用時,Swiper 將使用虛擬投影片
按背景關閉布林值true啟用時,相片瀏覽器快顯視窗將在按一下背景時關閉
呈現功能
呈現導覽列函式呈現導覽列的函式,必須傳回導覽列 HTML 字串
呈現工具列函式呈現工具列的函式,必須傳回工具列 HTML 字串
呈現說明文字函式(說明文字、索引)呈現單一說明文字的函式,必須傳回說明文字 HTML 字串
呈現物件函式(相片、索引)呈現相片物件的函式,必須傳回相片物件 HTML 字串
呈現延遲載入相片函式(相片、索引)呈現延遲載入相片投影片的函式,必須傳回投影片 HTML 字串
呈現相片函式(相片、索引)呈現相片為 Swiper 投影片的函式,必須傳回投影片 HTML 字串
呈現頁面函式呈現相片瀏覽器頁面的函式,必須傳回完整頁面 HTML 版面字串
呈現快顯視窗函式呈現相片瀏覽器快顯視窗的函式,必須傳回完整快顯視窗 HTML 版面字串
呈現獨立函式用於呈現獨立模式的照片瀏覽器函數,必須傳回完整的模式 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 前綴。

事件目標描述
向上滑動關閉photoBrowser當使用者以向上/向下滑動的方式關閉相片瀏覽器時,將觸發事件。
tapphotoBrowserSwiper 事件。當使用者點選/輕觸 Swiper 時,將觸發事件。接收「touchend」事件作為引數。
clickphotoBrowserSwiper 事件。當使用者點選/輕觸 Swiper 時,將觸發事件。接收「touchend」事件作為引數。
doubleTapphotoBrowserSwiper 事件。當使用者在 Swiper 的容器上雙擊時,將觸發事件。接收「touchend」事件作為引數
doubleClickphotoBrowserSwiper 事件。當使用者在 Swiper 的容器上雙擊時,將觸發事件。接收「touchend」事件作為引數
slideChangephotoBrowserSwiper 事件。當目前活動的投影片變更時,將觸發事件
transitionStartphotoBrowserSwiper 事件。在轉場開始時,將觸發事件。
transitionEndphotoBrowserSwiper 事件。在轉場後,將觸發事件。
slideChangeTransitionStartphotoBrowserSwiper 事件。在動畫開始到其他投影片(下一個或上一個)時,將觸發事件。
slideChangeTransitionEndphotoBrowserSwiper 事件。在動畫到其他投影片(下一個或上一個)後,將觸發事件。
lazyImageLoadphotoBrowserSwiper 事件。在圖像的延遲載入開始時,將觸發事件
lazyImageReadyphotoBrowserSwiper 事件。當延遲載入的圖像載入時,將觸發事件
touchStartphotoBrowserSwiper 事件。當使用者觸控 Swiper 時觸發事件。接收 'touchstart' 事件作為參數。
touchMoveOppositephotoBrowserSwiper 事件。當使用者觸控並將手指在與 direction 參數相反的方向上移動 Swiper 時觸發事件。接收 'touchmove' 事件作為參數。
touchEndphotoBrowserSwiper 事件。當使用者釋放 Swiper 時觸發事件。接收 'touchend' 事件作為參數。
openphotoBrowser當相片瀏覽器開始其開啟動畫時觸發事件。事件處理常式接收相片瀏覽器實例作為參數
photoBrowserOpenapp
openedphotoBrowser當相片瀏覽器完成其開啟動畫後觸發事件。事件處理常式接收相片瀏覽器實例作為參數
photoBrowserOpenedapp
closephotoBrowser當相片瀏覽器開始其關閉動畫時觸發事件。事件處理常式接收相片瀏覽器實例作為參數
photoBrowserCloseapp
closedphotoBrowser當相片瀏覽器完成其關閉動畫後觸發事件。事件處理常式接收相片瀏覽器實例作為參數
photoBrowserClosedapp
beforeDestroyphotoBrowser當相片瀏覽器實例即將被銷毀之前觸發事件。事件處理常式接收相片瀏覽器實例作為參數
photoBrowserBeforeDestroyapp

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>