Потягніть, щоб оновити(PTR)
Навігація
Потягніть, щоб оновити
Макет PTR
<div class="page">
<!-- Вміст сторінки повинен мати додатковий клас "ptr-content" -->
<div class="page-content ptr-content" data-ptr-distance="55" data-ptr-mousewheel="true">
<!-- попередній завантажувач pull to refresh за замовчуванням -->
<div class="ptr-preloader">
<div class="preloader"></div>
<div class="ptr-arrow"></div>
</div>
<!-- звичайний контент нижче -->
<div class="list">
...
</div>
<!-- вкладений елемент з прокруткою -->
<div class="my-scolling-content ptr-watch-scrollable">
...
</div>
<!-- ще один вкладений елемент з прокруткою -->
<div class="another-scolling-content ptr-ignore">
...
</div>
</div>
</div>
-
ptr-content— клас. Це потрібно, щоб увімкнути функцію оновлення -
div class="ptr-preloader"— прихований шар із потягуванням для оновлення візуальних елементів: попереднього завантажувача та стрілки -
data-ptr-distance="55"— додатковий атрибут, який дозволяє встановлювати настроювану відстань спрацьовування для оновлення. За замовчуванням (якщо не вказано) це44 пікселя -
data-ptr-mousewheel="true"— додатковий атрибут, який дозволяє потягнути для оновлення за допомогою коліщатка миші (для настільних застосунків). Працює тільки для PTR top. -
ptr-watch-scrollable— додатковий клас, який необхідно додати до вкладених елементів, які можна прокручувати, щоб запобігти перетягування для оновлення при прокручуванні таких елементів -
ptr-ignore— додатковий клас, який необхідно додати до вкладених елементів, які можна прокручувати, або інших елементів, які запобігатимуть перетягненню для оновлення при прокручуванні таких елементів або переміщенні дотиком
PTR знизу
ptr-preloader елемент у нижню частину вмісту сторінки та додати додатковий ptr-bottom клас, щоб оновити вміст:<div class="page">
<!-- ptr-контент повинен мати додатковий клас "ptr-bottom" -->
<div class="page-content ptr-content ptr-bottom">
<div class="list">
...
</div>
<!-- Pull to refresh попередній завантажувач переміщується вниз -->
<div class="ptr-preloader">
<div class="preloader"></div>
<div class="ptr-arrow"></div>
</div>
</div>
</div>
PTR послідовність
ptr-content , ptr-preloader отримує додатковий клас ptr-pull-down.
Коли користувач витягує ptr-content на відстань більше 44 пікселів (коли ptr-preloader буде повністю видимим), тоді ptr-preloader отримає додатковий клас ptr-pull-up , який змінює обертання стрілки, щоб сповістити користувача про дію оновлення під час випуску.
Коли користувач відпускає pull для оновлення вмісту, коли він перебуває в стані «ptr-pull-up», тоді ptr-preloader отримає додатковий клас ptr-refreshing . У стані «оновлення» стрілка буде прихована, а користувач побачить індикатор попереднього завантаження. На цьому етапі вам, ймовірно, потрібно виконати запит Ajax і оновити вміст сторінки.
Методи застосунку PTR
| Метод | Опис | Тип |
|---|---|---|
app.ptr.create( el) | ініціалізація PTR у вказаному контейнері елемента HTML
| HTMLElement |
app.ptr.destroy( el) | знищити екземпляр PTR
| HTMLElement |
app.ptr.get( el) | отримати екземпляр PTR за елементом HTML
| HTMLElement |
app.ptr.done( el) | скидання стану PTR на вказаному елементі вмісту PTR
| HTMLElement |
app.ptr.refresh( el) | запускає PTR на вказаному елементі вмісту PTR
| HTMLElement |
Методи та властивості PTR
app.ptr.get, ми ініціалізуємо екземпляр PTR з корисними методами та властивостями:// ініціалізувати PTR вручну
var ptr = app.ptr.create('.ptr-content');
// або використовуючи get щоб отримати вже створений примірник
var ptr = app.ptr.get('.ptr-content');
Властивості
| Властивість | Опис | Тип |
|---|---|---|
ptr.app | Посилання на глобальний екземпляр застосунку | object |
ptr.el | Елемент PTR HTML ( ptr-content) | HTMLElement |
ptr.$el | Екземпляр Dom64 з елементом PTR HTML ( ptr-content) | HTMLElement |
Методи
| Метод | Опис | Тип |
|---|---|---|
ptr.done() | Скинути стан PTR | object |
ptr.refresh() | Активувати PTR | object |
ptr.destroy() | Знищити екземпляр PTR і видалити обробники подій PTR із зазначеного елемента HTML | function |
Події PTR
Події DOM
| Подія | Об'єкт | Опис | Тип |
|---|---|---|---|
ptr:pullstart | PTR вміст
| Подія буде ініційована, коли ви почнете переміщати елемент "Pull", щоб оновити вміст | string |
ptr:pullmove | PTR вміст
| Подія буде ініційована, коли ви переміщуєте Pull, щоб оновити вміст | string |
ptr:pullend | PTR вміст
| Подія буде ініційована, коли ви відпустите кнопку Pull, щоб оновити вміст | string |
ptr:refresh | PTR вміст
| Подія буде ініційована, коли PTR переходить у стан «оновлення».
| string |
ptr:done | PTR вміст
| Подія буде ініційована після того, як буде виконано pull to refresh, і він повернеться до початкового стану (після виклику ptr.done методу) | string |
ptr:beforedestroy | PTR вміст
| Подія буде запущена безпосередньо перед тим, як екземпляр PTR буде знищено | string |
Події екземплярів застосунку та PTR
ptr.| Подія | Аргумент | Опис | Тип |
|---|---|---|---|
pullStart | (el) | Подія буде ініційована, коли ви почнете переміщати "Pull", щоб оновити вміст. Як аргумент обробник події отримує елемент PTR | undefined |
ptrPullStart | (el) | Подія буде ініційована, коли ви почнете переміщати "Pull", щоб оновити вміст. Як аргумент обробник події отримує елемент PTR | undefined |
pullMove | (el, data) | Подія буде ініційована, коли ви переміщуєте "Pull", щоб оновити вміст. Як аргумент обробник події отримує елемент PTR і дані PTR, що містять такі властивості:
| undefined |
ptrPullMove | (el, data) | Подія буде ініційована, коли ви переміщуєте "Pull", щоб оновити вміст. Як аргумент обробник події отримує елемент PTR і дані PTR, що містять такі властивості:
| undefined |
pullEnd | (el, data) | Подія буде ініційована, коли ви відпустите кнопку Pull, щоб оновити вміст. Як аргумент обробник події отримує елемент PTR | undefined |
ptrPullEnd | (el, data) | Подія буде ініційована, коли ви відпустите кнопку Pull, щоб оновити вміст. Як аргумент обробник події отримує елемент PTR | undefined |
refresh | (el, done) | Подія буде ініційована, коли PTR переходить у стан «оновлення». Як аргумент обробник події отримує елемент PTR і done функцію для скидання стану PTR | undefined |
ptrRefresh | (el, done) | Подія буде ініційована, коли PTR переходить у стан «оновлення». Як аргумент обробник події отримує елемент PTR і done функцію для скидання стану PTR | undefined |
done | (el) | Подія буде ініційована після того, як буде виконано pull to refresh і воно повернеться до початкового стану (після виклику ptr.done методу). Як аргумент обробник події отримує елемент PTR | undefined |
ptrDone | (el) | Подія буде ініційована після того, як буде виконано pull to refresh і воно повернеться до початкового стану (після виклику ptr.done методу). Як аргумент обробник події отримує елемент PTR | undefined |
beforeDestroy | (ptr) | Подія буде запущена безпосередньо перед тим, як екземпляр PTR буде знищено. В якості аргументу обробник події отримує екземпляр PTR | undefined |
ptrBeforeDestroy | (ptr) | Подія буде запущена безпосередньо перед тим, як екземпляр PTR буде знищено. В якості аргументу обробник події отримує екземпляр PTR | undefined |
Змінні CSS
.ios {
--t4-ptr-preloader-size: 28px;
--t4-ptr-size: 44px;
}
.md {
--t4-ptr-preloader-size: 22px;
--t4-ptr-size: 40px;
}
.md,
.md .dark,
.md [class*='color-'] {
--t4-ptr-preloader-bg-color: var(--t4-md-surface-1);
--t4-ptr-preloader-color: var(--t4-md-primary);
}
Приклади
PTR вгорі ("top")
<template>
<div class="page">
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner">
<div class="title">Pull To Refresh</div>
</div>
</div>
<div class="page-content ptr-content" @ptr:refresh=${loadMore}>
<div class="ptr-preloader">
<div class="preloader"></div>
<div class="ptr-arrow"></div>
</div>
<div class="list media-list">
<ul>
${items.map((item) => $h`
<li class="item-content">
<div class="item-media"><img src=${item.picURL} width="44" /></div>
<div class="item-inner">
<div class="item-title-row">
<div class="item-title">${item.song}</div>
</div>
<div class="item-subtitle">${item.author}</div>
</div>
</li>
`)}
</ul>
</div>
</div>
</div>
</template>
<script>
export default (props, { $update }) => {
// Фіктивний вміст
const songs = ['Yellow Submarine', 'Don\'t Stop Me Now', 'Billie Jean', 'Californication'];
const authors = ['Beatles', 'Queen', 'Michael Jackson', 'Red Hot Chili Peppers'];
let items = [
{
picURL: 'https://cdn.techno4.io/placeholder/abstract-88x88-1.jpg',
song: 'Yellow Submarine',
author: 'Beatles',
},
{
picURL: 'https://cdn.techno4.io/placeholder/abstract-88x88-2.jpg',
song: 'Don\'t Stop Me Now',
author: 'Queen',
},
{
picURL: 'https://cdn.techno4.io/placeholder/abstract-88x88-3.jpg',
song: 'Billie Jean',
author: 'Michael Jackson',
},
]
const loadMore = (e, done) => {
// Емулювати завантаження 2 с
setTimeout(() => {
const picURL = 'https://cdn.techno4.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({
picURL,
song,
author,
});
// Оновіть стан для повторного відтворення
$update();
// Коли завантаження завершено, нам потрібно скинути його
done();
}, 2000);
}
return $render;
}
</script>
PTR внизу ("Bottom")
<template>
<div class="page">
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner">
<div class="title">Pull To Refresh Bottom</div>
</div>
</div>
<div class="page-content ptr-content ptr-bottom" @ptr:refresh=${loadMore}>
<div class="ptr-preloader">
<div class="preloader"></div>
<div class="ptr-arrow"></div>
</div>
<div class="list media-list">
<ul>
${items.map((item) => $h`
<li class="item-content">
<div class="item-media"><img src=${item.picURL} width="44" /></div>
<div class="item-inner">
<div class="item-title-row">
<div class="item-title">${item.song}</div>
</div>
<div class="item-subtitle">${item.author}</div>
</div>
</li>
`)}
</ul>
</div>
</div>
</div>
</template>
<script>
export default (props, { $update }) => {
// Фіктивний вміст
const songs = ['Yellow Submarine', 'Don\'t Stop Me Now', 'Billie Jean', 'Californication'];
const authors = ['Beatles', 'Queen', 'Michael Jackson', 'Red Hot Chili Peppers'];
let items = [
{
picURL: 'https://cdn.techno4.io/placeholder/abstract-88x88-1.jpg',
song: 'Yellow Submarine',
author: 'Beatles',
},
{
picURL: 'https://cdn.techno4.io/placeholder/abstract-88x88-2.jpg',
song: 'Don\'t Stop Me Now',
author: 'Queen',
},
{
picURL: 'https://cdn.techno4.io/placeholder/abstract-88x88-3.jpg',
song: 'Billie Jean',
author: 'Michael Jackson',
},
]
const loadMore = (e, done) => {
// Емулювати завантаження 2 с
setTimeout(() => {
const picURL = 'https://cdn.techno4.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({
picURL,
song,
author,
});
// Оновіть стан для повторного відтворення
$update();
// Коли завантаження завершено, нам потрібно скинути його
done();
}, 2000);
}
return $render;
}
</script>
- TECHNO4 FRAMEWORK2
- Get Started
- Boonker
- 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
- Segmented
- Sheet Modal
- Skeleton
- Introduction
- Page
- Infinite Scroll
- Tabs
- Swiper
- Smart Select
- Sortable List
- Statusbar
- Stepper
- Subnavbar
- Swipeout
- Text Editor
- Timeline
- Toast
- Toggle
- Toolbar & Tabbar
- Tooltip
- Touch Ripple
- Treeview
- Virtual List
- Elevation
- Apache Cordova Integration
- Hardware: Web Audio API & Synth
- Hardware: Web MIDI Inspector
- Hardware: Web Serial UART Terminal
- Threads Studio: Visual Workflows
- Techno4 CLI: Scaffolding Reference
- DOM64: Selector Engine
- Rollup & Vite Component Compiler
- Початок роботи
- Techno4 Total
- Threads Components
- Types