Потягніть, щоб оновити(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
● Метод повертає створений екземпляр PTR Використовуйте цей метод, лише якщо ви додали вміст ptr після ініціалізації сторінки або якщо ви хочете ввімкнути його пізніше. В іншому випадку, якщо на сторінці |
app.ptr.destroy( el ) | знищити екземпляр PTR
● |
app.ptr.get( el ) | отримати екземпляр PTR за елементом HTML
● Метод повертає екземпляр PTR |
app.ptr.done( el ) | скидання стану PTR на вказаному елементі вмісту PTR
● |
app.ptr.refresh( el ) | запускає PTR на вказаному елементі вмісту PTR
● |
Методи та властивості PTR
app.ptr.get
, ми ініціалізуємо екземпляр PTR з корисними методами та властивостями:// ініціалізувати PTR вручну
var ptr = app.ptr.create('.ptr-content');
// або використовуючи get щоб отримати вже створений примірник
var ptr = app.ptr.get('.ptr-content');
Властивості
Властивість | Опис |
---|---|
ptr.app | Посилання на глобальний екземпляр застосунку |
ptr.el | Елемент PTR HTML ( ptr-content ) |
ptr.$el | Екземпляр Dom64 з елементом PTR HTML ( ptr-content ) |
Методи
Метод | Опис |
---|---|
ptr.done() | Скинути стан PTR |
ptr.refresh() | Активувати PTR |
ptr.destroy() | Знищити екземпляр PTR і видалити обробники подій PTR із зазначеного елемента HTML |
Події PTR
Події DOM
Подія | Об'єкт | Опис |
---|---|---|
ptr:pullstart | PTR вміст
| Подія буде ініційована, коли ви почнете переміщати елемент "Pull", щоб оновити вміст |
ptr:pullmove | PTR вміст
| Подія буде ініційована, коли ви переміщуєте Pull, щоб оновити вміст |
ptr:pullend | PTR вміст
| Подія буде ініційована, коли ви відпустите кнопку Pull, щоб оновити вміст |
ptr:refresh | PTR вміст
| Подія буде ініційована, коли PTR переходить у стан «оновлення».
|
ptr:done | PTR вміст
| Подія буде ініційована після того, як буде виконано pull to refresh, і він повернеться до початкового стану (після виклику ptr.done методу) |
ptr:beforedestroy | PTR вміст
| Подія буде запущена безпосередньо перед тим, як екземпляр PTR буде знищено |
Події екземплярів застосунку та PTR
ptr
.Подія | Аргумент | Опис | Об'єкт |
---|---|---|---|
pullStart | (el) | Подія буде ініційована, коли ви почнете переміщати "Pull", щоб оновити вміст. Як аргумент обробник події отримує елемент PTR | ptr |
ptrPullStart | (el) | Подія буде ініційована, коли ви почнете переміщати "Pull", щоб оновити вміст. Як аргумент обробник події отримує елемент PTR | app |
pullMove | (el, data) | Подія буде ініційована, коли ви переміщуєте "Pull", щоб оновити вміст. Як аргумент обробник події отримує елемент PTR і дані PTR, що містять такі властивості:
● ● ● ● | PTR |
ptrPullMove | (el, data) | Подія буде ініційована, коли ви переміщуєте "Pull", щоб оновити вміст. Як аргумент обробник події отримує елемент PTR і дані PTR, що містять такі властивості:
● ● ● ● | app |
pullEnd | (el, data) | Подія буде ініційована, коли ви відпустите кнопку Pull, щоб оновити вміст. Як аргумент обробник події отримує елемент PTR | PTR |
ptrPullEnd | (el, data) | Подія буде ініційована, коли ви відпустите кнопку Pull, щоб оновити вміст. Як аргумент обробник події отримує елемент PTR | app |
refresh | (el, done) | Подія буде ініційована, коли PTR переходить у стан «оновлення». Як аргумент обробник події отримує елемент PTR і done функцію для скидання стану PTR | ptr |
ptrRefresh | (el, done) | Подія буде ініційована, коли PTR переходить у стан «оновлення». Як аргумент обробник події отримує елемент PTR і done функцію для скидання стану PTR | app |
done | (el) | Подія буде ініційована після того, як буде виконано pull to refresh і воно повернеться до початкового стану (після виклику ptr.done методу). Як аргумент обробник події отримує елемент PTR | ptr |
ptrDone | (el) | Подія буде ініційована після того, як буде виконано pull to refresh і воно повернеться до початкового стану (після виклику ptr.done методу). Як аргумент обробник події отримує елемент PTR | app |
beforeDestroy | (ptr) | Подія буде запущена безпосередньо перед тим, як екземпляр PTR буде знищено. В якості аргументу обробник події отримує екземпляр PTR | ptr |
ptrBeforeDestroy | (ptr) | Подія буде запущена безпосередньо перед тим, як екземпляр PTR буде знищено. В якості аргументу обробник події отримує екземпляр PTR | app |
Змінні 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 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