Застосунок/ ядро
Навігація
Застосунок
var app = new Techno4({
// App id
id: 'com.myapp.test',
// Enable swipe panel
panel: {
swipe: true,
},
// ... other parameters
});Параметри застосунку
| Параметр | За замовчуванням | Опис | Тип |
|---|---|---|---|
el | body | Кореневий елемент застосунку. Якщо основний макет застосунку не є прямим дочірнім елементом <body>, тут потрібно вказати кореневий елемент | string |
component | Завантажити макет застосунку з переданого main app component. | Router Component | |
componentUrl | Шлях до main app component з одним файлом, який буде завантажено через XHR. | string Component | |
id | io.Techno4.testapp | Ідентифікатор набору застосунків | string |
name | Techno4 | Назва застосунку. Може використовуватися іншими компонентами, напр. як назву за замовчуванням для компонента Dialog. | string |
version | 1.0.0 | Версія застосунку. Може використовуватися іншими компонентами. | string |
theme | auto | Тема застосунку. Може бути ios, md, aurora або auto. У разі auto режиму він використовуватиме тему iOS для пристроїв iOS, тему Aurora для настільного пристрою, що працює в середовищі Electron, і тему MD для всіх інших пристроїв. | string |
language | Мова застосунку. Може використовуватися іншими компонентами. За замовчуванням дорівнює поточній мові вебпереглядача/вебперегляду (тобто avigator.language). | String | |
userAgent | Рядок агента користувача. Потрібний у разі використання на стороні сервера для правильного виявлення пристрою. | String | |
routes | [] | Масив із стандартними маршрутами до всіх представлень | array |
lazyModulesPath | Шлях до відкладених компонентів Techno4. Необхідно використовувати Lazy Modules із модулями браузера. | string | |
autoDarkMode | false | Автоматично вмикає темну тему на основі налаштувань системи кольорів системи користувача. Підтримка цієї функції базується на підтримці медіа-запитів (prefers-color-scheme). | boolean |
init | true | За замовчуванням Techno4 буде ініціалізовано автоматично, коли ви викликаєте new Techno4(). Якщо ви хочете запобігти такій поведінці, ви можете вимкнути його за допомогою цього параметра, а потім ініціалізувати вручну за допомогою app.init(), коли вам це потрібно. | boolean |
initOnDeviceReady | true | Якщо автоматичну ініціалізацію ввімкнено за допомогою параметра init: true і застосунок працює в середовищі cordova, тоді її буде ініціалізовано за подією deviceready. | Boolean |
iosTranslucentBars | true | Увімкнути напівпрозорий ефект (розмиття фону) на панелях навігації для теми iOS (на пристроях iOS) | Boolean |
iosTranslucentModals | true | Увімкнути напівпрозорий ефект (розмиття фону) у режимах (діалогове вікно, спливаюче вікно, дії) для теми iOS (на пристроях iOS) | Boolean |
| Параметр | За замовчуванням | Опис | Тип |
|---|---|---|---|
on | {} | Об'єкт з обробниками подій. Наприклад: | object |
var app = new Techno4({
on: {
init: function () {
console.log('App initialized');
},
pageInit: function () {
console.log('Page initialized');
},
}
})
Clicks Module параметри
| Параметр | Опис | Тип |
|---|---|---|
clicks | Об’єкт із параметрами, пов’язаними з модулем кліків: | object |
var app = new Techno4({
clicks: {
externalLinks: '.external',
}
})
{
| Параметр | За замовчуванням | Опис | Тип |
|---|---|---|---|
externalLinks | '.external' | Селектор CSS для посилань, які слід розглядати як зовнішні та не повинні оброблятися Techno4. Наприклад, таке значення '.external' відповідатиме таким посиланням, як <a href="/somepage.html" class="external"> (з класом "external") | string |
}
Touch Module параметри
| Параметр | Опис | Тип |
|---|---|---|
touch | Об'єкт з параметрами сенсорного модуля: | object |
var app = new Techno4({
touch: {
tapHold: true,
}
})
{
| Параметр | За замовчуванням | Опис | Тип |
|---|---|---|---|
touchClicksDistanceThreshold | 5 | Порогове значення відстані (у пікселях), щоб запобігти (випадковим) коротким свайпам. Отже, якщо відстань торкання/переміщення більша за це значення, «клацання» не буде активовано. | number |
disableContextMenu | false | Установіть значення true, щоб вимкнути контекстне меню (клацніть правою кнопкою миші або натисніть і утримуйте) | Boolean |
tapHold | false | Вмикає утримання натискання | boolean |
tapHoldDelay | 750 | Визначає, як довго (у мс) користувач повинен утримувати натискання, перш ніж подія taphold буде запущена на цільовому елементі | number |
tapHoldPreventClicks | true | Якщо ввімкнено (за замовчуванням), подія “клік” не запускатиметься після події “утримання дотику” taphold | boolean |
activeState | true | Якщо ввімкнено, застосунок додасть клас activestate до поточного елемента (:active). | boolean |
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 елементів, де ввімкнено activeState, додасть відповідний активний клас | string |
activeStateOnMouseMove | false | Коли ввімкнено, він зберігає «активний стан» під час руху миші | boolean |
iosTouchRipple | false | Вмикає ефект “хвилі дотику” для теми iOS | boolean |
mdTouchRipple | true | Вмикає ефект “хвилі дотику” для теми MD | boolean |
auroraTouchRipple | false | Вмикає ефект хвилі дотику для теми Aurora. | boolean |
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-селектор елементів для застосування ефекту хвилі дотику під час натискання | string |
touchRippleInsetElements | .ripple-inset, .icon-only, .searchbar-disable-button, .input-clear-button, .notification-close-button, .md .navbar .link.back | CSS-селектор елементів для застосування ефекту хвилі дотику під час натискання | string |
}
| Параметр | Опис | Тип |
|---|---|---|
serviceWorker | Об'єкт з параметрами модуля service worker: | object |
var app = new Techno4({
serviceWorker: {
path: './service-worker.js',
scope: '/',
}
})
{
| Параметр | Опис | Тип |
|---|---|---|
path | Шлях до файлу service worker | string |
scope | Шлях до сфери обслуговування Worker | string |
}
Більшість компонентів, які мають JavaScript API, можуть розширити цей список параметрів за допомогою властивості, названої як компонент.
Наприклад, компонент Panel розширює параметри застосунку за допомогою властивості‘panel’, яка приймає спеціальні параметри Panel.
Приклад:
var app = new Techno4({
id: 'com.myapp.test',
// 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.id | Ідентифікатор застосунку, переданий у параметрах |
app.name | Назва застосунку передана в параметрах |
app.version | Версія застосунку |
app.routes | Маршрути застосунку |
app.language | Мова застосунку |
app.el | Кореневий HTML-елемент застосунку |
app.$el | Екземпляр Dom7 з кореневим елементом HTML застосунку |
app.rtl | Логічна властивість, яка вказує на те, що застосунок має макет RTL чи ні |
app.theme | Рядок із поточною темою застосунку. Може бути md, ios або aurora |
app.darkMode | Логічна властивість, яка вказує, чи активна темна тема. Ця властивість діє лише тоді, коли ввімкнено autoDarkMode |
app.width | Ширина застосунку в пікселях |
app.height | Висота застосунку в пікселях |
app.left | Зміщення додатка вліво в пікселях |
app.top | Верхнє зміщення застосунку в пікселях |
app.initialized | Логічна властивість, яка вказує, що застосунок ініціалізований чи ні |
app.$ | Псевдонім Dom7 |
app.params | Параметри застосунку |
app.support | Об’єкт із властивостями щодо підтримуваних функцій. Перевірте розділ Службові застосунки підтримки |
app.device | Об'єкт із властивостями про пристрій. Перевірте розділ «Утиліти пристрою». |
app.utils | Об'єкт з деякими корисними утилітами. Перевірте розділ "Утиліти" |
app.request | Містить методи роботи із запитами XHR. Перевірте розділ «Запит утиліт». |
app.serviceWorker.container | Контейнер Service Worker (navigator.serviceWorker) |
app.serviceWorker.registrations | Масив із зареєстрованими Service Worker |
app.online | Логічна властивість індикації стану підключення застосунку. (true, якщо онлайн) |
Методи
| Метод | Опис |
|---|---|
app.enableAutoDarkMode() | Вмикає автоматичне визначення темної теми |
app.disableAutoDarkMode() | Вимикає автоматичне визначення темної теми |
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) | Реєстрація service worker. Він повертає promise, яка буде вирішена за допомогою ServiceWorkerRegistration |
app.serviceWorker.unregister(registration) | Скасувати реєстрацію service worker. Він повертає promise, яка буде вирішена, коли Service Worker скасує реєстрацію. |
Приклад:
// Open panel
app.panel.open('left');
// Hide statusbar
app.statusbar.hide();
Події застосунку
| Подія | Аргумент | Опис |
|---|---|---|
init | Подія буде запущена під час ініціалізації застосунку. Автоматично після new Techno4() або після 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) | Подія буде ініційована після успішної реєстрації Service Worker |
serviceWorkerRegisterError | (error) | Подія буде ініційована, коли не вдасться зареєструвати Service Worker |
serviceWorkerUnregisterSuccess | (registration) | Подія буде ініційована, коли Service Worker успішно скасує реєстрацію. |
serviceWorkerUnregisterError | (registration, error) | Подія буде ініційована, коли не вдалося скасувати реєстрацію Service Worker |
online | Подія буде запущена, коли застосунок підключиться до мережі | |
offline | Подія буде запущена, коли застосунок перейде в автономний режим | |
connection | (isOnline) | Подія буде запущена при зміні стану мережі |
darkModeChange | (isDarkTheme) | Подію буде запущено після зміни бажаної колірної схеми пристрою. Він діє лише тоді, коли ввімкнено autoDarkMode |
Приклади:
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
:root {
--t4-theme-color: #007aff;
--t4-theme-color-rgb: 0, 122, 255;
--t4-theme-color-shade: #0066d6;
--t4-theme-color-tint: #298fff;
--t4-safe-area-left: 0px;
--t4-safe-area-right: 0px;
--t4-safe-area-top: 0px;
--t4-safe-area-bottom: 0px;
--t4-safe-area-outer-left: 0px;
--t4-safe-area-outer-right: 0px;
--t4-device-pixel-ratio: 1;
}
@supports (left: env(safe-area-inset-left)) {
:root {
--t4-safe-area-top: env(safe-area-inset-top);
--t4-safe-area-bottom: env(safe-area-inset-bottom);
}
:root .ios-left-edge,
:root .ios-edges,
:root .safe-area-left,
:root .safe-areas,
:root .popup,
:root .sheet-modal,
:root .panel-left {
--t4-safe-area-left: env(safe-area-inset-left);
--t4-safe-area-outer-left: env(safe-area-inset-left);
}
:root .ios-right-edge,
:root .ios-edges,
:root .safe-area-right,
:root .safe-areas,
:root .popup,
:root .sheet-modal,
:root .panel-right {
--t4-safe-area-right: env(safe-area-inset-right);
--t4-safe-area-outer-right: env(safe-area-inset-right);
}
:root .no-safe-areas,
:root .no-safe-area-left,
:root .no-ios-edges,
:root .no-ios-left-edge {
--t4-safe-area-left: 0px;
--t4-safe-area-outer-left: 0px;
}
:root .no-safe-areas,
:root .no-safe-area-right,
:root .no-ios-edges,
:root .no-ios-right-edge {
--t4-safe-area-right: 0px;
--t4-safe-area-outer-right: 0px;
}
}
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 2dppx) {
:root {
--t4-device-pixel-ratio: 2;
}
}
@media (-webkit-min-device-pixel-ratio: 3), (min-resolution: 3dppx) {
:root {
--t4-device-pixel-ratio: 3;
}
}
/*====================
Fonts & Bars
==================== */
:root {
--t4-font-size: 14px;
/*
--t4-bars-link-color: var(--t4-theme-color);
*/
--t4-bars-bg-image: none;
--t4-bars-translucent-opacity: 0.8;
--t4-bars-translucent-blur: 20px;
--t4-bars-shadow-bottom-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.25) 0%, rgba(0, 0, 0, 0.08) 40%, rgba(0, 0, 0, 0.04) 50%, rgba(0, 0, 0, 0) 90%, rgba(0, 0, 0, 0) 100%);
--t4-bars-shadow-top-image: linear-gradient(to top, rgba(0, 0, 0, 0.25) 0%, rgba(0, 0, 0, 0.08) 40%, rgba(0, 0, 0, 0.04) 50%, rgba(0, 0, 0, 0) 90%, rgba(0, 0, 0, 0) 100%);
--t4-bars-text-color: #000;
--t4-bars-bg-color: #t4t4f8;
--t4-bars-bg-color-rgb: 247, 247, 248;
}
:root .dark,
:root.dark {
--t4-bars-text-color: #fff;
}
.ios {
--t4-font-family: -apple-system, SF Pro Text, SF UI Text, system-ui, Helvetica Neue, Helvetica, Arial, sans-serif;
--t4-line-height: 1.4;
--t4-text-color: #000;
--t4-bars-border-color: rgba(0, 0, 0, 0.25);
}
.ios .dark,
.ios.dark {
--t4-text-color: #fff;
--t4-bars-bg-color: #121212;
--t4-bars-bg-color-rgb: 19, 19, 19;
--t4-bars-border-color: rgba(255, 255, 255, 0.1);
}
.md {
--t4-font-family: Roboto, system-ui, Noto, Helvetica, Arial, sans-serif;
--t4-line-height: 1.5;
--t4-bars-border-color: transparent;
--t4-text-color: #212121;
}
.md .dark,
.md.dark {
--t4-text-color: rgba(255, 255, 255, 0.87);
--t4-bars-bg-color: #202020;
}
.aurora {
--t4-font-family: -apple-system, system-ui, Helvetica, Arial, sans-serif;
--t4-line-height: 1.5;
--t4-text-color: #000;
--t4-bars-border-color: rgba(0, 0, 0, 0.2);
}
.aurora .dark,
.aurora.dark {
--t4-text-color: #fff;
--t4-bars-bg-color: #202020;
--t4-bars-border-color: rgba(255, 255, 255, 0.1);
}
Techno4 Framework
- Get Started
- Introduction
- Kitchen Sink
- Installation
- Package Structure
- App HTML Layout
- RTL Layout
- Initialize App
- Events
- Router Component
- Routes
- Store
- App/Core
- Accordion/Collapsible
- Action Sheet
- Area chart
- Autocomplete
- Badge
- Block/Content Block
- Breadcrumbs
- Button
- Calendar/Date Picker
- Cards
- Checkbox
- Chips
- Color Picker
- Contact List
- Data Table
- Dialog
- Floating action button
- Form
- Gauge
- Icons
- Inputs / Form Inputs
- Grid /Layout Grid
- Link
- List Button
- List View
- List Index
- Login Screen
- Menu List
- Messagebar
- Navbar
- Messages
- Notification
- Panel/Side Panels
- Photo Browser
- Picker
- Pie Chart
- Popover
- Popup
- Preloader
- Progressbar
- Pull to Refresh
- Radio
- Range Slider
- Searchbar