アプリ / コア
アプリを初期化する際には、new Framework7
コンストラクタを使用し、アプリのメインパラメータを含むオブジェクトを渡します。
var app = new Framework7({
// アプリID
id: 'com.myapp.test',
// スワイプパネルの有効化
panel: {
swipe: true,
},
// ... その他のパラメータ
});
このコンストラクタは、メインアプリのFramework7インスタンスを返します。
アプリのパラメータ
利用可能なパラメータの一覧を見てみましょう。
Parameter | Type | Default | Description |
---|---|---|---|
el | string | body | アプリのルート要素。メインアプリのレイアウトが <body> の直接の子でない場合は、ここでルート要素を指定する必要があります。 |
component | Router Component | パスされた メインアプリコンポーネントからアプリのレイアウトをロードします。Framework7 Coreバージョンのみ | |
componentUrl | string Component | XHRで読み込むシングルファイルメインアプリコンポーネントへのパスを指定します。Framework7 Coreバージョンのみ | |
id | string | io.framework7.testapp | アプリのバンドルID。 |
name | string | Framework7 | アプリの名前。例えば、Dialogコンポーネントのデフォルトタイトルとして、他のコンポーネントで使用することができます。 |
version | string | 1.0.0 | アプリのバージョン。他のコンポーネントでも使用可能。 |
theme | string | auto | アプリのテーマ。テーマは ios , md , aurora , auto のいずれかです。auto`の場合、iOSデバイスにはiOSテーマが、Electron環境で動作するデスクトップデバイスにはAuroraテーマが、その他のデバイスにはMDテーマが使われます。 |
language | string | アプリの言語。他のコンポーネントで使用することができます。デフォルトでは、現在のブラウザ/ウェブビューの言語(つまり、navigator.language )と同じです。 | |
userAgent | string | ユーザーエージェントの文字列。サーバーサイド環境で使用する場合、デバイスを正しく検出するために必要です。 | |
routes | array | [] | すべてのビューへのデフォルトルートを持つ配列です。 |
lazyModulesPath | string | Framework7の遅延コンポーネントへのパスです。ブラウザモジュールで遅延モジュールを使用する際に必要です。 | |
autoDarkTheme | boolean | false | ユーザーシステムの配色設定に基づいて、自動的にダークテーマを有効にします。この機能のサポートは、(prefers-color-scheme) media query supportに基づいています。 |
init | boolean | true | デフォルトでは、new Framework7() を呼び出すと、Framework7が自動的に初期化されます。この動作を防ぎたい場合は、このオプションで無効にして、必要なときにapp.init() で手動で初期化することができます。 |
initOnDeviceReady | boolean | true | 自動初期化が init: true パラメータで有効になっていて、アプリが cordova 環境で動作している場合は、deviceready イベントで初期化されます。 |
iosTranslucentBars | boolean | true | iOS テーマのナビゲーションバーで半透明効果 (背景をぼかす) を有効にする (iOS デバイスの場合) |
iosTranslucentModals | boolean | true | iOS テーマでモーダル (Dialog, Popover, Actions) の半透明効果 (背景のぼかし) を有効にします (iOS デバイスの場合)。 |
on | object | {} | イベントハンドラーを持つオブジェクト。例えば、以下のようなものです。
|
Clicks Module Parameters | |||
clicks | object | clicks-module 関連のパラメータを持つオブジェクト。
| |
{ | |||
externalLinks | string | '.external' | 外部リンクとして扱われ、Framework7で処理されるべきでないリンクのためのCSSセレクタ。例えば、`(クラスが "external")のようなリンクには、'.external'の値がマッチします。 |
} | |||
Touch Module Parameters | |||
touch | object | タッチモジュール関連のパラメータを持つオブジェクトです。
| |
{ | |||
touchClicksDistanceThreshold | number | 5 | 短いスワイプを防ぐための距離のしきい値(px単位)。つまり、タップ/移動距離がこの値よりも大きい場合、「クリック」はトリガーされません。(fastClicksが無効の場合、タッチイベントにのみ使用されます)。 |
disableContextMenu | boolean | false | コンテキストメニューを無効にするには、trueを設定します(右クリックまたはタップ&ホールドで)。 |
tapHold | boolean | false | タップホールドを有効にする |
tapHoldDelay | number | 750 | タップホールドイベントがターゲット要素で発生するまでのユーザーのタップ保持時間(ms)を決定します。 |
tapHoldPreventClicks | boolean | true | 有効(デフォルト)にすると、タップホールドイベントの後、クリックイベントは発生しません。 |
activeState | boolean | true | 有効にすると、現在タッチされている(:active)要素に "active-state "クラスが追加されます。 |
activeStateElements | string | 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 "が有効な要素のCSSセレクタには、適切なactiveクラスが追加されます。 |
activeStateOnMouseMove | boolean | false | 有効にすると、マウスの移動時に "active state" を維持します。 |
iosTouchRipple | boolean | false | iOSテーマのタッチリップル効果を有効にする |
mdTouchRipple | boolean | true | MDテーマのタッチリップル効果を有効にする |
auroraTouchRipple | boolean | false | Auroraテーマのタッチリップル効果を有効にする |
touchRippleElements | string | .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 | string | .ripple-inset, .icon-only, .searchbar-disable-button, .input-clear-button, .notification-close-button, .md .navbar .link.back | クリック時にインセットのタッチリップル効果を適用する要素のCSSセレクタ |
} | |||
serviceWorker | object | サービスワーカーモジュールのパラメータを持つオブジェクトです。
| |
{ | |||
path | string | サービスワーカーファイルへのパス | |
scope | string | サービスワーカーのスコープへのパス | |
} |
これらは、アプリコアモジュールのデフォルトのアプリパラメータです。
JavaScript APIを持つ多くのコンポーネントは、コンポーネントという名前のプロパティを使って、このパラメータのリストを拡張することができます。例えば、Panelコンポーネントは、アプリのパラメータを panel
プロパティで拡張し、Panel 固有のパラメータを受け入れます。
例
var app = new Framework7({
id: 'com.myapp.test',
// Panelコンポーネントによって拡張されます。
panel: {
swipe: true,
visibleBreakpoint: 1024,
},
// ダイアログコンポーネントによって拡張されます。
dialog: {
title: 'My App',
},
// Statusbarコンポーネントによって拡張されます。
statusbar: {
iosOverlaysWebview: true,
},
});
アプリのメソッドとプロパティ
返されたFramework7のインスタンス app
には、たくさんの便利なプロパティやメソッドが含まれています。
Properties | |
---|---|
app.id | パラメータで渡されるアプリID |
app.name | パラメーターで渡されるアプリの名前 |
app.version | アプリのバージョン |
app.routes | アプリのルート |
app.language | アプリの言語 |
app.el | アプリルートの HTML 要素 |
app.$el | アプリのルートHTML要素を持つDom7インスタンス |
app.rtl | アプリがRTLレイアウトであるかどうかを示すBooleanプロパティ |
app.theme | 現在のアプリのテーマを表す文字列です。md、 ios、 aurora`のいずれかです。 |
app.darkTheme | ダークテーマが有効であるかどうかを示すブール値のプロパティです。このプロパティは autoDarkTheme が有効な場合にのみ影響を与えます。 |
app.width | アプリの幅 (px) |
app.height | アプリの高さ (px) |
app.left | アプリの左端のオフセット (px) |
app.top | App top offset in px |
app.initialized | アプリが初期化されているかどうかを示すブール値のプロパティ |
app.$ | Dom7エイリアス |
app.params | アプリのパラメータ |
app.support | サポートされている機能に関するプロパティを持つオブジェクトです。サポートのユーティリティーセクションを確認してください。 |
app.device | デバイスに関するプロパティを持つオブジェクト。Deviceのユーティリティーセクションをご覧ください。 |
app.utils | いくつかの便利なユーティリティを持つオブジェクトです。Utilsセクションをご覧ください。 |
app.request | XHR リクエストを処理するメソッドが含まれています。Requestのユーティリティーセクションをご覧ください。 |
app.serviceWorker.registration | 登録されたサービスワーカーの配列 |
app.online | アプリの接続状態を示すブール値のプロパティです。(オンラインの場合は「true」となります。) |
Methods | |
app.enableAutoDarkTheme() | ダークテーマの自動検出を有効にする |
app.disableAutoDarkTheme() | 暗いテーマの自動検出を無効にする |
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 固有のプロパティやメソッドを受け入れます。
例
// パネルを開く
app.panel.open('left');
// ステータスバーを隠す
app.statusbar.hide();
アプリのイベント
アプリのインスタンスは、以下のコアイベントを発行します。
Event | Arguments | Description |
---|---|---|
init | イベントはアプリの初期化時に発生します。自動的に new Framework7() の後、または自動初期化を無効にした場合は app.init() の後に発生します。 | |
resize | イベントはアプリのリサイズ(ウィンドウのリサイズ)時に発生します。 | |
orientationchange | アプリの向きが変わったとき(ウィンドウの向きが変わったとき)にイベントが発生します。 | |
click | (event) | アプリのクリックでイベントが発生します |
touchstart:active | (event) | touch start (mousedown) イベントをアクティブリスナーとして追加するとイベントが発生します(デフォルトでは発生しないようにすることも可能です)。 |
touchmove:active | (event) | アクティブリスナーとして追加されたタッチ移動(mousemove)イベントでイベントが発生します(デフォルトでは防止できない可能性があります |
touchend:active | (event) | イベントは、アクティブリスナーとして追加されたタッチ終了(mouseup)イベントで発生します(デフォルトでは防止できない可能性があります |
touchstart:passive | (event) | パッシブリスナーとして追加されたタッチ開始(mousedown)イベントでイベントが発生する(デフォルトでは防止できない) |
touchmove:passive | (event) | イベントはパッシブリスナーとして追加されます(デフォルトでは防ぐことができません)。 |
touchend:passive | (event) | イベントは、パッシブリスナーとして追加されたタッチ終了(mouseup)イベントで発生します(デフォルトでは防止できません |
serviceWorkerRegisterSuccess | (registration) | サービスワーカーの登録が完了するとイベントが発生する |
serviceWorkerRegisterError | (error) | サービスワーカーの登録が失敗したときにイベントが発生する |
serviceWorkerUnregisterSuccess | (registration) | サービスワーカーの登録解除が成功したときにイベントが発生する |
serviceWorkerUnregisterError | (registration, error) | サービスワーカーの登録解除が失敗したときにイベントが発生します |
online | アプリがオンラインになったときにイベントが発生する | |
offline | アプリがオフラインになるとイベントが発生する | |
connection | (isOnline) | ネットワークの状態が変化するとイベントが発生する |
darkThemeChange | (isDarkTheme) | デバイスの優先カラースキームが変更されたときにイベントが発生します。autoDarkTheme`が有効な場合のみ効果があります。 |
また、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('darkThemeChange', function (isDark) {
if (isDark) {
console.log('color scheme changed to Dark')
} else {
console.log('color scheme changed to Light')
}
});
CSS 変数
:root {
--f7-theme-color: #007aff;
--f7-theme-color-rgb: 0, 122, 255;
--f7-theme-color-shade: #0066d6;
--f7-theme-color-tint: #298fff;
--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;
--f7-device-pixel-ratio: 1;
}
@supports (left: env(safe-area-inset-left)) {
:root {
--f7-safe-area-top: env(safe-area-inset-top);
--f7-safe-area-bottom: env(safe-area-inset-bottom);
}
:root .ios-left-edge,
:root .ios-edges,
:root .safe-area-left,
:root .safe-areas,
:root .popup,
:root .sheet-modal,
:root .panel-left {
--f7-safe-area-left: env(safe-area-inset-left);
--f7-safe-area-outer-left: env(safe-area-inset-left);
}
:root .ios-right-edge,
:root .ios-edges,
:root .safe-area-right,
:root .safe-areas,
:root .popup,
:root .sheet-modal,
:root .panel-right {
--f7-safe-area-right: env(safe-area-inset-right);
--f7-safe-area-outer-right: env(safe-area-inset-right);
}
:root .no-safe-areas,
:root .no-safe-area-left,
:root .no-ios-edges,
:root .no-ios-left-edge {
--f7-safe-area-left: 0px;
--f7-safe-area-outer-left: 0px;
}
:root .no-safe-areas,
:root .no-safe-area-right,
:root .no-ios-edges,
:root .no-ios-right-edge {
--f7-safe-area-right: 0px;
--f7-safe-area-outer-right: 0px;
}
}
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 2dppx) {
:root {
--f7-device-pixel-ratio: 2;
}
}
@media (-webkit-min-device-pixel-ratio: 3), (min-resolution: 3dppx) {
:root {
--f7-device-pixel-ratio: 3;
}
}
/*====================
Fonts & Bars
==================== */
:root {
--f7-font-size: 14px;
/*
--f7-bars-link-color: var(--f7-theme-color);
*/
--f7-bars-bg-image: none;
--f7-bars-translucent-opacity: 0.8;
--f7-bars-translucent-blur: 20px;
--f7-bars-shadow-bottom-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.25) 0%, rgba(0, 0, 0, 0.08) 40%, rgba(0, 0, 0, 0.04) 50%, rgba(0, 0, 0, 0) 90%, rgba(0, 0, 0, 0) 100%);
--f7-bars-shadow-top-image: linear-gradient(to top, rgba(0, 0, 0, 0.25) 0%, rgba(0, 0, 0, 0.08) 40%, rgba(0, 0, 0, 0.04) 50%, rgba(0, 0, 0, 0) 90%, rgba(0, 0, 0, 0) 100%);
--f7-bars-text-color: #000;
--f7-bars-bg-color: #f7f7f8;
--f7-bars-bg-color-rgb: 247, 247, 248;
}
:root .theme-dark,
:root.theme-dark {
--f7-bars-text-color: #fff;
}
.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-text-color: #000;
--f7-bars-border-color: rgba(0, 0, 0, 0.25);
}
.ios .theme-dark,
.ios.theme-dark {
--f7-text-color: #fff;
--f7-bars-bg-color: #121212;
--f7-bars-bg-color-rgb: 19, 19, 19;
--f7-bars-border-color: rgba(255, 255, 255, 0.1);
}
.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 .theme-dark,
.md.theme-dark {
--f7-text-color: rgba(255, 255, 255, 0.87);
--f7-bars-bg-color: #202020;
}
.aurora {
--f7-font-family: -apple-system, system-ui, Helvetica, Arial, sans-serif;
--f7-line-height: 1.5;
--f7-text-color: #000;
--f7-bars-border-color: rgba(0, 0, 0, 0.2);
}
.aurora .theme-dark,
.aurora.theme-dark {
--f7-text-color: #fff;
--f7-bars-bg-color: #202020;
--f7-bars-border-color: rgba(255, 255, 255, 0.1);
}