应用 / 核心
当我们初始化应用时,我们可以使用new Framework7
构造函数,并传递一个包含主应用参数的对象:
var app = new Framework7({
// Enable swipe panel
panel: {
swipe: true,
},
// ... other parameters
});
这个构造函数返回主应用 Framework7 实例。
App参数
让我们看看可用参数的列表:
参数 | 类型 | 默认 | 描述 |
---|---|---|---|
el | 字符串 | body | 应用根元素。如果你的主应用布局不是直接子元素<body> ,那么必须在这里指定根元素 |
组件上传递单独的属性 | 路由组件 | 从传递的主应用组件加载应用布局。仅适用于 Framework7 核心版本 | |
组件Url | 字符串组件 | 单文件路径主应用组件通过 XHR 加载。仅适用于 Framework7 核心版本 | |
name | 字符串 | Framework7 | 应用名称。其他组件可以使用它,例如作为默认标题对话框组件。 |
主题 | 字符串 | 自动 | 应用主题。可以是ios , md 或auto 。如果设置为auto ,它将使用 iOS 主题的 iOS 设备和 MD 主题的所有其他设备。 |
颜色 | 对象 | 应用颜色。必须是一个带有必需primary 键和其他你可能需要的颜色的对象。对于这里指定的所有颜色,应用将使用 Material You 色彩调板生成动态 CSS 样式。默认为:
| |
userAgent | 字符串 | 用户代理字符串。在服务器端环境中使用时,需要它以进行正确的设备检测。 | |
路由 | 数组 | [] | 默认路由到所有视图的数组。 |
lazyModulesPath | 字符串 | Framework7 的懒加载组件的路径。使用浏览器模块时需要它。懒加载模块darkMode | |
darkMode | 布尔值 字符串 | undefined | 如果设置为true ,启用暗黑模式。如果设置为false ,禁用暗黑模式。如果设置为auto ,根据用户系统色彩方案偏好自动启用暗黑主题。此功能支持基于(prefers-color-scheme) media query 支持. |
init | 布尔值 | true | 默认情况下,当您调用new Framework7() 时,Framework7 将自动初始化。如果您想阻止此行为,您可以使用此选项禁用它,然后在需要时手动使用app.init() 初始化它。 |
initOnDeviceReady | 布尔值 | true | 如果使用init: true 参数启用自动初始化,并且应用在 cordova 环境下运行,则它将在deviceready 事件上初始化。 |
iosTranslucentBars | 布尔值 | true | 在 iOS 主题的导航栏上启用半透明效果(模糊背景)(在 iOS 设备上) |
iosTranslucentModals | 布尔值 | true | 在 iOS 主题的模态(对话框、弹出框、操作)上启用半透明效果(模糊背景)(在 iOS 设备上) |
on | 对象 | {} | 带有事件处理程序的对象。例如:
|
点击模块参数 | |||
clicks | 对象 | 与点击模块相关的参数对象:
| |
{ | |||
externalLinks | 字符串 | '.external' | CSS 选择器,用于将链接视为外部链接,并且不应由 Framework7 处理。例如,'.external' 值将匹配具有 "external" 类的链接<a href="somepage.html" class="external"> (具有 "external" 类) |
} | |||
触摸模块参数 | |||
touch | 对象 | 与触摸模块相关的参数对象:
| |
{ | |||
touchClicksDistanceThreshold | 数字 | 5 | 防止短滑动的距离阈值(以 px 为单位)。因此,如果点击/移动距离大于此值,则不会触发 "click"。 |
disableContextMenu | 布尔值 | false | 设置为 true 以禁用上下文菜单(使用右键单击或长按) |
tapHold | 布尔值 | false | 启用长按 |
tapHoldDelay | 数字 | 750 | 确定用户必须按住多长时间(以 ms 为单位),才能在目标元素上触发 taphold 事件 |
tapHoldPreventClicks | 布尔值 | true | 启用后(默认情况下),点击事件将在长按事件后不会触发 |
activeState | 布尔值 | true | 启用后,应用将向当前触摸的 (:active) 元素添加 "active-state" 类。 |
activeStateElements | 字符串 | a, button, label, span, .actions-button, .stepper-button, .stepper-button-plus, .stepper-button-minus, .card-expandable, .menu-item, .link, .item-link, .accordion-item-toggle | CSS 选择器,用于在启用的元素中添加适当的 active 类activeState activeStateOnMouseMove |
activeStateOnMouseMove | 布尔值 | false | 启用后,在鼠标移动时保持 "active state" |
iosTouchRipple | 布尔值 | false | 为 iOS 主题启用触摸涟漪效果 |
mdTouchRipple | 布尔值 | true | 为 MD 主题启用触摸涟漪效果 |
touchRippleElements | 字符串 | .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 | 字符串 | .ripple-inset, .icon-only, .searchbar-disable-button, .input-clear-button, .notification-close-button, .md .navbar .link.back | CSS selector of elements to apply inset touch ripple effect on click |
} | |||
serviceWorker | 对象 | 服务工作者模块参数对象:
| |
{ | |||
路径 | 字符串 | 服务工作者文件的路径 | |
scope | 字符串 | Path to service worker scope | |
} |
这些是应用核心模块的默认应用参数。
大多数具有 JavaScript API 的组件可以通过名为 component 的属性扩展此参数列表。例如面板component 属性扩展应用参数,接受特定于 Panel 的参数。panel
示例:
示例:
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方法与属性
返回的 Framework7 实例app
包含许多有用的属性和方法:
属性 | |
---|---|
app.name | 传递的参数中的应用名称 |
app.routes | 应用路由 |
app.el | 应用根 HTML 元素 |
app.$el | 包含应用根 HTML 元素的 Dom7 实例 |
app.rtl | 布尔属性指示应用是否为从右到左布局 |
app.theme | 包含当前应用主题的字符串。可以是md , ios |
app.darkMode | 布尔属性指示暗黑主题是否激活。 |
app.width | 应用宽度(以 px 为单位) |
app.height | 应用高度(以 px 为单位) |
app.left | 应用左偏移(以 px 为单位) |
app.top | 应用顶部偏移(以 px 为单位) |
app.initialized | 布尔属性指示应用是否已初始化。 |
app.$ | Dom7别名 |
app.params | 应用参数 |
app.support | 一个具有关于支持功能的属性的对象。查看支持工具部分 |
app.device | 一个具有关于设备属性的对象。查看设备工具部分 |
app.utils | 一个具有一些有用工具的对象。查看实用工具部分 |
app.serviceWorker.container | 服务工作者容器(navigator.serviceWorker ) |
app.serviceWorker.registrations | 注册的服务工作者数组 |
app.online | 指示app连接状态的布尔属性。(true 在线时) |
方法 | |
app.setColorTheme(color) | 设置主色调。color 必须是HEX颜色,例如#ff0000 |
app.setDarkMode(模式) | 如果mode 是true ,启用暗模式。如果mode 是false ,禁用暗模式。如果mode 是auto 根据用户系统配色方案偏好自动启用暗主题。 |
app.on(事件上触发, 处理程序) | 添加事件处理程序 |
app.once(事件上触发, 处理程序) | 添加在触发后将被移除的事件处理程序 |
app.off(事件上触发, 处理程序) | 移除事件处理程序 |
app.off(事件上触发) | 移除指定事件的所有处理程序 |
app.emit(事件上触发, ...args) | 在实例上触发事件 |
app.init() | 初始化app。如果你使用init: false parameter |
禁用了自动初始化路径, scope) | 注册服务工作者。它返回一个将解析为ServiceWorkerRegistration |
app.serviceWorker.unregister(registration) | 注销服务工作者。它返回一个将在服务工作者注销时解析的承诺。 |
与app参数类似,大多数具有JavaScript API的组件都可以通过名为组件的属性扩展此属性列表。例如,Panel组件通过panel
属性扩展app实例属性,该属性接受Panel特定属性和方法。
示例:
// Open panel
app.panel.open('left');
// Hide statusbar
app.statusbar.hide();
App Events
App实例发出以下核心事件:
事件 | 参数 | 描述 |
---|---|---|
init | 在app初始化时触发的事件。在new Framework7() 或在app.init() 如果你禁用了自动初始化。 | |
resize | 在app调整大小(窗口调整大小)时触发的事件。 | |
orientationchange | 在app方向改变(窗口方向改变)时触发的事件。 | |
click | (event) | 在app点击时触发的事件 |
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 | 当app上线时触发的事件 | |
offline | 当app离线时触发的事件 | |
connection | (isOnline) | 在网络状态改变时触发的事件 |
darkModeChange | (isDarkTheme) | 在设备首选配色方案改变时触发的事件。它仅在darkMode 参数设置为'auto' |
时有效。
示例:
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 变量
/*====================
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);
}