jQuery Plugin / Modal Window

mybox.js 把介紹頁做得更有層次

這是一個輕量、直接、容易整合的 jQuery 彈窗元件。你可以用它快速建立通知、介紹卡、確認框、表單、圖片燈箱與 AJAX 內容視窗,而且不用改動既有網站架構。

  • 適合介紹 API、產品功能頁、內嵌流程視窗與後台工具頁。
  • 保留深色背景風格,同時把資訊整理得更清楚、更現代。
  • 所有中文文案都透過 __() 包裝,能直接延續站內多國語系機制。
互動彈窗預覽

把內容包進一個好看的互動層

不論是產品介紹、提醒訊息、表單、圖片或 AJAX 結果,都可以在同一套 API 裡完成。

目前狀態: CLOSED
特色亮點

用更適合 API 介紹的方式整理 mybox.js

新版頁面改成產品與文件混合的 landing page 結構,讓訪客能先理解它的價值,再快速找到安裝方式、核心 API 與實際用法。

01

輕量快速

不依賴龐大的 UI 框架,直接用 jQuery 就能建立乾淨、置中的互動視窗。

02

高度客製

內容可放 HTML、圖片、表單或 AJAX 結果,並能直接透過 css 參數調整視覺風格。

03

事件完整

提供 beforeBlock、onBlock、unBlock 等 hooks,方便串接提示、追蹤與後續行為。

快速開始

三步驟,把 mybox.js 接進你的頁面

如果你已經有 jQuery,mybox 的整合成本非常低。這也是它很適合被用來補強舊站互動體驗的原因。

  1. 載入 jQuery 與 mybox.js。
  2. 呼叫 $.mybox() 傳入 message 與需要的設定。
  3. 在需要時使用 $.unmybox() 關閉視窗。
<script src="//3wa.tw/inc/javascript/jquery/jquery-3.7.1.min.js"></script>
<script src="//3wa.tw/inc/javascript/jquery/mybox/mybox-lastest.min.js"></script>

<script>
$.mybox({
  message: "<div>Hello mybox.js</div>",
  css: {
    'padding': '24px',
    'background-color': '#0b1420',
    'color': '#ecf6ff'
  }
});
</script>
核心 API

三個主要方法,加上一組實用參數

mybox.js 的 API 設計相當直接,對於需要快速導入彈窗互動的舊站與工具站來說很友善。

$.mybox(options)

開啟彈窗主函式,可帶入內容、樣式、事件與背景互動設定。

$.unmybox()

關閉目前的 mybox 視窗,適合綁在按鈕、流程結束或 callback。

$.mybox_isOpen()

檢查目前是否有視窗開啟,回傳 true 或 false。

is_background_touch_close

是否允許點擊背景時直接關閉視窗。

true / false

message

視窗內容,可直接放文字、HTML、圖片、DOM 內容或後續載入的結果。

$('#template').html()

css

直接覆寫彈窗容器樣式,快速調整寬度、背景、字級與邊框。

{'padding':'32px','background-color':'#101826'}

beforeBlock

視窗顯示前執行,可用來記錄狀態或顯示前置提示。

function(){ console.log('before'); }

onBlock

視窗完成顯示後執行,適合做聚焦、動畫或事件初始化。

function(){ console.log('opened'); }

unBlock

視窗關閉後執行,適合清理狀態或串接後續流程。

function(){ console.log('closed'); }

本頁 mybox 樣式參考

這是本頁用來開啟 mybox 時的預設 style 設定,想快速做出接近本頁視覺時可以直接參考。

css: $.extend({
  'padding': '0',
  'border': '1px solid rgba(106,214,255,0.28)',
  'background-color': '#0d1724',
  'color': '#ecf6ff',
  'border-radius': '24px',
  'box-shadow': '0 30px 90px rgba(0,0,0,.45)'
}, css || {})
應用情境

不只是彈窗,還是把內容重新包裝的方式

同一套 API 可以覆蓋提示、互動流程、媒體展示與臨時表單,大幅減少你在不同元件之間切換的成本。

通知與提醒

用一致的視窗體驗管理內容,讓流程更集中,也讓設計語言更一致。

產品介紹與燈箱展示

用一致的視窗體驗管理內容,讓流程更集中,也讓設計語言更一致。

操作確認流程

用一致的視窗體驗管理內容,讓流程更集中,也讓設計語言更一致。

表單與資料收集

用一致的視窗體驗管理內容,讓流程更集中,也讓設計語言更一致。

AJAX 內容載入

用一致的視窗體驗管理內容,讓流程更集中,也讓設計語言更一致。

圖片與多媒體預覽

用一致的視窗體驗管理內容,讓流程更集中,也讓設計語言更一致。

互動範例

從基本用法到實戰情境,一次看完整

這裡把 mybox.js 重新整理成可直接理解的 demo 群組。每張卡片都包含情境說明、觸發按鈕與對應程式碼。

基礎用法

基礎用法

基本文字視窗

最小可用範例,只需要 message 就能立即打開提示內容。

$.mybox({
  message: "<div class='demo-message'>Hello mybox.js</div>"
});
基礎用法

自訂樣式視窗

直接使用 css 參數客製背景、邊框、字級與留白。

$.mybox({
  message: "<h3>Custom Style</h3><p>Use css to shape the modal.</p>",
  css: {
    'padding': '36px',
    'border': '1px solid #4ad1ff',
    'background-color': '#09131f',
    'color': '#eaf7ff'
  }
});
基礎用法

背景可點擊關閉

當使用者點擊背景區塊時,視窗會自動關閉。

$.mybox({
  is_background_touch_close: true,
  message: "<div>Tap the dark background to close.</div>"
});
基礎用法

開關狀態檢查

搭配 $.mybox_isOpen() 與 $.unmybox() 做流程控制。

if ($.mybox_isOpen()) {
  $.unmybox();
} else {
  $.mybox({
    message: "<div>mybox is now open.</div>"
  });
}

實戰情境

實戰情境

產品介紹卡

用圖片、標題、文字與 CTA 組合出帶品牌感的介紹視窗。

$.mybox({
  message: $("#demo-template-product-2077").html(),
  css: {
    'max-width': '640px',
    'padding': '0',
    'background-color': '#0d1522'
  }
});
實戰情境

通知訊息框

適合成功訊息、提醒通知或流程完成提示。

$.mybox({
  message: $("#demo-template-notice").html(),
  css: {
    'max-width': '420px',
    'padding': '0',
    'background-color': '#0e1712'
  }
});
實戰情境

確認操作框

展示確認與取消按鈕,適合刪除或提交前再次確認。

$.mybox({
  message: $("#demo-template-confirm").html(),
  css: {
    'max-width': '460px',
    'padding': '0',
    'background-color': '#181112'
  }
});
實戰情境

AJAX 載入內容

先開啟 loading 狀態,再把遠端或延遲載入的內容放進視窗。

$.mybox({
  message: "<div class='loading'>Loading...</div>"
});
setTimeout(function () {
  $("div[id^='mybox_div_']").last().html($("#demo-template-ajax").html());
  $.mybox_center();
}, 600);

進階展示

進階展示

圖片預覽燈箱

拿來做品牌圖、截圖或作品集大圖預覽都很直覺。

$.mybox({
  is_background_touch_close: true,
  message: $("#demo-template-image").html(),
  css: {
    'padding': '0',
    'background-color': '#05070b'
  }
});
進階展示

表單視窗

把聯絡表單、登入表單或快速輸入流程包進同一個互動層。

$.mybox({
  message: $("#demo-template-form").html(),
  css: {
    'max-width': '540px',
    'padding': '0',
    'background-color': '#0e1320'
  }
});

進階操作

進階操作

抓取當前 mybox 並更新內容

示範如何用 $("div[id^='mybox_div']") 取得目前開啟的視窗,並直接更新裡面的 HTML。

$.mybox({
  message: $("#demo-template-current-box").html()
});
$("div[id^='mybox_div'] [data-demo-action='replace-box']").off().click(function () {
  $("div[id^='mybox_div']").html("<div class='p-4'>Content Updated</div>");
  $.mybox_center();
});
進階操作

右上角圖片關閉鈕

示範在右上角放一張圖片當作關閉按鈕,並透過 reqc selector 綁定 click 事件。

$.mybox({
  message: $("#demo-template-image-close").html()
});
$("div[id^='mybox_div'] img[reqc='imgXClose']").off().click(function () {
  $.unmybox();
});
進階操作

dialogMyBoxOn / Off 偷懶寫法

如果覺得每次都寫 $.mybox() 太麻煩,也可以直接用 dialogMyBoxOn、dialogMyBoxOff 做簡化包裝。

dialogMyBoxOn($("#demo-template-dialog-shortcut").html(), true, function () {
  $("div[id^='mybox_div'] [data-demo-action='dialog-close']").off().click(function () {
    dialogMyBoxOff();
  });
});
下載資訊

保留原始下載入口,整理成更清楚的資訊區

你可以直接使用既有版本,也能前往 Demo 與 GitHub 了解更多背景資訊。

mybox-0.12.js

直接下載對應版本的 mybox.js 檔案。

addc39155cf4e53d0cb1bfdbfbd98ae6

mybox-0.12.min.js

直接下載對應版本的 mybox.js 檔案。

1712246b9e828403dda3bf1f68d0ad08

mybox-lastest.min.js

直接下載對應版本的 mybox.js 檔案。

1712246b9e828403dda3bf1f68d0ad08

專案資訊

推薦用途

如果你正在維護一個已經上線的網站,卻想快速補上介紹視窗、提醒視窗、流程確認或內容燈箱,mybox.js 會是一個相當省力的選擇。

ChangeLog

版本紀錄

保留原本的版本更新資訊,讓使用者仍能快速查看歷史修正與功能補強。

0.12 / 2018-01-12

Fix fullscreen scrollTop position. Fix redefined beforeBlock, onBlock, unBlock event issue.

0.11 / 2017-03-13

Upgrade for jQuery 3.2.1 support. Fix dom.size() to dom.length.

0.10 / 2017-03-13

Fix scroll position.

0.9 / 2016-12-24

Limit mybox width and height the window screen size 90%.

0.8 / 2015-11-20

Fix window scrollTop after unmybox when is_background_touch_close equals true.

0.7 / 2015-08-02

Fix window scrollTop after unmybox.

0.6 / 2015-07-02

Remove jQuery version check in setup.

0.5 / 2015-06-30

Add $.mybox_isOpen().

0.4 / 2015-06-23

Fixed contents.

0.3 / 2014-11-27

Fixed screen scroll issue.

0.2 / 2014-08-27

Fixed screen center issue.

0.1 / 2014-02-20

Building on first time.

mybox 品牌圖片
mybox.js 輕量、直接、適合快速導入的互動彈窗元件
mybox 品牌圖片
mybox 展示圖片一
mybox 展示圖片二
mybox 展示圖片三
mybox 展示圖片四
mybox.js CYBER UI / MODAL / GALLERY MODE
OK

設定已完成

這種結構很適合用來呈現成功通知、儲存完成或流程結束的提示。

確認操作

確定要刪除此資料嗎?

這個範例模擬在刪除、送出或覆蓋資料前,先讓使用者再確認一次。

內容載入中

先顯示 loading 狀態,再把結果塞進同一個視窗。

AJAX

遠端內容已載入

實務上可以把這段替換成真實的 AJAX response。這裡用延遲模擬遠端內容回來後再更新視窗。

適用情境: 說明文件片段、商品資訊、編輯表單、快速檢視內容
表單視窗

快速收集一段訊息

這個範例示範如何把較完整的表單流程包進 mybox,讓聯絡、報名、詢問或快速回報都能集中在同一個互動層。

提示:這裡可以替換成登入、聯絡、回報、報名或設定表單。

這個範例包含

  • 更清楚的標題與說明層次
  • 帶標籤的欄位群組,而不是只有 placeholder
  • 右側資訊面板,可放流程說明或提交須知
  • 保留 mybox 輕量整合的優點,同時讓表單更像產品化元件
抓取目前視窗

可以直接抓到當前的 mybox 內容容器

按下下方按鈕後,會用 $("div[id^='mybox_div']") 取得目前開啟的視窗,再直接替換裡面的內容。

示範重點: 適合 loading 完成後更新內容、切換畫面步驟,或在同一個 popup 裡換下一段 HTML。
內容已更新

這就是直接改當前 mybox 內容的效果

當你抓到 $("div[id^='mybox_div']") 之後,就可以直接改裡面的 HTML,最後再呼叫 $.mybox_center() 重新置中。

$("div[id^='mybox_div']").html("<div>New Content</div>");
$.mybox_center();
關閉 圖片關閉鈕

右上角也可以放圖片當作 close button

把圖片放進 mybox 內容後,再用 $("div[id^='mybox_div'] img[reqc='imgXClose']") 綁 click,就能做出自訂關閉按鈕。

$("div[id^='mybox_div'] img[reqc='imgXClose']").off().click(function () {
  $.unmybox();
});
偷懶寫法

dialogMyBoxOn / dialogMyBoxOff 可以更省事

如果你只是想快速開一個通用視窗,不想每次都重寫 $.mybox() 的參數,這兩個 helper 會很順手。

適合時機: 快速提醒、簡單說明、內部工具頁、原型頁面,或你已經有固定風格時。
dialogMyBoxOn($("#demo-template-dialog-shortcut").html(), true, function () {
  $("div[id^='mybox_div'] [data-demo-action='dialog-close']").off().click(function () {
    dialogMyBoxOff();
  });
});
function dialogMyBoxOn(message, isTouchOutSideClose, functionAction) {
  $.mybox({
    is_background_touch_close: isTouchOutSideClose,
    message: message,
    css: {
      border: '2px solid #fff',
      backgroundColor: '#000',
      color: '#fff',
      padding: '15px'
    },
    onBlock: function () {
      functionAction();
    }
  });
}

function dialogMyBoxOff() {
  $.unmybox();
}