ページ Vue コンポーネント
Framework7 における「ページ」は、Web ページについて考えるときと同じ意味を持ちます。ページは、コンテンツを表示および操作するためのメインのコンポーネントです。
ページ Vue コンポーネントは、Framework7 のページを表します。
ページコンポーネント
以下のコンポーネントが含まれています
f7-page
- メインのページ要素f7-page-content
- 追加の内部ページコンテンツ要素
ページプロパティ
プロパティ | 型 | デフォルト | 説明 |
---|---|---|---|
<f7-page> プロパティ | |||
name | 文字列 | ページ名 | |
messages-content | 真偽値 | メッセージコンポーネントを内部で使用する場合に必要な追加スタイルを適用するために有効化します | |
page-content | 真偽値 | true | 有効にすると、内部にpage-content 要素が自動的に追加されます。タブのために複数の page-content 要素を使用する必要がある場合に無効化すると便利です |
tabs | 真偽値 | ページをタブラッパーとして使用する場合は有効にします | |
login-screen | 真偽値 | ページ内でログイン画面を使用する場合に必要な追加スタイルを適用するために有効化します | |
no-swipeback | 真偽値 | 現在のページのswipeback機能を無効にします(iOSテーマのみに影響します) | |
with-subnavbar | 真偽値 | ページ内にサブナビバーがある場合は有効にします | |
no-navbar | 真偽値 | 共通のナビバーレイアウトを使用しており、このページで共通のナビバーを非表示にする(または別のナビバーを使用する)必要がある場合は有効にします(iOSテーマのみに影響します) | |
no-toolbar | 真偽値 | 共通のツールバー/タブバーレイアウトを使用しており、このページでツールバーを非表示にする(または別のツールバーを使用する)必要がある場合は有効にします | |
hide-bars-on-scroll | 真偽値 | ページスクロールでナビバーとツールバーを非表示にします | |
hide-navbar-on-scroll | 真偽値 | ページスクロールでナビバーを非表示にします | |
hide-toolbar-on-scroll | 真偽値 | ページスクロールでツールバーを非表示にします | |
ptr | 真偽値 | プルリフレッシュを有効にします | |
ptr-distance | 数値 | プルリフレッシュのトリガー距離をカスタム設定します。デフォルト(指定されていない場合)は 44px です。 | |
ptr-preloader | 真偽値 | true | カスタムのプルリフレッシュプリローダー要素を使用する場合は無効にします |
ptr-bottom | 真偽値 | false | 下からのプルリフレッシュを有効にします |
ptr-mousewheel | 真偽値 | false | マウスホイールでプルリフレッシュを有効にします(デスクトップアプリの場合)。PTR上部でのみ動作します |
infinite | 真偽値 | 無限スクロールを有効にします | |
infinite-top | 真偽値 | ページ上部の無限スクロールを有効にします | |
infinite-distance | 数値 | 無限スクロールイベントをトリガーするためのページ下部からの距離(px単位)。デフォルト(指定されていない場合)は 50 (px) です。 | |
infinite-preloader | 真偽値 | true | カスタムの無限スクロールプリローダーを使用する場合は無効にします |
<f7-page-content> プロパティ | |||
tab | 真偽値 | page-contentをタブとして使用する場合は有効にします | |
tab-active | 真偽値 | 現在のタブがアクティブな場合に有効にします | |
ptr ptr-distance ptr-preloader ptr-bottom ptr-mousewheel infinite infinite-top infinite-distance infinite-preloader hide-bars-on-scroll hide-navbar-on-scroll hide-toolbar-on-scroll messages-content login-screen | <f7-page> プロパティと同じ |
ページイベント
イベント | 説明 |
---|---|
<f7-page> イベント | |
page:mounted | keepAlive ルートを持つページがDOMにマウント/アタッチされるとトリガーされます |
page:init | Framework7がページのコンポーネントとナビバーの初期化に必要な処理を完了するとトリガーされます |
page:reinit | すでに初期化されたページに移動した場合にトリガーされます |
page:beforein | すべての初期化が完了し、ページがビューに切り替える(アクティブ/現在の位置に移動する)準備ができたときにトリガーされます |
page:afterin | ページがビューに切り替わった後にトリガーされます |
page:beforeout | ページがビューから切り替わる直前にトリガーされます |
page:afterout | ページがビューから切り替わった後にトリガーされます |
page:beforeunmount | keepAlive ルートを持つページがDOMからアンマウント/デタッチされる直前にトリガーされます |
page:beforeremove | ページがDOMから削除される直前にトリガーされます。このイベントは、メモリを解放するために一部のイベントをデタッチしたり、プラグインを破棄する必要がある場合に非常に役立ちます。このイベントは、keepAlive ルートではトリガーされません。 |
page:tabshow | ページの親であるビューをタブとして可視になった場合にトリガーされます |
page:tabhide | ページの親であるビューをタブとして非表示になった場合にトリガーされます |
ptr:pullstart | プルリフレッシュコンテンツの移動を開始したときにトリガーされます |
ptr:pullmove | プルリフレッシュコンテンツの移動中にトリガーされます |
ptr:pullend | プルリフレッシュコンテンツを離したときにトリガーされます |
ptr:refresh | プルリフレッシュが「リフレッシュ中」状態になったときにトリガーされます |
ptr:done | プルリフレッシュが完了し、初期状態に戻った後にトリガーされます(pullToRefreshDoneメソッドの呼び出し後) |
infinite | ページスクロールが下端からの指定された(data-distance属性に指定された)距離に到達したときにトリガーされます。 |
<f7-page-content> イベント | |
tab:show | タブが可視/アクティブになったときにトリガーされます |
tab:hide | タブが非表示/非アクティブになったときにトリガーされます |
ptr:pullstart ptr:pullmove ptr:pullend ptr:refresh ptr:done infinite | <f7-page> イベントと同じ |
ページスロット
ページ Vue コンポーネント(<f7-page>
)には、カスタム要素用の追加スロットがあります
default
-page-content
プロパティが有効な場合(デフォルト)、要素は「page-content」の子として挿入されますfixed
- 要素は「page-content」の直前の「page」の直接の子として挿入されます
<f7-page>
<div slot="fixed">Fixed element</div>
<p>Page content goes here</p>
</f7-page>
<!-- Renders to: -->
<div class="page">
<div>Fixed element</div>
<div class="page-content">
<p>Page content goes here</p>
</div>
</div>
例
無限スクロール
infinite-scroll.vue
<template>
<f7-page
infinite
:infinite-distance="50"
:infinite-preloader="showPreloader"
@infinite="loadMore"
>
<f7-navbar title="Infinite Scroll"></f7-navbar>
<f7-block-title>Scroll bottom</f7-block-title>
<f7-list strong-ios outline-ios dividers-ios>
<f7-list-item
v-for="(item, index) in items"
:key="index"
:title="`Item ${item}`"
></f7-list-item>
</f7-list>
</f7-page>
</template>
<script>
import { f7Navbar, f7Page, f7BlockTitle, f7List, f7ListItem } from 'framework7-vue';
export default {
components: {
f7Navbar,
f7Page,
f7BlockTitle,
f7List,
f7ListItem,
},
data() {
return {
items: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
allowInfinite: true,
showPreloader: true,
};
},
methods: {
loadMore() {
const self = this;
if (!self.allowInfinite) return;
self.allowInfinite = false;
setTimeout(() => {
if (self.items.length >= 200) {
self.showPreloader = false;
return;
}
const itemsLength = self.items.length;
for (let i = 1; i <= 20; i += 1) {
self.items.push(itemsLength + i);
}
self.allowInfinite = true;
}, 1000);
},
},
};
</script>
プルリフレッシュ
pull-to-refresh.vue
<template>
<f7-page ptr :ptr-mousewheel="true" @ptr:refresh="loadMore">
<f7-navbar title="Pull To Refresh"></f7-navbar>
<f7-list media-list strong-ios dividers-ios outline-ios>
<f7-list-item
v-for="(item, index) in items"
:key="index"
:title="item.title"
:subtitle="item.author"
>
<template #media>
<img :src="item.cover" width="44" style="border-radius: 8px" />
</template>
</f7-list-item>
<f7-block-footer>
<p>
Just pull page down to let the magic happen.<br />Note that pull-to-refresh feature is
optimised for touch and native scrolling so it may not work on desktop browser.
</p>
</f7-block-footer>
</f7-list>
</f7-page>
</template>
<script>
import { f7Navbar, f7Page, f7List, f7ListItem, f7BlockFooter } from 'framework7-vue';
export default {
components: {
f7Navbar,
f7Page,
f7List,
f7ListItem,
f7BlockFooter,
},
data() {
return {
items: [
{
title: 'Yellow Submarine',
author: 'Beatles',
cover: 'https://cdn.framework7.io/placeholder/abstract-88x88-1.jpg',
},
{
title: "Don't Stop Me Now",
author: 'Queen',
cover: 'https://cdn.framework7.io/placeholder/abstract-88x88-2.jpg',
},
{
title: 'Billie Jean',
author: 'Michael Jackson',
cover: 'https://cdn.framework7.io/placeholder/abstract-88x88-3.jpg',
},
],
songs: ['Yellow Submarine', "Don't Stop Me Now", 'Billie Jean', 'Californication'],
authors: ['Beatles', 'Queen', 'Michael Jackson', 'Red Hot Chili Peppers'],
};
},
methods: {
loadMore(done) {
const self = this;
setTimeout(() => {
const picURL = `https://cdn.framework7.io/placeholder/abstract-88x88-${
Math.floor(Math.random() * 10) + 1
}.jpg`;
const song = self.songs[Math.floor(Math.random() * self.songs.length)];
const author = self.authors[Math.floor(Math.random() * self.authors.length)];
self.items.push({
title: song,
author,
cover: picURL,
});
done();
}, 1000);
},
},
};
</script>