App / Core核心
当我们初始化应用程序时,我们可以使用new Framework7构造函数,并传递一个包含主要应用程序参数的对象:
var app = new Framework7({
// Enable swipe panel
panel: {
swipe: true,
},
// ... other parameters
});
这个构造函数返回主要的Framework7应用程序实例。
App Parameters
让我们看一下可用参数的列表:
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
el | string | body | 应用程序根元素。如果你的主应用程序布局不是<body> 的直接子元素,则需要在这里指定根元素 |
component | Router Component | 从传递的主应用程序组件加载应用程序布局。仅适用于Framework7 Core版本 | |
componentUrl | string Component | 通过XHR加载的单文件主应用程序组件的路径。仅适用于Framework7 Core版本 | |
name | string | Framework7 | 应用程序名称。可以被其他组件使用,例如作为对话框组件的默认标题 |
theme | string | auto | 应用程序主题。可以是ios、md或auto。在auto情况下,它将在iOS设备上使用iOS主题,在其他设备上使用MD主题 |
colors | object | 应用程序颜色。必须是一个带有必需的primary键和其他你可能需要的颜色的对象。对于这里指定的所有颜色,应用程序将使用Material You颜色调色板生成动态CSS样式。默认值为:
| |
userAgent | string | 用户代理字符串。在服务器端环境中使用时需要正确的设备检测 | | |
routes | array | [] | 所有视图的默认路由数组 |
lazyModulesPath | string | Framework7的延迟加载组件的路径。在浏览器模块中使用Lazy Modules时需要 | |
darkMode | boolean string | undefined | 如果设置为true,启用暗模式。如果设置为false,禁用暗模式。如果设置为auto,根据用户系统颜色方案首选项自动启用暗主题。此功能的支持基于(prefers-color-scheme)媒体查询支持 |
init | boolean | true | 默认情况下,当调用new Framework7()时,Framework7将自动初始化。如果你想阻止这种行为,可以使用此选项禁用它,然后在需要时手动初始化它app.init() |
initOnDeviceReady | boolean | true | 如果使用init: true参数启用了自动初始化,并且应用程序在cordova环境下运行,则将在deviceready事件上初始化 |
iosTranslucentBars | boolean | true | 在iOS主题(iOS设备上)的导航栏上启用半透明效果(模糊背景) |
iosTranslucentModals | boolean | true | 在iOS主题(iOS设备上)的模态框(对话框、弹出框、操作表)上启用半透明效果(模糊背景) |
on | object | {} | 事件处理程序对象。例如:
|
点击模块参数 | |||
clicks | object | 具有与点击模块相关的参数的对象:
| |
{ | |||
externalLinks | string | '.external' | 用于将被视为外部链接并且不应由Framework7处理的链接的CSS选择器。例如,类似(具有类"external")的链接将与此'.external'值匹配。 |
} | |||
触摸模块参数 | |||
touch | object | 具有与触摸模块相关的参数的对象:
| |
{ | |||
touchClicksDistanceThreshold | number | 5 | 防止短滑动的距离阈值(以像素为单位)。因此,如果点击/移动距离大于此值,则不会触发"click"事件。 |
disableContextMenu(禁用上下文菜单) | boolean | false | 设置为true以禁用上下文菜单(使用右键单击或长按) |
tapHold | boolean | false | 启用长按(tap hold) |
tapHoldDelay(长按延迟) | number | 750 | 确定用户必须在目标元素上按住多长时间(以毫秒为单位)才会触发taphold事件 |
tapHoldPreventClicks(防止点击) | boolean | true | 启用时(默认情况下),在长按事件之后将不会触发点击事件 |
activeState(激活状态) | boolean | true | 启用时,应用程序将向当前触摸的(:active)元素添加"active-state"类。 |
activeStateElements(活动状态元素) | string | a,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(在鼠标移动时保持活动状态) | boolean | false | 启用后,将在鼠标移动时保持"活动状态" |
iosTouchRipple | boolean | false | 启用iOS主题的触摸涟漪效果 |
mdTouchRipple | boolean | true | 启用MD主题的触摸涟漪效果 |
touchRippleElements | string | .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选择器 |
} | |||
serviceWorker | object | 具有服务工作模块参数的对象:
| |
{ | |||
path | string | service worker文件路径 | |
scope | string | service 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.routes | App 路由 |
app.el | App 根html元素 |
app.$el | app html根元素的dom7 实例 |
app.rtl | bool值指示app是否从右到左的布局 |
app.theme | 当前应用主题的字符串。可以是 md ,ios |
app.darkMode | 布尔属性,指示是否启用了暗黑主题。 |
app.width | 应用宽度(以像素为单位) |
app.height | 应用高度(以像素为单位) |
app.left | 应用左偏移量(以像素为单位) |
app.top | 应用顶部偏移量(以像素为单位) |
app.initialized | 布尔属性,指示应用是否已初始化 |
app.$ | Dom7 别名(alias) |
app.params | App 应用参数 |
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) | 如果mode 为true ,启用暗黑模式。如果mode 为false ,禁用暗黑模式。如果mode 为auto ,根据用户系统的颜色方案偏好自动启用暗黑主题。 |
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);
}