App / Core核心

当我们初始化应用程序时,我们可以使用new Framework7构造函数,并传递一个包含主要应用程序参数的对象:

var app = new Framework7({
  // Enable swipe panel
  panel: {
    swipe: true,
  },
  // ... other parameters
});

这个构造函数返回主要的Framework7应用程序实例。

App Parameters

让我们看一下可用参数的列表:

参数类型默认值描述
elstringbody应用程序根元素。如果你的主应用程序布局不是<body>的直接子元素,则需要在这里指定根元素
componentRouter Component从传递的主应用程序组件加载应用程序布局。仅适用于Framework7 Core版本
componentUrlstring Component通过XHR加载的单文件主应用程序组件的路径。仅适用于Framework7 Core版本
namestringFramework7应用程序名称。可以被其他组件使用,例如作为对话框组件的默认标题
themestringauto应用程序主题。可以是ios、md或auto。在auto情况下,它将在iOS设备上使用iOS主题,在其他设备上使用MD主题
colorsobject应用程序颜色。必须是一个带有必需的primary键和其他你可能需要的颜色的对象。对于这里指定的所有颜色,应用程序将使用Material You颜色调色板生成动态CSS样式。默认值为:
{
  primary: '#007aff',
  red: '#ff3b30',
  green: '#4cd964',
  blue: '#2196f3',
  pink: '#ff2d55',
  yellow: '#ffcc00',
  orange: '#ff9500',
  purple: '#9c27b0',
  deeppurple: '#673ab7',
  lightblue: '#5ac8fa',
  teal: '#009688',
  lime: '#cddc39',
  deeporange: '#ff6b22',
  white: '#ffffff',
  black: '#000000',
}
userAgentstring用户代理字符串。在服务器端环境中使用时需要正确的设备检测 |
routesarray[]所有视图的默认路由数组
lazyModulesPathstringFramework7的延迟加载组件的路径。在浏览器模块中使用Lazy Modules时需要
darkModeboolean
string
undefined如果设置为true,启用暗模式。如果设置为false,禁用暗模式。如果设置为auto,根据用户系统颜色方案首选项自动启用暗主题。此功能的支持基于(prefers-color-scheme)媒体查询支持
initbooleantrue默认情况下,当调用new Framework7()时,Framework7将自动初始化。如果你想阻止这种行为,可以使用此选项禁用它,然后在需要时手动初始化它app.init()
initOnDeviceReadybooleantrue如果使用init: true参数启用了自动初始化,并且应用程序在cordova环境下运行,则将在deviceready事件上初始化
iosTranslucentBarsbooleantrue在iOS主题(iOS设备上)的导航栏上启用半透明效果(模糊背景)
iosTranslucentModalsbooleantrue在iOS主题(iOS设备上)的模态框(对话框、弹出框、操作表)上启用半透明效果(模糊背景)
onobject{}

事件处理程序对象。例如:

var app = new Framework7({
  on: {
    init: function () {
      console.log('App initialized');
    },
    pageInit: function () {
      console.log('Page initialized');
    },
  }
})
点击模块参数
clicksobject具有与点击模块相关的参数的对象:
var app = new Framework7({
  clicks: {
    externalLinks: '.external',
  }
})
{
externalLinksstring'.external'用于将被视为外部链接并且不应由Framework7处理的链接的CSS选择器。例如,类似(具有类"external")的链接将与此'.external'值匹配。
}
触摸模块参数
touchobject具有与触摸模块相关的参数的对象:
var app = new Framework7({
  touch: {
    tapHold: true,
  }
})
{
touchClicksDistanceThresholdnumber5防止短滑动的距离阈值(以像素为单位)。因此,如果点击/移动距离大于此值,则不会触发"click"事件。
disableContextMenu(禁用上下文菜单)booleanfalse设置为true以禁用上下文菜单(使用右键单击或长按)
tapHoldbooleanfalse启用长按(tap hold)
tapHoldDelay(长按延迟)number750确定用户必须在目标元素上按住多长时间(以毫秒为单位)才会触发taphold事件
tapHoldPreventClicks(防止点击)booleantrue启用时(默认情况下),在长按事件之后将不会触发点击事件
activeState(激活状态)booleantrue启用时,应用程序将向当前触摸的(:active)元素添加"active-state"类。
activeStateElements(活动状态元素)stringa,button,label,span,.actions-button,.stepper-button,.stepper-button-plus,.stepper-button-minus,.card-expandable,.menu-item,.link,.item-link,.accordion-item-toggle启用activeState的元素的CSS选择器将添加适当的活动类
activeStateOnMouseMove(在鼠标移动时保持活动状态)booleanfalse启用后,将在鼠标移动时保持"活动状态"
iosTouchRipplebooleanfalse启用iOS主题的触摸涟漪效果
mdTouchRipplebooleantrue启用MD主题的触摸涟漪效果
touchRippleElementsstring.ripple, .link, .item-link, .list-button, .links-list a, .button, button, .input-clear-button, .dialog-button, .tab-link, .item-radio, .item-checkbox, .actions-button, .searchbar-disable-button, .fab a, .checkbox, .radio, .data-table .sortable-cell:not(.input-cell), .notification-close-button, .stepper-button, .stepper-button-minus, .stepper-button-plus, .menu-item-content, .list.accordion-list .accordion-item-toggle在点击时应用触摸涟漪效果的元素的CSS选择器
touchRippleInsetElements(触摸涟漪效果插入元素)string.ripple-inset, .icon-only, .searchbar-disable-button, .input-clear-button, .notification-close-button, .md .navbar .link.back在点击时应用插入触摸涟漪效果的元素的CSS选择器
}
serviceWorkerobject具有服务工作模块参数的对象:
var app = new Framework7({
  serviceWorker: {
    path: './service-worker.js',
    scope: '/',
  }
})
{
pathstring service worker文件路径
scopestringservice worker路径作用域
}

这些是应用程序核心模块的默认应用程序参数。

具有JavaScript API的大多数组件可以使用名为component的属性扩展此参数列表。例如,Panel组件使用panel属性扩展应用程序参数,该属性接受特定于Panel的参数。

Example:

var app = new Framework7({
  // Extended by Panel component:
  panel: {
    swipe: true,
    visibleBreakpoint: 1024,
  },
  // Extended by Dialog component:
  dialog: {
    title: 'My App',
  },
  // Extended by Statusbar component:
  statusbar: {
    iosOverlaysWebview: true,
  },
});

App Methods & Properties

返回的 Framework7 实例 app 包含许多有用的属性和方法:

属性
app.name在参数中传递的应用程序名称
app.routesApp 路由
app.elApp 根html元素
app.$elapp html根元素的dom7 实例
app.rtlbool值指示app是否从右到左的布局
app.theme当前应用主题的字符串。可以是 mdios
app.darkMode布尔属性,指示是否启用了暗黑主题。
app.width应用宽度(以像素为单位)
app.height应用高度(以像素为单位)
app.left应用左偏移量(以像素为单位)
app.top应用顶部偏移量(以像素为单位)
app.initialized布尔属性,指示应用是否已初始化
app.$Dom7 别名(alias)
app.paramsApp 应用参数
app.support包含有关支持特性的属性的对象。请查看Support工具部分
app.device包含有关设备的属性的对象。请查看Device工具部分
app.utils包含一些有用的工具的对象。请查看Utils部分
app.serviceWorker.container服务工作器容器(navigator.serviceWorker
app.serviceWorker.registrations已注册的服务工作器数组
app.online布尔属性,指示应用的连接状态(如果在线则为true
方法
app.setColorTheme(color)设置主色主题。color必须是一个十六进制颜色,例如#ff0000
app.setDarkMode(mode)如果modetrue,启用暗黑模式。如果modefalse,禁用暗黑模式。如果modeauto,根据用户系统的颜色方案偏好自动启用暗黑主题。
app.on(event, handler)添加事件处理程序
app.once(event, handler)添加在触发后将被删除的事件处理程序
app.off(event, handler)删除事件处理程序
app.off(event)删除指定事件的所有处理程序
app.emit(event, ...args)在实例上触发事件
app.init()初始化应用。如果你使用 init: false 参数禁用了自动初始化
app.serviceWorker.register(path, scope)app.serviceWorker.register(path, scope)
app.serviceWorker.unregister(registration)(取消注册服务工作者。它返回一个承诺,当服务工作者取消注册时将被返回处理)Unregister service worker. It returns promise that will be resolved when service worker unregistered.

与应用程序参数一样,大多数具有JavaScript API的组件可以通过名为component的属性扩展此属性列表。例如,Panel组件通过panel属性扩展了应用程序实例属性,该属性接受Panel特定的属性和方法。

示例:

// Open panel
app.panel.open('left');

// Hide statusbar
app.statusbar.hide();

App Events

App实例会触发以下核心事件:

事件参数描述
init在应用程序初始化时触发的事件。在new Framework7()或者在禁用自动初始化后的app.init()之后自动触发。
resize在应用程序调整大小(窗口调整大小)时触发的事件。
orientationchange在应用程序方向改变(窗口方向改变)时触发的事件。
click(event)在应用程序点击时触发的事件。
touchstart:active(event)在添加为活动监听器的触摸开始(mousedown)事件上触发的事件(可以阻止默认行为)
touchmove:active(event)在添加为活动监听器的触摸移动(mousemove)事件上触发的事件(可以阻止默认行为)。
touchend:active(event)在添加为活动监听器的触摸结束(mouseup)事件上触发的事件(可以阻止默认行为)。
touchstart:passive(event)在添加为被动监听器的触摸开始(mousedown)事件上触发的事件(无法阻止默认行为)。
touchmove:passive(event)在添加为被动监听器的触摸移动(mousemove)事件上触发的事件(无法阻止默认行为)。
touchend:passive(event)在添加为被动监听器的触摸结束(mouseup)事件上触发的事件(无法阻止默认行为)。
serviceWorkerRegisterSuccess(registration)在服务工作线程成功注册时触发的事件。
serviceWorkerRegisterError(error)在服务工作线程注册失败时触发的事件。
serviceWorkerUnregisterSuccess(registration)在服务工作线程成功注销时触发的事件
serviceWorkerUnregisterError(registration, error)在服务工作线程注销失败时触发的事件。
online在应用程序上线时触发的事件。
offline在应用程序离线时触发的事件。
connection(isOnline)在网络状态变化时触发的事件。
darkModeChange(isDarkTheme)在设备首选颜色方案更改时触发的事件。仅当darkMode参数设置为'auto'时生效。

再次说明,大多数具有JavaScript API的组件可以扩展此事件列表,例如Panel组件还会在app实例上触发其他事件。

示例:

app.on('panelOpen', function (panel) {
  console.log('Panel ' + panel.side + ' opened');
});

app.on('connection', function (isOnline) {
  if (isOnline) {
    console.log('app is online now')
  } else {
    console.log('app is offline now')
  }
});

app.on('darkModeChange', function (isDark) {
  if (isDark) {
    console.log('color scheme changed to Dark')
  } else {
    console.log('color scheme changed to Light')
  }
});

CSS Variables

/*====================
  Core
  ==================== */
:root {
  --f7-safe-area-left: 0px;
  --f7-safe-area-right: 0px;
  --f7-safe-area-top: 0px;
  --f7-safe-area-bottom: 0px;

  --f7-safe-area-outer-left: 0px;
  --f7-safe-area-outer-right: 0px;

  @supports (left: env(safe-area-inset-left)) {
    --f7-safe-area-top: env(safe-area-inset-top);
    --f7-safe-area-bottom: env(safe-area-inset-bottom);
    .ios-left-edge,
    .ios-edges,
    .safe-area-left,
    .safe-areas,
    .popup,
    .sheet-modal,
    .panel-left {
      --f7-safe-area-left: env(safe-area-inset-left);
      --f7-safe-area-outer-left: env(safe-area-inset-left);
    }
    .ios-right-edge,
    .ios-edges,
    .safe-area-right,
    .safe-areas,
    .popup,
    .sheet-modal,
    .panel-right {
      --f7-safe-area-right: env(safe-area-inset-right);
      --f7-safe-area-outer-right: env(safe-area-inset-right);
    }
    .no-safe-areas,
    .no-safe-area-left,
    .no-ios-edges,
    .no-ios-left-edge {
      --f7-safe-area-left: 0px;
      --f7-safe-area-outer-left: 0px;
    }
    .no-safe-areas,
    .no-safe-area-right,
    .no-ios-edges,
    .no-ios-right-edge {
      --f7-safe-area-right: 0px;
      --f7-safe-area-outer-right: 0px;
    }
  }

  --f7-device-pixel-ratio: 1;
  @media (min-resolution: 2dppx) {
    --f7-device-pixel-ratio: 2;
  }
  @media (min-resolution: 3dppx) {
    --f7-device-pixel-ratio: 3;
  }
}
/*====================
  Fonts & Bars
  ==================== */
:root {
  --f7-font-size: 14px;

  --f7-bars-translucent-opacity: 0.8;
  --f7-bars-translucent-blur: 20px;
}
.ios {
  --f7-font-family: -apple-system, SF Pro Text, SF UI Text, system-ui, Helvetica Neue, Helvetica, Arial, sans-serif;
  --f7-line-height: 1.4;
  /*
  --f7-bars-link-color: var(--f7-theme-color);
  */
  --f7-bars-text-color: #000;
  --f7-text-color: #000;
  --f7-bars-bg-color: #f7f7f8;
  --f7-bars-bg-color-rgb: 247, 247, 248;
  --f7-bars-border-color: rgba(0,0,0,0.25);
}
.ios .dark,
.ios.dark {
  --f7-bars-text-color: #fff;
  --f7-text-color: #fff;
  --f7-bars-bg-color: #121212;
  --f7-bars-bg-color-rgb: 22, 22, 22;
  --f7-bars-border-color: rgba(255,255,255,0.16);
}

.md {
  --f7-font-family: Roboto, system-ui, Noto, Helvetica, Arial, sans-serif;
  --f7-line-height: 1.5;
  --f7-bars-border-color: transparent;
  --f7-text-color: #212121;
}
.md .dark,
.md.dark {
  --f7-text-color: rgba(255,255,255,0.87);
}

.md,
.md .dark,
.md [class*='color-'] {
  --f7-bars-link-color: var(--f7-md-on-surface);
  --f7-bars-bg-color: var(--f7-md-surface-2);
  --f7-bars-bg-color-rgb: var(--f7-md-surface-2-rgb);
}

/*====================
  Color Themes
  ==================== */
.text-color-primary {
  --f7-theme-color-text-color: var(--f7-theme-color);
}
.bg-color-primary {
  --f7-theme-color-bg-color: var(--f7-theme-color);
}
.border-color-primary {
  --f7-theme-color-border-color: var(--f7-theme-color);
}
.ripple-color-primary {
  --f7-theme-color-ripple-color: rgba(var(--f7-theme-color-rgb), 0.3);
}