Потягніть, щоб оновити(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