應用程式 / 核心

當我們初始化應用程式時,可以使用 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應用程式主題。可以是 iosmdauto。如果是 auto,它會對 iOS 裝置使用 iOS 主題,對所有其他裝置使用 MD 主題。
colors物件應用程式顏色。必須是一個物件,其中包含強制性的 primary 鍵和其他你可能需要的顏色。對於在此處指定的顏色,應用程式將使用 Material You 顏色調色盤產生動態 CSS 樣式。預設為
{
  primary: '#007aff',
  red: '#ff3b30',
  green: '#4cd964',
  blue: '#2196f3',
  pink: '#ff2d55',
  yellow: '#ffcc00',
  orange: '#ff9500',
  purple: '#9c27b0',
  deeppurple: '#673ab7',
  lightblue: '#5ac8fa',
  teal: '#009688',
  lime: '#cddc39',
  deeporange: '#ff6b22',
  white: '#ffffff',
  black: '#000000',
}
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物件{}

包含事件處理常式的物件。例如

var app = new Framework7({
  on: {
    init: function () {
      console.log('App initialized');
    },
    pageInit: function () {
      console.log('Page initialized');
    },
  }
})
點擊模組參數
clicks物件包含與點擊模組相關參數的物件
var app = new Framework7({
  clicks: {
    externalLinks: '.external',
  }
})
{
externalLinks字串'.external'連結的 CSS 選擇器,這些連結應視為外部連結,且不應由 Framework7 處理。例如,這樣的 '.external' 值將與 <a href="somepage.html" class="external">(具有類別「external」)等連結相符
}
觸控模組參數
touch物件包含與觸控模組相關參數的物件
var app = new Framework7({
  touch: {
    tapHold: true,
  }
})
{
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物件包含服務工作人員模組參數的物件
var app = new Framework7({
  serviceWorker: {
    path: './service-worker.js',
    scope: '/',
  }
})
{
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包含目前應用程式主題的字串。可以是 mdios
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)如果 modetrue,則啟用深色模式。如果 modefalse,則停用深色模式。如果 modeauto,則根據使用者系統色彩主題偏好自動啟用深色主題。
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);
}