页面 Svelte 组件

Framework7 中的页面与您想到的网页含义相同。页面是显示和操作内容的主要组件。

页面 Svelte 组件代表 Framework7 的 页面

页面组件

包含以下组件

页面属性

属性类型默认描述
<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>)具有用于自定义元素的额外插槽

<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>