2016年5月19日 星期四

jQuery Loading Overlay

jQuery Loading Overlay

簡介

這篇介紹一個 jQuery 的插件 (plugin),功能是在下載文件或資料時,在螢幕或區塊中顯示遮罩 (overlay);遮罩中可以有動畫或訊息,告訴使用者流覽器正在進行下載,電腦沒有掛掉,也沒有在偷懶。網路上有很多類似功能的插件,個人覺得這個最簡單,用起來也方便;但這個插件只能用在有支援 CSS3 的流覽器上。插件的下載點和詳細說明可以在 gasparesganga.com/labs/jquery-loading-overlay/ 網址中找到。這個插件的遮罩可以遮蔽整個流覽器的螢幕,或只遮蔽指定的元件;在遮蔽元件時,螢幕上可以有多個遮罩同時存在。當遮蔽的元件改變尺寸時,遮罩也會跟著改變尺寸。顯示的動畫可以替換或自訂,或使用 Font Awesome 裡的圖像,如果要使用 Font Awesome 裡的圖像,要記得在網頁中包含 Font Awesome 的樣式表。插件只有三個函式,但函式名稱並沒有遵照一般的命名規範,第一個字母小寫,後繼再用駝峰式 (camel case),這點要留意:

$.LoadingOverlaySetup(options)
這個函式用來設定遮罩整體的各項屬性,透過這個函式設定的屬性會適用於所有後繼產生的遮罩。在隨後有各項屬性作用的介紹。
$.LoadingOverlay(action [,options])
設定全螢幕遮罩。action 參數有兩個字串值: "show" 顯示全螢幕的遮罩,"hide" 則取消全螢幕遮罩。options 屬性為選項參數,設定的屬性只會適用於這次函式所產生的遮罩。
$(selector).LoadingOverlay(action [,options])
設定指定元件的遮罩。selector 的語法和 CSS3 的選取器相容。action 和 options 參數的用法和上述函式相同。

options 的屬性如下:

color
預設值為 "rgba(255, 255, 255, 0.8)"。賦予值設定遮罩的顏色及透明度。
custom
預設值為 ""。賦予值可以是一個 DOM 元件或 jQuery 物件,這個物件會出現在遮罩的上面。設定為 "" (空字串)或 false 值時,此屬性無作用。
fade
預設值為 true,淡入歷時 400 ms, 淡出歷時 200ms。賦予值設定淡入 (fadeIn) 及淡出 (fadeOut) 所經歷的時間。只賦予一個數值時,單位為 ms;淡入及淡出的時間都等於該數值。賦予一個數值陣列時,第一個陣列數值為淡入的歷時,第二個數值為淡出的歷時;例如:[400, 200]。賦予值也可為字串 "fast" (200ms) 或 "slow" (400ms)。賦予值為 0 或 false 時,此屬性無作用。
fontawesome
預設值為 ""。賦予值為 Font Awesome 中圖像的 CSS 類別名,指定所要使用的圖像。賦予值為 "" 或 false 時,此屬性無作用。
image
預設值為 "loading.gif"。賦予值為遮罩上動畫檔案的所在位置。賦予值為 "" 或 false 時,不使用動畫。
maxSize
預設值為 "100px"。賦予值為數值或字串,設定動畫或圖像的最大尺寸,單位為 px。賦予值為 0 或 false 時,沒有限制最大尺寸。
minSzie
預設值為 "20px"。賦予值為數值或字串,設定動畫或圖像的最大尺寸,單位為 px。賦予值為 0 或 false 時,沒有限制最小尺寸
resizeInterval
預設值為 0。賦予值為數值,單位為 ms。賦予值設定當被遮蔽元件改變其尺寸時,對應遮罩改變尺寸的歷時。只有在元件被遮罩遮蔽時,同時會改變其尺寸時,才會用到這個設定。
size
預設值為 "50%"。賦予值為數值,單位為 %,用來調整遮罩動畫或圖像的尺寸,遮罩動畫或圖像的大小不會受到元件尺寸的限制,但會所限於 maxSize 及 minSize 所設定的值。賦予值為 0 或 false 時,此屬性無作用。

範例

範例中產生三個遮罩,一個全螢幕的遮罩,兩個元件遮罩,兩個元件遮罩會同時出現在螢幕上。每隔 3 秒執行一個動作,直到最終的螢幕出現。出現全螢幕遮罩前,會先看到最終的螢幕出現一下。如果要解決這個問題,可以把顯示全螢幕的 javascript 程式碼移到 <body> 的下方。圖片中所展示的是當兩個元件遮罩同時出現在螢幕的情況。

CSS

<style>
    html {
        width: 100%;
        height: 100%;
        background-color: white;
    }
    body {
        margin: 0 auto;
        width: 960px;
        height: 100%;
        padding: 20px;
        background-color: antiquewhite;
    }
    .area {
        box-sizing: border-box;
        margin: 20px;
        width:100px;
        height:100px;
        border: 1px solid black;
        float: left;
    }
    .coral {
        background-color: coral;
    }
    .lightgreen {
        background-color: lightgreen;
    }
</style>

.area{} 設定兩個區塊的共通屬性。.coral{} 及 .lightgreen{} 各設定兩個區塊的顏色。

HTML

<body>
    
</body>

HTML 中建立兩個區塊。

Script

<script>
$(function(){
    $.LoadingOverlaySetup({
        image: "../images/loading.gif",
        color: "rgb(238, 238, 238, 1)",
        // custom: $("<div>", {text: "Loading..."}),
        maxSize: "50px",
        minSize: "20px"
        
    });
    $.LoadingOverlay("show");

    // Hide it after 3 seconds
    setTimeout(function(){
        $.LoadingOverlay("hide");
        setTimeout(function(){
            $("#area_1").LoadingOverlay("show", {size: 10});
            $("#area_2").LoadingOverlay("show", {color: "rgb(238, 238, 238, 0.5)"});
            setTimeout(function(){
                $("#area_1").LoadingOverlay("hide");
                $("#area_2").LoadingOverlay("hide");
            }, 3000);
        }, 3000);
    }, 3000);
});
</script>

第 3~10 行,先設定遮罩的整體屬性值。
第 17 行,設定 #area_1 區塊的動畫縮小為原來的 10%。size 的值可以賦予 10 或 "10%"。
第 18 行,設定 #area_2 區塊的遮罩透明度為 0.5, 顏色不變。

沒有留言:

張貼留言