應用程式 / 核心
當我們初始化應用程式時,可以使用 new Framework7
建構函式,並傳遞包含主要應用程式參數的物件
var app = new Framework7({
// Enable swipe panel
panel: {
swipe: true,
},
// ... other parameters
});
此建構函式會傳回主要的 Framework7 應用程式執行個體。
應用程式參數
讓我們來看看可用的參數清單
參數 | 類型 | 預設值 | 說明 |
---|---|---|---|
el | 字串 | body | 應用程式根元素。如果你的主要應用程式配置並非 <body> 的直接子元素,則需要在此處指定根元素 |
component | 路由元件 | 從傳遞的 主要應用程式元件 載入應用程式配置。僅適用於 Framework7 Core 版本 | |
componentUrl | 字串 元件 | 要透過 XHR 載入的 主要應用程式元件 的單一檔案路徑。僅適用於 Framework7 Core 版本 | |
name | 字串 | Framework7 | 應用程式名稱。可供其他元件使用,例如作為 對話框 元件的預設標題。 |
theme | 字串 | auto | 應用程式主題。可以是 ios 、md 或 auto 。如果是 auto ,它會對 iOS 裝置使用 iOS 主題,對所有其他裝置使用 MD 主題。 |
colors | 物件 | 應用程式顏色。必須是一個物件,其中包含強制性的 primary 鍵和其他你可能需要的顏色。對於在此處指定的顏色,應用程式將使用 Material You 顏色調色盤產生動態 CSS 樣式。預設為
| |
userAgent | 字串 | 使用者代理字串。在伺服器端環境中使用時需要,以進行正確的裝置偵測。 | |
routes | 陣列 | [] | 包含所有檢視預設路由的陣列。 |
lazyModulesPath | 字串 | Framework7 延遲載入元件的路徑。需要使用 延遲載入模組 搭配瀏覽器模組。 | |
darkMode | 布林值 字串 | 未定義 | 如果設定為 true ,則啟用深色模式。如果設定為 false ,則停用深色模式。如果設定為 auto ,則會根據使用者的系統顏色配置偏好自動啟用深色主題。此功能支援基於 (prefers-color-scheme) 媒體查詢支援。 |
初始化 | 布林值 | true | 預設情況下,當您呼叫 new Framework7() 時,Framework7 將自動初始化。如果您想防止這種行為,可以使用此選項將其停用,然後在需要時使用 app.init() 手動初始化。 |
initOnDeviceReady | 布林值 | true | 如果使用 init: true 參數啟用自動初始化,並且應用程式在 cordova 環境下執行,則它將在 deviceready 事件中初始化。 |
iosTranslucentBars | 布林值 | true | 在 iOS 主題的導覽列上啟用半透明效果(模糊背景)(在 iOS 裝置上) |
iosTranslucentModals | 布林值 | true | 在 iOS 主題的對話方塊(對話框、彈出視窗、動作)上啟用半透明效果(模糊背景)(在 iOS 裝置上) |
on | 物件 | {} | 包含事件處理常式的物件。例如
|
點擊模組參數 | |||
clicks | 物件 | 包含與點擊模組相關參數的物件
| |
{ | |||
externalLinks | 字串 | '.external' | 連結的 CSS 選擇器,這些連結應視為外部連結,且不應由 Framework7 處理。例如,這樣的 '.external' 值將與 <a href="somepage.html" class="external"> (具有類別「external」)等連結相符 |
} | |||
觸控模組參數 | |||
touch | 物件 | 包含與觸控模組相關參數的物件
| |
{ | |||
touchClicksDistanceThreshold | 數字 | 5 | 距離閾值(以像素為單位),用於防止短距離滑動。因此,如果輕觸/移動距離大於此值,則不會觸發「點擊」。 |
disableContextMenu | 布林值 | false | 設為 true 以停用內容選單(透過右鍵按一下或輕觸並按住) |
tapHold | 布林值 | false | 啟用輕觸並按住 |
tapHoldDelay | 數字 | 750 | 決定使用者必須按住輕觸多久(以毫秒為單位),才會在目標元素上觸發輕觸並按住事件 |
tapHoldPreventClicks | 布林值 | true | 啟用時(預設),則在輕觸並按住事件後不會觸發點擊事件 |
activeState | 布林值 | true | 啟用時,應用程式會將「active-state」類別新增到目前觸控的(:active)元素。 |
activeStateElements | 字串 | a、button、label、span、.actions-button、.stepper-button、.stepper-button-plus、.stepper-button-minus、.card-expandable、.menu-item、.link、.item-link、.accordion-item-toggle | 啟用 activeState 將新增適當的 active 類別的元素的 CSS 選擇器 |
activeStateOnMouseMove | 布林值 | false | 啟用時,滑鼠移動時會保持「活動狀態」 |
iosTouchRipple | 布林值 | false | 為 iOS 主題啟用觸控漣漪效果 |
mdTouchRipple | 布林值 | true | 為 MD 主題啟用觸控漣漪效果 |
touchRippleElements | 字串 | .ripple, .link, .item-link, .list-button, .links-list a, .button, button, .input-clear-button, .dialog-button, .tab-link, .item-radio, .item-checkbox, .actions-button, .searchbar-disable-button, .fab a, .checkbox, .radio, .data-table .sortable-cell:not(.input-cell), .notification-close-button, .stepper-button, .stepper-button-minus, .stepper-button-plus, .menu-item-content, .list.accordion-list .accordion-item-toggle | 點擊時套用觸控漣漪效果的元素 CSS 選擇器 |
touchRippleInsetElements | 字串 | .ripple-inset, .icon-only, .searchbar-disable-button, .input-clear-button, .notification-close-button, .md .navbar .link.back | 點擊時套用內嵌觸控漣漪效果的元素 CSS 選擇器 |
} | |||
serviceWorker | 物件 | 包含服務工作人員模組參數的物件
| |
{ | |||
path | 字串 | 服務工作人員檔案路徑 | |
scope | 字串 | 服務工作人員範圍路徑 | |
} |
這些是應用程式核心模組的預設應用程式參數。
大多數具有 JavaScript API 的元件可能會使用命名為 component 的屬性來擴充此參數清單。例如 Panel 元件使用 panel
屬性來擴充應用程式參數,該屬性接受 Panel 特定參數。
範例
var app = new Framework7({
// Extended by Panel component:
panel: {
swipe: true,
visibleBreakpoint: 1024,
},
// Extended by Dialog component:
dialog: {
title: 'My App',
},
// Extended by Statusbar component:
statusbar: {
iosOverlaysWebview: true,
},
});
應用程式方法和屬性
傳回的 Framework7 執行個體 app
包含許多有用的屬性和方法
屬性 | |
---|---|
app.name | 參數中傳遞的應用程式名稱 |
app.routes | 應用程式路由 |
app.el | 應用程式根 HTML 元素 |
app.$el | 包含應用程式根 HTML 元素的 Dom7 執行個體 |
app.rtl | 布林值屬性,表示應用程式是否為 RTL 排版 |
app.theme | 包含目前應用程式主題的字串。可以是 md 、ios |
app.darkMode | 布林值屬性,表示深色主題是否已啟用。 |
app.width | 應用程式寬度,單位為 px |
app.height | 應用程式高度,單位為 px |
app.left | 應用程式左邊距,單位為 px |
app.top | 應用程式上邊距,單位為 px |
app.initialized | 布林值屬性,表示應用程式是否已初始化 |
app.$ | Dom7 別名 |
app.params | 應用程式參數 |
app.support | 具有支援功能屬性的物件。請查看 支援 工具部分 |
app.device | 具有裝置屬性的物件。請查看 裝置 工具部分 |
app.utils | 具有某些有用工具的物件。請查看 工具 部分 |
app.serviceWorker.container | 服務工作人員容器 (navigator.serviceWorker ) |
app.serviceWorker.registrations | 已註冊服務工作人員的陣列 |
app.online | 布林屬性指示應用程式連線狀態。(如果為線上則為 true ) |
方法 | |
app.setColorTheme(color) | 設定主要色彩主題。color 必須為 HEX 色彩,例如 #ff0000 |
app.setDarkMode(mode) | 如果 mode 為 true ,則啟用深色模式。如果 mode 為 false ,則停用深色模式。如果 mode 為 auto ,則根據使用者系統色彩主題偏好自動啟用深色主題。 |
app.on(event, handler) | 新增事件處理常式 |
app.once(event, handler) | 新增事件處理常式,在觸發後將會移除 |
app.off(event, handler) | 移除事件處理常式 |
app.off(event) | 移除指定事件的所有處理常式 |
app.emit(event, ...args) | 在執行個體上觸發事件 |
app.init() | 初始化應用程式。如果您使用 init: false 參數停用自動初始化 |
app.serviceWorker.register(path, scope) | 註冊服務工作人員。它會傳回承諾,並會使用 ServiceWorkerRegistration 來解決 |
app.serviceWorker.unregister(registration) | 取消註冊服務工作人員。它會傳回承諾,並會在服務工作人員取消註冊時解決。 |
與應用程式參數相同,具有 JavaScript API 的大多數元件都可以使用命名為元件的屬性來延伸此屬性清單。例如,Panel 元件會使用 panel
屬性來延伸應用程式執行個體屬性,而該屬性會接受 Panel 特定的屬性和方法。
範例
// Open panel
app.panel.open('left');
// Hide statusbar
app.statusbar.hide();
應用程式事件
應用程式執行個體會發出下列核心事件
事件 | 參數 | 說明 |
---|---|---|
初始化 | 事件會在應用程式初始化時觸發。在 new Framework7() 之後或在您停用自動初始化之後的 app.init() 之後自動觸發。 | |
resize | 事件會在應用程式調整大小 (視窗調整大小) 時觸發。 | |
orientationchange | 事件會在應用程式方向變更 (視窗方向變更) 時觸發。 | |
click | (event) | 事件會在應用程式按一下時觸發 |
touchstart:active | (event) | 事件會在觸控開始 (mousedown) 事件中觸發,並新增為 active 偵聽器 (可以防止預設) |
touchmove:active | (event) | 事件會在觸控移動 (mousemove) 事件中觸發,並新增為 active 監聽器 (有可能防止預設) |
touchend:active | (event) | 事件會在觸控結束 (mouseup) 事件中觸發,並新增為 active 監聽器 (有可能防止預設) |
touchstart:passive | (event) | 事件會在觸控開始 (mousedown) 事件中觸發,並新增為 passive 監聽器 (無法防止預設) |
touchmove:passive | (event) | 事件會在觸控移動 (mousemove) 事件中觸發,並新增為 passive 監聽器 (無法防止預設) |
touchend:passive | (event) | 事件會在觸控結束 (mouseup) 事件中觸發,並新增為 passive 監聽器 (無法防止預設) |
serviceWorkerRegisterSuccess | (registration) | 當服務工作者成功註冊時,事件會被觸發 |
serviceWorkerRegisterError | (error) | 當服務工作者註冊失敗時,事件會被觸發 |
serviceWorkerUnregisterSuccess | (registration) | 當服務工作者成功取消註冊時,事件會被觸發 |
serviceWorkerUnregisterError | (registration, error) | 當服務工作者取消註冊失敗時,事件會被觸發 |
online | 當應用程式連線時,事件會被觸發 | |
offline | 當應用程式離線時,事件會被觸發 | |
connection | (isOnline) | 當網路狀態改變時,事件會被觸發 |
darkModeChange | (isDarkTheme) | 當裝置偏好的色彩配置改變時,事件會被觸發。只有當 darkMode 參數設定為 'auto' 時才有作用 |
此外,大部分具有 JavaScript API 的元件可能會延伸這個事件清單,例如 Panel 元件也會在應用程式執行個體中觸發其他事件。
範例
app.on('panelOpen', function (panel) {
console.log('Panel ' + panel.side + ' opened');
});
app.on('connection', function (isOnline) {
if (isOnline) {
console.log('app is online now')
} else {
console.log('app is offline now')
}
});
app.on('darkModeChange', function (isDark) {
if (isDark) {
console.log('color scheme changed to Dark')
} else {
console.log('color scheme changed to Light')
}
});
CSS 變數
/*====================
Core
==================== */
:root {
--f7-safe-area-left: 0px;
--f7-safe-area-right: 0px;
--f7-safe-area-top: 0px;
--f7-safe-area-bottom: 0px;
--f7-safe-area-outer-left: 0px;
--f7-safe-area-outer-right: 0px;
@supports (left: env(safe-area-inset-left)) {
--f7-safe-area-top: env(safe-area-inset-top);
--f7-safe-area-bottom: env(safe-area-inset-bottom);
.ios-left-edge,
.ios-edges,
.safe-area-left,
.safe-areas,
.popup,
.sheet-modal,
.panel-left {
--f7-safe-area-left: env(safe-area-inset-left);
--f7-safe-area-outer-left: env(safe-area-inset-left);
}
.ios-right-edge,
.ios-edges,
.safe-area-right,
.safe-areas,
.popup,
.sheet-modal,
.panel-right {
--f7-safe-area-right: env(safe-area-inset-right);
--f7-safe-area-outer-right: env(safe-area-inset-right);
}
.no-safe-areas,
.no-safe-area-left,
.no-ios-edges,
.no-ios-left-edge {
--f7-safe-area-left: 0px;
--f7-safe-area-outer-left: 0px;
}
.no-safe-areas,
.no-safe-area-right,
.no-ios-edges,
.no-ios-right-edge {
--f7-safe-area-right: 0px;
--f7-safe-area-outer-right: 0px;
}
}
--f7-device-pixel-ratio: 1;
@media (min-resolution: 2dppx) {
--f7-device-pixel-ratio: 2;
}
@media (min-resolution: 3dppx) {
--f7-device-pixel-ratio: 3;
}
}
/*====================
Fonts & Bars
==================== */
:root {
--f7-font-size: 14px;
--f7-bars-translucent-opacity: 0.8;
--f7-bars-translucent-blur: 20px;
}
.ios {
--f7-font-family: -apple-system, SF Pro Text, SF UI Text, system-ui, Helvetica Neue, Helvetica, Arial, sans-serif;
--f7-line-height: 1.4;
/*
--f7-bars-link-color: var(--f7-theme-color);
*/
--f7-bars-text-color: #000;
--f7-text-color: #000;
--f7-bars-bg-color: #f7f7f8;
--f7-bars-bg-color-rgb: 247, 247, 248;
--f7-bars-border-color: rgba(0,0,0,0.25);
}
.ios .dark,
.ios.dark {
--f7-bars-text-color: #fff;
--f7-text-color: #fff;
--f7-bars-bg-color: #121212;
--f7-bars-bg-color-rgb: 22, 22, 22;
--f7-bars-border-color: rgba(255,255,255,0.16);
}
.md {
--f7-font-family: Roboto, system-ui, Noto, Helvetica, Arial, sans-serif;
--f7-line-height: 1.5;
--f7-bars-border-color: transparent;
--f7-text-color: #212121;
}
.md .dark,
.md.dark {
--f7-text-color: rgba(255,255,255,0.87);
}
.md,
.md .dark,
.md [class*='color-'] {
--f7-bars-link-color: var(--f7-md-on-surface);
--f7-bars-bg-color: var(--f7-md-surface-2);
--f7-bars-bg-color-rgb: var(--f7-md-surface-2-rgb);
}
/*====================
Color Themes
==================== */
.text-color-primary {
--f7-theme-color-text-color: var(--f7-theme-color);
}
.bg-color-primary {
--f7-theme-color-bg-color: var(--f7-theme-color);
}
.border-color-primary {
--f7-theme-color-border-color: var(--f7-theme-color);
}
.ripple-color-primary {
--f7-theme-color-ripple-color: rgba(var(--f7-theme-color-rgb), 0.3);
}