页面 Svelte 组件
Framework7 中的页面与您想到的网页具有相同的意义。页面是显示和操作内容的主要组件。
页面 Svelte 组件代表 Framework7 的页面.
页面组件
包含以下组件:
Page
- 主要页面元素PageContent
- 额外的内部页面内容元素
页面属性
属性 | 类型 | 默认 | 描述 |
---|---|---|---|
<Page> 属性 | |||
name | 字符串 | 页面名称 | |
messagesContent | 布尔值 | 如果您在页面内部使用消息component | |
pageContent | 布尔值 | true | 当启用时,它会自动添加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 | 数字 | 页面底部(以 px 为单位)触发无限滚动事件的距离。默认情况下(如果未指定),它是 50(px) | |
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 | 当选项卡变得可见/活动时,将触发事件 |
tabHide | 当选项卡变得隐藏/非活动时,将触发事件 |
ptrPullStart ptrPullMove ptrPullEnd ptrRefresh ptrDone infinite | 与<Page> 事件 |
页面插槽
页面 Svelte 组件(<Page>
)具有用于自定义元素的附加插槽:
default
- 如果 prop 启用(默认情况下),元素将作为 "page-content" 的子元素插入page-content
- 元素将作为 "page" 的直接子元素插入,位于 "page-content" 之前fixed
- element will be inserted as a direct child of "page" right before "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>