欧美激情中文字幕在线_国产区精品视频_免费久久99精品国产自_日韩精品 欧美

FancyBox3 中文文檔

1. 介紹

fancyBox 是一個(gè) JavaScript 庫(kù),它以?xún)?yōu)雅的方式展示圖片,視頻和一些 html 內(nèi)容。它包含你所期望的一切特性 —— 支持觸屏,響應(yīng)式和高度自定義。

1.1 依賴(lài)

推薦 jQuery 3+,但是 fancyBox 仍支持 jQery 1.9.1+ 和 jQuery 2+ 。

注意

如果你在圖片縮放時(shí)遇到了問(wèn)題,請(qǐng)升級(jí) jQuery 到最近版本(至少v3.2.1)。

1.2 兼容

fancyBox 支持觸屏操作,而且支持縮放等手勢(shì)操作。在移動(dòng)端和PC端上都十分合適。

fancyBox 已經(jīng)在下列瀏覽器中測(cè)試:

  • Chrome
  • firefox
  • IE10/11
  • Edge
  • IOS Safari
  • Nexus 7 Chrome

2. 配置

可以在 html 文檔中引入.css.js來(lái)使用fancyBox,確保在這之前引入了 jQuery 庫(kù)。下面是使用fancyBox的一個(gè)基本的HTML模板:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>My page</title>

	<!-- CSS -->
	<link rel="stylesheet" type="text/css" href="jquery.fancybox.min.css">
</head>
<body>

	<!-- Your HTML content goes here -->

	<!-- JS -->
	<script src="http://code.jquery.com/jquery-3.2.1.min.js"></script>
	<script src="jquery.fancybox.min.js"></script>
</body>
</html>

注意

  • 要先引入jQuery
  • 如果頁(yè)面中已經(jīng)引入過(guò)jQuery,不能再次引入
  • 不要同時(shí)引入 fancybox.jsfancybox.min.js
  • 一些方法(ajax,iframes 等)必須在一個(gè)web服務(wù)器上才可以正常運(yùn)行,在瀏覽器打開(kāi)一個(gè)本地文件是無(wú)法正常工作的

2.1 下載fancyBox

可以在GIthub下載最新的版本。

或者直接引用 cdnjs —cdnjs.com/libraries/f…

2.2 包管理工具

fancyBox 還可以通多 npm 和 Bower安裝。

# NPM
npm install @fancyapps/fancybox --save

# Bower
bower install fancybox --save

3. 使用

3.1 使用 data 屬性初始化

最基本的用法是通過(guò)添加?data-fancybox?屬性到一個(gè)超鏈接標(biāo)簽。標(biāo)題可以通過(guò)?data-capiton?添加。例如:

<a href="image.jpg" data-fancybox data-caption="My caption">
	<img src="thumbnail.jpg" alt="" />
</a>

 

這種方式使用默認(rèn)的配置,可以查看選項(xiàng)進(jìn)行自定義配置,或者使用data-options屬性。

3.2 使用 JavaScript 初始化

使用 jQuery 選擇器選擇一個(gè)元素,然后調(diào)用fancybox方法:

<script type="text/javascript">
	$("[data-fancybox]").fancybox({
		// Options will go here
	});
</script>

使用這種方式,只有被選中的元素才可以觸發(fā)點(diǎn)擊事件。

為了可以現(xiàn)在或之后存在的元素都可以觸發(fā)點(diǎn)擊事件,使用selector選項(xiàng)。例如:

3.3 手動(dòng)調(diào)用 fancyBox

fancyBox 允許使用 JavaScrip t以任意形式觸發(fā),因此不必需要通過(guò)某一個(gè)元素觸發(fā)。下面例子為展示一段簡(jiǎn)單的信息:

$.fancybox.open('<div class="message"><h2>Hello!</h2><p>You are awesome!</p></div>');

3.4 分組

如果你有一組元素,組內(nèi)元素使用相同的?data-fancybox?值就可以組成一個(gè)相冊(cè)。不同的組應(yīng)該使用不同的屬性值加以區(qū)分。

<a href="image_1.jpg" data-fancybox="group" data-caption="Caption #1">
	<img src="thumbnail_1.jpg" alt="" />
</a>

<a href="image_2.jpg" data-fancybox="group" data-caption="Caption #2">
	<img src="thumbnail_2.jpg" alt="" />
</a>

注意

fancyBox根據(jù)給定的url自己嘗試檢測(cè)內(nèi)容的類(lèi)型。如果無(wú)法檢測(cè),該類(lèi)型可以使用data-type屬性手動(dòng)添加。

<a href="images.php?id=123" data-type="image" data-caption="Caption">
	Show image
</a>

4. 媒體類(lèi)型

4.1 圖片

使用 fancyBox 的標(biāo)準(zhǔn)做法是用小尺寸的圖片鏈接到大尺寸圖片:

默認(rèn)情況下,fancyBox 會(huì)在一張圖片展示前進(jìn)行預(yù)加載。你可以選擇立即顯示圖片,這樣當(dāng)加載完成后會(huì)馬上渲染和顯示完整尺寸的圖片。不過(guò),以下屬性是必須添加的:

  • data-width?- 圖片的完整寬度
  • data-height?- 圖片的完整高度
<a href="image.jpg" data-fancybox="images" data-width="2048" data-height="1365">
    <img src="thumbnail.jpg" />
</a>

fancyBox 還支持禁止右鍵下載來(lái)保護(hù)圖片。當(dāng)然這無(wú)法阻止那些下定決心下載的用戶(hù),但是可以讓大多數(shù)想要盜取你文件的用戶(hù)打消這個(gè)念頭。

 

$('[data-fancybox]').fancybox({
  protect: true
})

4.2 行內(nèi) HTML

對(duì)于行內(nèi)元素,你需要?jiǎng)?chuàng)建一個(gè)隱藏的元素并添加獨(dú)特的?id?屬性:

<div style="display: none;" id="hidden-content">
	<h2>Hello</h2>
	<p>You are awesome.</p>
</div>

然后只需要?jiǎng)?chuàng)建一個(gè)帶有?data-src?屬性的超鏈接,該屬性值匹配之前隱藏元素的id(優(yōu)先使用# ):

 

<a data-fancybox data-src="#hidden-content" href="javascript:;">
	Trigger the fancyBox
</a>

這段代碼會(huì)產(chǎn)生一個(gè)關(guān)閉按鈕(如果你沒(méi)有通過(guò)?smallBtn: false?禁用的話(huà)),這個(gè)按鈕只設(shè)置了居中。因此你可以很輕松地通過(guò)css來(lái)自定義樣式。

 

4.3 Ajax

想要通過(guò) Ajax 加載內(nèi)容,需要在超鏈接添加?data-type="ajax"?屬性:

<a data-fancybox data-type="ajax" data-src="my_page.com/path/to/ajax/" href="javascript:;">
	AJAX content
</a>

另外,可以使用?data-filter?屬性定義一個(gè)選擇器,來(lái)顯示響應(yīng)的一部分。這個(gè)選擇器需要是一個(gè)合法的 jQuery 選擇器:

 

<a data-fancybox data-type="ajax" data-src="my_page.com/path/to/ajax/" data-filter="#two" href="javascript:;">
	AJAX content
</a>

4.4 Iframe

如果內(nèi)容可以展示在頁(yè)面,并且放在 iframe 中不會(huì)被腳本或者安全策略禁止,它就可以在 fancyBox 中展示:

<a data-fancybox data-type="iframe" data-src="http://codepen.io/fancyapps/full/jyEGGG/" href="javascript:;">
	Webpage
</a>

<a data-fancybox data-type="iframe" data-src="https://mozilla.github.io/pdf.js/web/viewer.html" href="javascript:;">
	Sample PDF
</a>

如果嵌入了 iframe,可以從父容器中訪(fǎng)問(wèn)和控制 fancyBox:

// 根據(jù)內(nèi)容調(diào)整 iframe 的高度
parent.jQuery.fancybox.getInstance().update();

// 關(guān)閉當(dāng)前的 fancyBox 實(shí)例
parent.jQuery.fancybox.getInstance().close();

Iframe 尺寸可以通多 CSS 調(diào)整:

 

.fancybox-slide--iframe .fancybox-content {
	width  : 800px;
	height : 600px;
	max-width  : 80%;
	max-height : 80%;
	margin: 0;
}

如果需要的話(huà),CSS 樣式可以被 JS 覆蓋:

$("[data-fancybox]").fancybox({
	iframe : {
		css : {
			width : '600px'
		}
	}
});

如果你沒(méi)有禁止 iframe 的預(yù)加載(使用preload),那么fancyBox會(huì)嘗試計(jì)算內(nèi)容的尺寸,并且會(huì)根據(jù)內(nèi)容來(lái)調(diào)整 iframe 的寬高。注意,這依賴(lài)于同源策略,因此會(huì)有一些限制。

下面這個(gè)例子禁止了 iframe 的預(yù)加載,并且用取消按鈕代替了工具欄。

$('[data-fancybox]').fancybox({
	toolbar  : false,
	smallBtn : true,
	iframe : {
		preload : false
	}
})

5. 嵌入

支持的網(wǎng)站可以展示在 fancyBox 中,只需要提供頁(yè)面的地址即可:

<a data-fancybox >
  YouTube video
</a>

<a data-fancybox >
  Vimeo video
</a>

<a data-fancybox >
	Google Map
</a>

<a data-fancybox  data-caption="<span title=&quot;Edited&quot;>balloon rides at dawn ??<br>was such a magical experience floating over napa valley as the golden light hit the hills.<br><a href=&quot;https://www.instagram.com/jamesrelfdyer/&quot;>@jamesrelfdyer</a></span>">
	Instagram photo
</a>

5.1 視頻尺寸

通過(guò) CSS 調(diào)整視頻的顯示大小:

.fancybox-slide--video .fancybox-content {
	width  : 800px;
	height : 600px;
	max-width  : 80%;
	max-height : 80%;
}

5.2 視頻參數(shù)

通過(guò) url 中的參數(shù)控制視頻

<a data-fancybox >
  YouTube video - hide controls and info
</a>

<a data-fancybox >
  Vimeo video - custom color
</a>

通過(guò) JavaScript 控制視頻:

$('[data-fancybox]').fancybox({
	youtube : {
		controls : 0,
		showinfo : 0
	},
	vimeo : {
		color : 'f00'
	}
});

6. 選項(xiàng)

默認(rèn)選項(xiàng)值快速參考:

var defaults = {

    // 相冊(cè)循環(huán)瀏覽
    loop : false,

    // 圖片周?chē)膍argin,如果視口(viewport)寬度小于800px則忽略
    margin : [44, 0],

    // Horizontal space between slides
    gutter : 50,

    // 鍵盤(pán)瀏覽
    keyboard : true,

    // 是否在屏幕邊緣顯示箭頭
    arrows : true,

    // 是否顯示infobar (頂部的counter and arrows)
    infobar : true,

    // 是否顯示頂部的toolbar
    toolbar : true,

    // 控制頂部toolbar里顯示的圖表
  	// 通過(guò)`btnTpl`選項(xiàng)的模板創(chuàng)建按鈕,并被放置在toolbar(class="fancybox-toolbar"`的元素)中
    buttons : [
        'slideShow',
        'fullScreen',
        'thumbs',
        'share',
        //'download',
        //'zoom',
        'close'
    ],

    // 探測(cè)"idle"的時(shí)間(秒)
    idleTime : 3,

    // 是否在右上角顯示關(guān)閉按鈕
  	// 如果設(shè)置為'auto',遇到內(nèi)容類(lèi)型為html,inline,ajax時(shí)顯示
    // Use template from `btnTpl.smallBtn` for customization
    smallBtn : 'auto',

    // 保護(hù)文件,禁止右鍵下載
    protect : false,

    // Shortcut to make content "modal" - 禁止鍵盤(pán)瀏覽,隱藏按鈕等
    modal : false,

    image : {
      	// 預(yù)加載
      	// 需要預(yù)定義圖片的尺寸
      	// 設(shè)置為'auto',自動(dòng)在預(yù)覽圖中縮放
        preload : "auto"

    },

    ajax : {

        // 請(qǐng)求 ajax 的配置
        settings : {
          	// 表明請(qǐng)求是從模態(tài)框中發(fā)起,名字可改
            data : {
                fancybox : true
            }
        }

    },

    iframe : {

        // Iframe 模板
        tpl : '<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen allowtransparency="true" src=""></iframe>',

        // 預(yù)加載
        // 由于同源策略,不能加載跨域數(shù)據(jù)
        preload : true,

      	// 自定義包裹 iframe 的元素的 CSS 樣式
      	// 這樣就可以自定義 iframe 的尺寸
        css : {},

        // iframe 標(biāo)簽屬性
        attr : {
            scrolling : 'auto'
        }

    },

    // 如果內(nèi)容類(lèi)型不能自動(dòng)檢測(cè)出來(lái),默認(rèn)值為'image'
    defaultType : 'image',

    // 打開(kāi)/關(guān)閉動(dòng)畫(huà)類(lèi)型
    // 可用的值:
    //   false            - disable
    //   "zoom"           - zoom images from/to thumbnail
    //   "fade"
    //   "zoom-in-out"
    //
    animationEffect : "zoom",

    // 打開(kāi)/關(guān)閉動(dòng)畫(huà)使用的時(shí)間,ms
    animationDuration : 500,

    // 圖片縮放時(shí)是夠改變透明度
  	// 如果透明度為'auto',那么圖片和縮略圖比例不一致時(shí)透明度將會(huì)發(fā)生改變
    zoomOpacity : "auto",

    // 滑塊動(dòng)畫(huà)
    //
    // 可用的值:
    //   false            - disable
    //   "fade'
    //   "slide'
    //   "circular'
    //   "tube'
    //   "zoom-in-out'
    //   "rotate'
    //
    transitionEffect : "fade",

    // 動(dòng)畫(huà)持續(xù)時(shí)間,ms
    transitionDuration : 366,

    // 自定義的滑塊的 class 值
    slideClass : '',

    // 自定義的布局的 class 值
    baseClass : '',

    // 布局的模板
    baseTpl	:
        '<div class="fancybox-container" role="dialog" tabindex="-1">' +
            '<div class="fancybox-bg"></div>' +
            '<div class="fancybox-inner">' +
                '<div class="fancybox-infobar">' +
                    '<span data-fancybox-index></span>&nbsp;/&nbsp;<span data-fancybox-count></span>' +
                '</div>' +
                '<div class="fancybox-toolbar">{{buttons}}</div>' +
                '<div class="fancybox-navigation">{{arrows}}</div>' +
                '<div class="fancybox-stage"></div>' +
                '<div class="fancybox-caption-wrap"><div class="fancybox-caption"></div></div>' +
            '</div>' +
        '</div>',

    // 加載中時(shí)的模板
    spinnerTpl : '<div class="fancybox-loading"></div>',

    // 錯(cuò)誤時(shí)的模板
    errorTpl : '<div class="fancybox-error"><p>{{ERROR}}<p></div>',

    btnTpl : {

        download : '<a download data-fancybox-download class="fancybox-button fancybox-button--download" title="{{DOWNLOAD}}">' +
                    '<svg viewBox="0 0 40 40">' +
                        '<path d="M20,23 L20,8 L20,23 L13,16 L20,23 L27,16 L20,23 M26,28 L13,28 L27,28 L14,28" />' +
                    '</svg>' +
                '</a>',

        zoom : '<button data-fancybox-zoom class="fancybox-button fancybox-button--zoom" title="{{ZOOM}}">' +
                    '<svg viewBox="0 0 40 40">' +
                        '<path d="M 18,17 m-8,0 a 8,8 0 1,0 16,0 a 8,8 0 1,0 -16,0 M25,23 L31,29 L25,23" />' +
                    '</svg>' +
                '</button>',

        close : '<button data-fancybox-close class="fancybox-button fancybox-button--close" title="{{CLOSE}}">' +
                    '<svg viewBox="0 0 40 40">' +
                        '<path d="M10,10 L30,30 M30,10 L10,30" />' +
                    '</svg>' +
                '</button>',

      	// 如果'smallBtn'沒(méi)有設(shè)置為 false,默認(rèn)關(guān)閉按鈕將會(huì)被放置在你的 html/inline/ajax 內(nèi)容中
        smallBtn   : '<button data-fancybox-close class="fancybox-close-small" title="{{CLOSE}}"></button>',

        // 箭頭
        arrowLeft : '<button data-fancybox-prev class="fancybox-button fancybox-button--arrow_left" title="{{PREV}}">' +
                        '<svg viewBox="0 0 40 40">' +
                          '<path d="M10,20 L30,20 L10,20 L18,28 L10,20 L18,12 L10,20"></path>' +
                        '</svg>' +
                      '</button>',

        arrowRight : '<button data-fancybox-next class="fancybox-button fancybox-button--arrow_right" title="{{NEXT}}">' +
                      '<svg viewBox="0 0 40 40">' +
                        '<path d="M30,20 L10,20 L30,20 L22,28 L30,20 L22,12 L30,20"></path>' +
                      '</svg>' +
                    '</button>'
    },

    // 模態(tài)框放置在哪個(gè)節(jié)點(diǎn)中
    parentEl : 'body',


    // 焦點(diǎn)處理
    // ==============

    // 打開(kāi)后焦點(diǎn)在第一個(gè)支持焦點(diǎn)的元素上
    autoFocus : false,

    // 關(guān)閉后焦點(diǎn)回到 active 的元素上
    backFocus : true,

    // 不讓用戶(hù)焦點(diǎn)放在模態(tài)框外的內(nèi)容中
    trapFocus : true,


    // 模態(tài)框配置
    // =======================

    fullScreen : {
        autoStart : false,
    },

    // 設(shè)置 `touch: false` 來(lái)禁止拖拽/手指滑動(dòng)
    touch : {
        vertical : true,  // 允許垂直方向拖拽
        momentum : true   // Continue movement after releasing mouse/touch when panning
    },

    // 手動(dòng)初始化時(shí)的 hash 值,
    // 設(shè)為 `false` 不改變 hash 
    hash : null,

    // 自定義或者添加媒體類(lèi)型
    // 例如:
    /*
    media : {
        youtube : {
            params : {
                autoplay : 0
            }
        }
    }
    */
    media : {},

    slideShow : {
        autoStart : false,
        speed     : 4000
    },

    thumbs : {
        autoStart   : false,                  // 打開(kāi)的時(shí)候展示縮略圖
        hideOnClose : true,                   // 關(guān)閉動(dòng)畫(huà)開(kāi)始時(shí)隱藏縮略圖輪廓
        parentEl    : '.fancybox-container',  // Container is injected into this element
        axis        : 'y'                     // 垂直 (y) or 水平 (x) 滾動(dòng)
    },

    // 使用鼠標(biāo)滾輪來(lái)瀏覽相冊(cè)
    // 設(shè)為 'auto' - 只對(duì)圖片啟用
    wheel : 'auto',

    // 毀掉函數(shù)
    //==========

    // 更多信息請(qǐng)查看 API
    // 例如:
    /*
        afterShow: function( instance, current ) {
             console.info( 'Clicked element:' );
             console.info( current.opts.$orig );
        }
    */

    onInit       : $.noop,  // 實(shí)例初始化完成

    beforeLoad   : $.noop,  // 側(cè)欄的內(nèi)容正在被加載
    afterLoad    : $.noop,  // 側(cè)欄的內(nèi)容加載完成后

    beforeShow   : $.noop,  // 打開(kāi)動(dòng)畫(huà)開(kāi)始前
    afterShow    : $.noop,  // 內(nèi)容加載完成,進(jìn)行動(dòng)畫(huà)的時(shí)候

    beforeClose  : $.noop,  // 實(shí)例準(zhǔn)備關(guān)閉的時(shí)候,返回 false 值取消關(guān)閉
    afterClose   : $.noop,  // 實(shí)例關(guān)閉后

    onActivate   : $.noop,  // 實(shí)例激活的時(shí)候
    onDeactivate : $.noop,  // 其他實(shí)例被激活的時(shí)候


    // 交互
    // ===========

    // 使用一下選項(xiàng)自定義用戶(hù)單擊雙擊等事件
    // 每個(gè)選項(xiàng)可以是字符串,或者有返回值的方法
    //
    // 可用的值:
    //   "close"           - close instance
    //   "next"            - move to next gallery item
    //   "nextOrClose"     - move to next gallery item or close if gallery has only one item
    //   "toggleControls"  - show/hide controls
    //   "zoom"            - zoom image (if loaded)
    //   false             - do nothing

    // 內(nèi)容被點(diǎn)擊
    clickContent : function( current, event ) {
        return current.type === 'image' ? 'zoom' : false;
    },

    // 側(cè)邊欄被點(diǎn)擊
    clickSlide : 'close',

    // 點(diǎn)擊模態(tài)框外的北京時(shí)
    clickOutside : 'close',

    // 同之前的兩個(gè)一樣,只是是雙擊的時(shí)候
    dblclickContent : false,
    dblclickSlide   : false,
    dblclickOutside : false,


    // 移動(dòng)端事件
    // =============================================

    mobile : {
        idleTime : false,
        margin   : 0,

        clickContent : function( current, event ) {
            return current.type === 'image' ? 'toggleControls' : false;
        },
        clickSlide : function( current, event ) {
            return current.type === 'image' ? 'toggleControls' : 'close';
        },
        dblclickContent : function( current, event ) {
            return current.type === 'image' ? 'zoom' : false;
        },
        dblclickSlide : function( current, event ) {
            return current.type === 'image' ? 'zoom' : false;
        }
    },


    // 國(guó)際化
    // ============

    lang : 'en',
    i18n : {
        'en' : {
            CLOSE       : 'Close',
            NEXT        : 'Next',
            PREV        : 'Previous',
            ERROR       : 'The requested content cannot be loaded. <br/> Please try again later.',
            PLAY_START  : 'Start slideshow',
            PLAY_STOP   : 'Pause slideshow',
            FULL_SCREEN : 'Full screen',
            THUMBS      : 'Thumbnails',
            DOWNLOAD    : 'Download',
            SHARE       : 'Share',
            ZOOM        : 'Zoom'
        },
        'de' : {
            CLOSE       : 'Schliessen',
            NEXT        : 'Weiter',
            PREV        : 'Zurück',
            ERROR       : 'Die angeforderten Daten konnten nicht geladen werden. <br/> Bitte versuchen Sie es sp?ter nochmal.',
            PLAY_START  : 'Diaschau starten',
            PLAY_STOP   : 'Diaschau beenden',
            FULL_SCREEN : 'Vollbild',
            THUMBS      : 'Vorschaubilder',
            DOWNLOAD    : 'Herunterladen',
            SHARE       : 'Teilen',
            ZOOM        : 'Ma?stab'
        }
    }

};

通過(guò)傳入?fancybox?方法一個(gè)對(duì)象來(lái)設(shè)置一個(gè)實(shí)例:

$("[data-fancybox]").fancybox({
	thumbs : {
		autoStart : true
	}
});

可以通過(guò)?$.fancybox.defaults?命名空間修改 fancyBox 的默認(rèn)選項(xiàng):

$.fancybox.defaults.animationEffect = "fade";

對(duì)于單獨(dú)的元素可以通過(guò)?data-options?屬性進(jìn)行自定義。這個(gè)屬性值要求JSON格式的對(duì)象:

<a data-fancybox data-options='{"caption" : "My caption", "src" : "https://codepen.io/about/", "type" : "iframe"}' href="javascript:;" class="btn">
	Open external page
</a>

7. API

API 提供了一系列的方法來(lái)控制 fancyBox。這些方法幫助你擴(kuò)展插件,整合到其他的 web 應(yīng)用中。

7.1 核心方法

操作實(shí)例的核心方法:

// 只關(guān)閉當(dāng)前 active 狀態(tài)或者所有的 fancyBox 實(shí)例
$.fancybox.close( true );

// 打開(kāi) fancyBox
$.fancybox.open( items, opts, index );

通過(guò) jQuery 將相冊(cè)中的元素變?yōu)?jQuery 對(duì)象或者包含純對(duì)象的數(shù)組,進(jìn)行更多操作如創(chuàng)建定義點(diǎn)擊事件。

var $links = $('.fancybox');

$links.on('click', function() {

	$.fancybox.open( $links, {
		// 自定義內(nèi)容
	}, $links.index( this ) );

	return false;
});

手動(dòng)創(chuàng)建一組對(duì)象時(shí),組內(nèi)元素應(yīng)該遵循以下規(guī)則:

{
  	src  : '' // 資源
	type : '' // 類(lèi)型: image|inline|ajax|iframe|html (optional)
	opts : {} // 選項(xiàng) (optional)
}

下面是一個(gè)通過(guò) JavaScrip t打開(kāi)相冊(cè)的例子:

$.fancybox.open([
	{
		src  : '1_b.jpg',
		opts : {
			caption : 'First caption'
		}
	},
	{
		src  : '2_b.jpg',
		opts : {
			caption : 'Second caption'
		}
	}
], {
	loop : false
});

fancyBox 允許只傳一個(gè)對(duì)象。打開(kāi)行內(nèi)元素的例子:

$.fancybox.open({
	src  : '#hidden-content',
	type : 'inline',
	opts : {
		afterShow : function( instance, current ) {
			console.info( 'done!' );
		}
	}
});
// 譯者注:行內(nèi)元素如下
<div id="#hidden-content">
  <p>...content</p>
</div>

 

7.2 實(shí)例的方法

你需要定義一個(gè)實(shí)例來(lái)使用實(shí)例的方法。

var instance = $.fancybox.open(
	// 內(nèi)容和選項(xiàng)
);

從當(dāng)前 active 的實(shí)例中獲取信息:

var instance = $.fancybox.getInstance();

回調(diào)函數(shù)的第一個(gè)參數(shù)返回實(shí)例信息:

$("[data-fancybox]").fancybox({
	afterShow : function( instance, current ) {
		console.info( instance );
	}
});

實(shí)例可以調(diào)用以下方法:

// 跳到下一個(gè)相冊(cè)元素
instance.next( duration );

//跳到上一個(gè)相冊(cè)元素
instance.previous( duration );

// 調(diào)到選中的相冊(cè)元素
instance.jumpTo( index, duration );

// 檢測(cè)當(dāng)前尺寸是否小于實(shí)際尺寸
instance.isScaledDown();

// 縮放到實(shí)際尺寸
instance.scaleToActual( x, y, duration );

// 檢測(cè)尺寸是否超過(guò)父元素
instance.canPan();

// 縮放適應(yīng)父元素尺寸
instance.scaleToFit( duration );

// 更新滑塊的內(nèi)容和位置
instance.update();

// 更新側(cè)邊欄的位置, 縮放內(nèi)容來(lái)適應(yīng)
instance.updateSlide( slide );

// 更新 infobar 的值, 導(dǎo)航按鈕的狀態(tài), 和展示標(biāo)題
instance.updateControls( force );

// 在側(cè)邊欄中加載自定義內(nèi)容
instance.setContent( slide, content );

// 在側(cè)邊欄中加載loading效果
instance.showLoading( slide );

// 從側(cè)邊欄中去除loading效果
instance.hideLoading( slide );

// 找到和把焦點(diǎn)放在第一個(gè)可以放置焦點(diǎn)的元素
instance.focus();

// 激活當(dāng)前 active 的實(shí)例,顯示在最前面
instance.activate();

// 關(guān)閉實(shí)例
instance.close();

7.3 事件

fancyBox 支持觸發(fā)以下事件:

beforeLoad   : 滑塊的內(nèi)容加載前
afterLoad    : 滑塊內(nèi)容加載后

beforeShow   : 打開(kāi)動(dòng)畫(huà)開(kāi)始前
afterShow    : 內(nèi)容或者動(dòng)畫(huà)加載完成

beforeClose  : 實(shí)例準(zhǔn)備關(guān)閉前,染回`false`取消關(guān)閉
afterClose   : 實(shí)例關(guān)閉后

onInit       : 實(shí)例初始化完成
onActivate   : 實(shí)例active狀態(tài)
onDeactivate : 其他實(shí)例變?yōu)閍ctive狀態(tài)

事件可以作為一個(gè)對(duì)象的函數(shù)屬性,該對(duì)象作為參數(shù)傳入到 fancyBox 初始化方法中:

<script type="text/javascript">
	$("[data-fancybox]").fancybox({
		afterShow: function( instance, slide ) {

			// Tip: Each event passes useful information within the event object:

			// Object containing references to interface elements
			// (background, buttons, caption, etc)
			// console.info( instance.$refs );

			// Current slide options
			// console.info( slide.opts );

			// Clicked element
			// console.info( slide.opts.$orig );

			// Reference to DOM element of the slide
			// console.info( slide.$slide );

		}
	});
</script>

每一個(gè)回調(diào)函數(shù)接收兩個(gè)參數(shù) —— 當(dāng)前的 fancyBox 實(shí)例和當(dāng)前的相冊(cè)對(duì)象(如果它們存在)。

fancyBox也支持觸發(fā)所有的實(shí)例事件。為了防止和其他的腳本產(chǎn)生干擾,這些事件命名為.fb結(jié)尾。這些事件函數(shù)接收3個(gè)參數(shù)—事件(event),當(dāng)前的 fancyBox 實(shí)例和當(dāng)前的相冊(cè)對(duì)象。

下面例子是綁定afterShow事件:

$(document).on('afterShow.fb', function( e, instance, slide ) {
	// Your code goes here
});

如果你想阻止當(dāng)前彈窗的關(guān)閉(例如在表單提交之后),可以使用beforeClose。只需要返回false即可:

beforeClose : function( instance, current, e ) {
	if ( $('#my-field').val() == '' ) {
		return false;
	}
}

8. 模塊

fancyBox 代碼被分成幾個(gè)擴(kuò)展核心功能的文件(模塊)。你可以通過(guò)去除不必要的模塊來(lái)構(gòu)建你自己的 fancyBox 版本。如果需要,每一個(gè)模塊有自己的.js.css文件。

// 自定義、添加新的媒體類(lèi)型
// 例如:
/*
media : {
	youtube : {
		params : {
			autoplay : 0
		}
	}
}
*/
media : {},

slideShow : {
	autoStart : false,
	speed     : 4000
},

thumbs : {
	autoStart   : false,                  // 打開(kāi)時(shí)顯示縮略圖
	hideOnClose : true,                   // Hide thumbnail grid when closing animation starts
	parentEl    : '.fancybox-container',  // Container is injected into this element
	axis        : 'y'                     // Vertical (y) or horizontal (x) scrolling
}

Example (show thumbnails on start):

開(kāi)始時(shí)展示縮略圖的例子:

$('[data-fancybox="images"]').fancybox({
	thumbs : {
		autoStart : true
	}
})

如果你查看了 fancyBox 的實(shí)例對(duì)象,你會(huì)發(fā)現(xiàn)一些key的值是大寫(xiě)的 —— 他們關(guān)聯(lián)著其他模塊的對(duì)象。當(dāng)然,你也會(huì)發(fā)現(xiàn) fancyBox 使用和 jQuery 一直的前綴?$?

下面例子為如何拿到縮略圖柵格元素:

$.fancybox.getInstance().Thumbs.$grid

下面例子為如何調(diào)用切換縮略圖的方法:

$.fancybox.getInstance().Thumbs.toggle();

可使用的方法列表:

Thumbs.focus()
Thumbs.update();
Thumbs.hide();
Thumbs.show();
Thumbs.toggle();

FullScreen.request( elem );
FullScreen.exit();
FullScreen.toggle( elem );
FullScreen.isFullscreen();
FullScreen.enabled();

SlideShow.start();
SlideShow.stop();
SlideShow.toggle();

如果你想禁止 hash 模塊,使用下面代碼片段(引用 JS 之后):

$.fancybox.defaults.hash = false;

9. FAQ

1. 打開(kāi)、關(guān)閉導(dǎo)致固定定位的元素移動(dòng)

在固定定位的元素的class中加入compensate-for-scrollbar。例子為使用Bootstrap的navbar組件:

<nav class="navbar navbar-inverse navbar-fixed-top compensate-for-scrollbar">
	<div class="container">
		..
	</div>
</nav>

上個(gè)例子中,腳本會(huì)測(cè)量滾動(dòng)條的寬度,創(chuàng)建compensate-for-scrollbar樣式并將寬度值復(fù)制到該樣式的margin-right屬性。因此,如果你的元素寬度設(shè)置為width:100%,你應(yīng)該同時(shí)使用leftright定位,例如:

.navbar {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
}

2. 如何自定義標(biāo)題

你可以使用caption選項(xiàng),它接收一個(gè)函數(shù),并且被組內(nèi)的每個(gè)元素調(diào)用。例子為增加圖片下載鏈接:

$( '[data-fancybox="images"]' ).fancybox({
    caption : function( instance, item ) {
        var caption = $(this).data('caption') || '';

        if ( item.type === 'image' ) {
            caption = (caption.length ? caption + '<br />' : '') + '<a href="' + item.src + '">Download image</a>' ;
        }

        return caption;
    }
});

在標(biāo)題右邊增加當(dāng)前圖片的序號(hào)和圖片總數(shù):

$( '[data-fancybox="images"]' ).fancybox({
    infobar : false,
    caption : function( instance, item ) {
        var caption = $(this).data('caption') || '';

        return ( caption.length ? caption + '<br />' : '' ) + 'Image <span data-fancybox-index></span> of <span data-fancybox-count></span>';
    }
});

caption方法里面,this指向被點(diǎn)擊的元素。例子為使用不同的標(biāo)題:

$( '[data-fancybox]' ).fancybox({
	caption : function( instance, item ) {
		return $(this).find('figcaption').html();
	}
});

3. 如何在tool上創(chuàng)建自定義按鈕

創(chuàng)建可重復(fù)使用的按鈕例子:

// 創(chuàng)建按鈕模板
$.fancybox.defaults.btnTpl.fb = '<button data-fancybox-fb class="fancybox-button fancybox-button--fb" title="Facebook">' +
    '<svg viewBox="0 0 24 24">' +
        '<path d="M22.676 0H1.324C.594 0 0 .593 0 1.324v21.352C0 23.408.593 24 1.324 24h11.494v-9.294h-3.13v-3.62h3.13V8.41c0-3.1 1.894-4.785 4.66-4.785 1.324 0 2.463.097 2.795.14v3.24h-1.92c-1.5 0-1.793.722-1.793 1.772v2.31h3.584l-.465 3.63h-3.12V24h6.115c.733 0 1.325-.592 1.325-1.324V1.324C24 .594 23.408 0 22.676 0"/>' +
    '</svg>' +
'</button>';

// 使用時(shí)間代理使按鈕可點(diǎn)擊
$('body').on('click', '[data-fancybox-fb]', function() {
  window.open("https://www.facebook.com/sharer/sharer.php?u="+encodeURIComponent(window.location.href)+"&t="+encodeURIComponent(document.title), '','left=0,top=0,width=600,height=300,menubar=no,toolbar=no,resizable=yes,scrollbars=yes');
});

// 自定義按鈕
$( '[data-fancybox="images"]' ).fancybox({
  buttons : [
    'fb',
    'close'
  ]
});

4. 如何重置縮略圖柵格的位置

這里沒(méi)有 JS 選項(xiàng)去改變縮略圖柵格的位置,但是 fancyBox 允許你使用 CSS 來(lái)改變每個(gè)塊元素的位置或者尺寸(例如:內(nèi)容區(qū)域,標(biāo)題或者縮略圖柵格)。這使你很自由的改變彈框窗口的外觀和樣式。

5. 如何禁止touch操作

當(dāng)你想內(nèi)容可選擇或者可點(diǎn)擊,有兩個(gè)選項(xiàng):

  • 設(shè)置touch:false完全禁止 touch 操作
  • 添加data-selectable="true"屬性到你的 html 元素
上一篇 CSS3 Flex 布局詳解文檔
下一篇 ES6中的異步詳解
目錄
applek

applek管理員

個(gè)人說(shuō)明在個(gè)人中心里面設(shè)置

本月創(chuàng)作熱力圖

最新評(píng)論
小超
小超
7月9日
下個(gè)版本考慮將下載地址加密(防止采集)
Lvtu
Lvtu
7月4日
qiang厲害
評(píng)論于留言建議
chinacnd
chinacnd
6月26日
這個(gè)主題是怎么做到加載速度那么快的?
風(fēng)起云涌
風(fēng)起云涌
6月17日
前臺(tái)投稿現(xiàn)在有點(diǎn)太抽象了 希望可以弄成那種分區(qū)填寫(xiě)的 標(biāo)題,內(nèi)容,圖片,目錄,標(biāo)簽,這樣的
評(píng)論于留言建議
主站蜘蛛池模板: 欧美精品一区二区免费| 丁香六月激情婷婷| 欧美亚洲在线观看| 欧美中文字幕在线观看| 国产女人18毛片水18精品| 秋霞久久久久久一区二区| 亚洲欧洲国产日韩精品| 国产精品乱子乱xxxx| 国产一区二区丝袜| 久久久久99精品成人片| 萌白酱国产一区二区| 欧美一区二视频在线免费观看| 日韩有码在线视频| 国产成人免费91av在线| 日本一区二区三区免费看| 九九精品视频在线| 国产九九九九九| 99免费视频观看| 欧美精品一区二区性色a v| 久久久久福利视频| 国产传媒久久久| 日韩视频免费中文字幕| 欧美激情网站在线观看| 精品久久久久亚洲| 精品不卡在线| 午夜精品理论片| 免费观看亚洲视频| 亚洲中文字幕无码一区二区三区| 一区二区视频在线免费| 欧美日韩一区二区在线免费观看| 真实国产乱子伦对白视频| 亚洲欧洲精品一区二区三区波多野1战4| 91精品免费看| 久久99精品视频一区97| 日韩最新av在线| 国产在线播放一区二区| 日韩欧美精品在线不卡| 国产亚洲欧美在线视频| 久久久久久久久久久久久久久久久久av| 国产毛片久久久久久国产毛片| 日韩视频免费看|