Svelte 頁面元件
Framework7 中的頁面與您思考網頁時的意思相同。頁面是顯示和操作內容的主要元件。
Svelte 頁面元件代表 Framework7 的 頁面。
頁面元件
包含下列元件
Page
- 主要頁面元素PageContent
- 其他內部頁面內容元素
頁面屬性
屬性 | 類型 | 預設值 | 說明 |
---|---|---|---|
<Page> 屬性 | |||
name | 字串 | 頁面名稱 | |
messagesContent | 布林值 | 如果您在內部使用 訊息 元件,請啟用以新增必要的額外樣式 | |
pageContent | 布林值 | true | 啟用後,它會自動在內部新增 page-content 元素。當您需要為標籤使用少數 page-content 元素時,這很有用 |
tabs | 布林值 | 如果您將頁面用作 標籤 包裝器,請啟用 | |
loginScreen | 布林值 | 如果您在頁面內部使用 登入畫面,請啟用以新增必要的額外樣式 | |
noSwipeback | 布林值 | 停用當前頁面的滑動返回功能(僅影響 iOS 主題) | |
withSubnavbar | 布林值 | 如果您在頁面內部有子導覽列,請啟用 | |
noNavbar | 布林值 | 如果您使用常見的導覽列配置,並且需要為此頁面隱藏常見導覽列(或使用其他導覽列),請啟用(僅影響 iOS 主題) | |
noToolbar | 布林值 | 如果您使用常見的工具列/標籤列配置,並且需要為此頁面隱藏工具列(或使用其他工具列),請啟用 | |
hideBarsOnScroll | 布林值 | 在頁面捲動時隱藏導覽列和工具列 | |
hideNavbarOnScroll | 布林值 | 在頁面捲動時隱藏導覽列 | |
hideToolbarOnScroll | 布林值 | 在頁面捲動時隱藏工具列 | |
ptr | 布林值 | 啟用 下拉更新 | |
ptrDistance | 數字 | 自訂下拉更新觸發距離。預設(如果未指定)為 44px。 | |
ptrPreloader | 布林值 | true | 如果您要使用自訂下拉更新預載元件,請停用 |
ptrBottom | 布林值 | false | 啟用從底部下拉更新 |
ptrMousewheel | 布林值 | false | 啟用使用滑鼠滾輪下拉更新(適用於桌面應用程式)。僅適用於 PTR 頂端 |
infinite | 布林值 | 啟用 無限捲動 | |
infiniteTop | 布林值 | 啟用頁面頂端的無限捲動 | |
infiniteDistance | 數字 | 觸發無限捲動事件的頁面底部距離(以像素為單位)。預設(未指定)為 50(像素) | |
infinitePreloader | 布林值 | true | 如果您想使用自訂無限捲動預載器,請停用 |
<PageContent> 屬性 | |||
tab | 布林值 | 如果您將頁面內容當作標籤使用,請啟用 | |
tabActive | 布林值 | 如果目前的標籤為作用中,請啟用 | |
ptr ptrDistance ptrPreloader ptrBottom ptrMousewheel infinite infiniteTop infiniteDistance infinitePreloader hideBarsOnScroll hideNavbarOnScroll hideToolbarOnScroll messagesContent loginScreen | 與 <Page> 屬性相同 |
頁面事件
事件 | 說明 |
---|---|
<Page> 事件 | |
pageMounted | 當具有 keepAlive 路徑的頁面掛載/附加到 DOM 時,將觸發事件 |
pageInit | 在 Framework7 初始化必要的頁面元件和導覽列後,將觸發事件 |
pageReinit | 如果導航到已初始化的頁面,將觸發此事件。 |
pageBeforeIn | 當所有內容都初始化完畢,且頁面已準備好轉換為可視(轉換為作用中/目前位置)時,將觸發事件 |
pageAfterIn | 當頁面轉換為可視後,將觸發事件 |
pageBeforeOut | 當頁面即將轉換為不可視之前,將觸發事件 |
pageAfterOut | 當頁面轉換為不可視後,將觸發事件 |
pageBeforeUnmount | 當具有 keepAlive 路徑的頁面即將從 DOM 中卸載/分離時,將觸發事件 |
pageBeforeRemove | 在頁面從 DOM 中移除之前,將觸發事件。如果您需要分離一些事件/銷毀一些外掛程式以釋放記憶體,此事件可能會非常有用。對於 keepAlive 路徑,不會觸發此事件。 |
pageTabShow | 當頁面的父項 檢視為標籤 變為可見時,將觸發事件 |
pageTabHide | 當頁面的父項 檢視為標籤 變為隱藏時,將觸發事件 |
ptrPullStart | 當您開始移動拉動以更新內容時,將觸發事件 |
ptrPullMove | 當您移動拉動以更新內容時,將觸發事件 |
ptrPullEnd | 當您釋放拉動以更新內容時,將觸發事件 |
ptrRefresh | 當拉動以更新進入「更新中」狀態時,將觸發事件 |
ptrDone | 在拉動以更新完成並回復到初始狀態(呼叫 pullToRefreshDone 方法後)後,將觸發事件 |
infinite | 當頁面捲動到達指定(data-distance 屬性中)的底部距離時,將觸發事件。 |
<PageContent> 事件 | |
tabShow | 當 Tab 可見/啟用時觸發事件 |
tabHide | 當 Tab 隱藏/停用時觸發事件 |
ptrPullStart ptrPullMove ptrPullEnd ptrRefresh ptrDone infinite | 與 <Page> 事件相同 |
頁面插槽
頁面 Svelte 元件 (<Page>
) 有額外的插槽供自訂元素使用
default
- 如果啟用page-content
屬性 (預設),元素將插入為「page-content」的子元素fixed
- 元素將插入為「page」的直接子元素,緊接在「page-content」之前
<Page>
<div slot="fixed">Fixed element</div>
<p>Page content goes here</p>
</Page>
<!-- Renders to: -->
<div class="page">
<div>Fixed element</div>
<div class="page-content">
<p>Page content goes here</p>
</div>
</div>
範例
無限捲動
infinite-scroll.svelte
<script>
import { Navbar, Page, BlockTitle, List, ListItem } from 'framework7-svelte';
let items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20];
let allowInfinite = true;
let showPreloader = true;
function loadMore() {
if (!allowInfinite) return;
allowInfinite = false;
setTimeout(() => {
if (items.length >= 200) {
showPreloader = false;
return;
}
const itemsLength = items.length;
for (let i = 1; i <= 20; i += 1) {
items.push(itemsLength + i);
}
items = items;
allowInfinite = true;
}, 1000);
}
</script>
<Page infinite infiniteDistance={50} infinitePreloader={showPreloader} onInfinite={loadMore}>
<Navbar title="Infinite Scroll" />
<BlockTitle>Scroll bottom</BlockTitle>
<List strongIos outlineIos dividersIos>
{#each items as item, index (index)}
<ListItem title={`Item ${item}`} />
{/each}
</List>
</Page>
下拉更新
pull-to-refresh.svelte
<script>
import { Navbar, Page, List, ListItem, BlockFooter } from 'framework7-svelte';
let 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',
},
];
const songs = ['Yellow Submarine', "Don't Stop Me Now", 'Billie Jean', 'Californication'];
const authors = ['Beatles', 'Queen', 'Michael Jackson', 'Red Hot Chili Peppers'];
function loadMore(done) {
setTimeout(() => {
const picURL = `https://cdn.framework7.io/placeholder/abstract-88x88-${
Math.floor(Math.random() * 10) + 1
}.jpg`;
const song = songs[Math.floor(Math.random() * songs.length)];
const author = authors[Math.floor(Math.random() * authors.length)];
items.push({
title: song,
author,
cover: picURL,
});
items = items;
done();
}, 1000);
}
</script>
<!-- svelte-ignore a11y-missing-attribute -->
<Page ptr ptrMousewheel={true} onPtrRefresh={loadMore}>
<Navbar title="Pull To Refresh" />
<List mediaList strongIos dividersIos outlineIos>
{#each items as item, index (index)}
<ListItem title={item.title} subtitle={item.author}>
<img slot="media" src={item.cover} width="44" style="border-radius: 8px" />
</ListItem>
{/each}
</List>
<BlockFooter>
<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>
</BlockFooter>
</Page>