页面 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 | 布尔值 | 如果您使用 page-content 作为标签,则启用此选项 | |
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
- 如果启用了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>