Індекс списку
Індекс списку дозволяє миттєво отримати доступ до певного розділу перегляду списку без прокручування кожного розділу.
Макет індексу списку
Макет індексу єдиного списку досить простий:
<div class="page">
  <div class="navbar">...</div>
  <!--Елемент List Index має бути прямим дочірнім елементом сторінки -->
  <div class="list-index"></div>
  <!-- Прокручуваний вміст сторінки-->
  <div class="page-content">...</div>
</div>Перелік методів застосунку Індекс списку
Давайте розглянемо пов’язані методи роботи програми з індексом списку:
app.listIndex.create(parameters)- створити екземпляр List Index
●	parameters - object. - Об'єкт зі списком параметрів індексу
Метод повертає створений екземпляр List Index
app.listIndex.destroy(el)- знищити екземпляр List Index
●	el - HTMLElement or string (with CSS Selector) or object. - Елемент List Index або екземпляр List Index для знищення.
app.listIndex.get(el)- отримати екземпляр List Index за елементом HTML.
●	el - HTMLElement or string (with CSS Selector). - Елемент індексу списку.
Метод повертає екземпляр List Index
Список параметрів індексу
Тепер давайте подивимося на список доступних параметрів, необхідних для створення списку індексу:
| Параметр | За замовчуванням | Опис | Тип | 
|---|---|---|---|
| el | Елемент індексу списку. HTMLElement або рядок із CSS-селектором елемента індексу списку | HTMLElement string | |
| listEl | Пов’язаний елемент перегляду списку. HTMLElement або рядок із CSS-селектором елемента List View | HTMLElement string | |
| indexes | auto | Масив з індексами. Якщо не передано, він автоматично згенерує його на основі елементів  item-dividerіlist-group-titleвсередині переданого елементаList Viewу параметріlistEl | String array | 
| scrollList | true | Автоматично прокрутить пов’язаний список до вибраного покажчика | boolean | 
| label | false | Вмикає спливаючу підказку з вибраним індексом, коли ви проводите пальцем по індексу списку | boolean | 
| iosItemHeight | 14 | Висота одного елемента індексу. Необхідно розрахувати динамічний індекс і кількість індексів, які поміщаються на екрані. Для теми iOS | number | 
| mdItemHeight | 14 | Висота одного елемента індексу. Необхідно розрахувати динамічний індекс і кількість індексів, які поміщаються на екрані. Для теми MD | number | 
| auroraItemHeight | 14 | Висота одного елемента індексу. Необхідно розрахувати динамічний індекс і кількість індексів, які поміщаються на екрані. Для теми «Аврора». | number | 
| Параметр | Опис | Тип | 
|---|---|---|
| on | Об'єкт з обробниками подій. Наприклад: | object | 
var listIndex = app.listIndex.create({
  el: '.list-index',
  on: {
    select: function () {
      console.log('Index selected')
    },
  },
})Перелік методів і властивостей індексу
Отже, щоб створити індекс списку, ми повинні викликати:
var listIndex = app.listIndex.create({ /* parameters */ })Після цього у нас є його ініціалізований екземпляр (наприклад, змінна 
listIndex у прикладі вище) з корисними методами та властивостями:Властивості
| Властивість | Опис | 
|---|---|
| listIndex.app | Посилання на глобальний екземпляр застосунку | 
| listIndex.el | Елемент HTML індексу списку | 
| listIndex.$el | Примірник Dom7 з елементом HTML індексу списку | 
| listIndex.ul | Динамічно створений внутрішній елемент HTML  <ul> | 
| listIndex.$ul | Екземпляр Dom7 із динамічно створеним внутрішнім елементом HTML  <ul> | 
| listIndex.listEl | HTML-елемент пов’язаного списку, переданий у параметрі  listEl | 
| listIndex.$listEl | Примірник Dom7 із пов’язаним HTML-елементом List, переданим у параметрі  listEl | 
| listIndex.indexes | Масив з обчисленими індексами | 
| listIndex.params | Список параметрів індексу | 
Методи
| Метод | Опис | 
|---|---|
| listIndex.update() | Перераховує індекси, розміри та повторно відображає індекс списку | 
| listIndex.scrollListToIndex(itemContent) | Прокручує пов’язаний список до вказаного вмісту покажчика | 
| listIndex.destroy() | Знищує екземпляр індексу списку | 
| listIndex.on(event, handler) | Додати обробник подій | 
| listIndex.once(event, handler) | Додати обробник подій, який буде видалено після запуску | 
| listIndex.off(event, handler) | Видалити обробник подій | 
| listIndex.off(event) | Видалити всі обробники для вказаної події | 
| listIndex.emit(event, ...args) | Запустити подію на примірнику індексу  | 
Список подій індексу
Індекс списку запускатиме такі події DOM в елементі індексу списку та події в екземплярі застосунку та індексу списку:
Події DOM
| Подія | Об'єкт | Опис | 
|---|---|---|
| listindex:select | Елемент індексу списку  
 | Подія буде ініційована під час вибору індексу, а не клацанням або гортанням | 
| listindex:click | Елемент індексу списку  
 | Подія буде ініційована після клацання індексу | 
| listindex:beforedestroy | Елемент індексу списку  
 | Подія буде ініційована безпосередньо перед тим, як екземпляр List Index буде знищено | 
Події екземплярів застосунку та індексу списку
Екземпляр List Index генерує події як для власного екземпляра, так і для екземпляра застосунку. Події екземплярів за стосунку мають однакові назви з префіксом 
listIndex.| Подія | Аргумент | Опис | Об'єкт | 
|---|---|---|---|
| select | (listIndex, itemContent) | Подія буде ініційована під час вибору індексу, а не клацанням або гортанням. Як аргумент обробник події отримує екземпляр індексу списку та вміст вибраного елемента індексу | listIndex | 
| listIndexSelect | (listIndex, itemContent) | Подія буде ініційована під час вибору індексу, а не клацанням або гортанням. Як аргумент обробник події отримує екземпляр індексу списку та вміст вибраного елемента індексу | app | 
| click | (listIndex, itemContent) | Подія буде ініційована після клацання індексу. Як аргумент обробник події отримує екземпляр індексу списку та вміст елемента індексу на який  клацнули  | listIndex | 
| listIndexClick | (listIndex, itemContent) | Подія буде ініційована після клацання індексу. Як аргумент обробник події отримує екземпляр індексу списку та вміст елемента індексу на який  клацнули  | app | 
| beforeDestroy | (listIndex) | Подія буде ініційована безпосередньо перед тим, як екземпляр List Index буде знищено. Як аргумент обробник події отримує екземпляр індексу списку | listIndex | 
| listIndexBeforeDestroy | (listIndex) | Подія буде ініційована безпосередньо перед тим, як екземпляр List Index буде знищено. Як аргумент обробник події отримує екземпляр індексу списку | app | 
Автоматична ініціалізація індексу списку
Якщо вам не потрібно використовувати API індексу списку, а ваш індекс списку знаходиться всередині сторінки та представлений у DOM у момент ініціалізації сторінки, тоді його можна автоматично ініціалізувати, просто додавши додатковий клас 
list-index-init:<!-- Додайте клас ініціалізації списку-індексу -->
<div class="list-index list-index-init"></div>
У цьому випадку, якщо вам потрібно отримати доступ до створеного екземпляра List Index, ви можете скористатися методом програми 
app.listIndex.get:var listIndex = app.listIndex.get('.list-index');
var indexes = listIndex.indexes;
// зробити щось з індексамиПід час використання автоматичної ініціалізації може знадобитися передати додаткові параметри. ви можете встановити всі доступні параметри за допомогою атрибутів даних (
data-)в елементі індексу списку:<div class="page">
  ...
  <!-- параметри, задані за допомогою атрибутів даних -->
  <div class="list-index"
    data-list-el=".contacts-list"
    data-label="true"
    data-indexes="auto"
  ></div>
  <div class="page-content">
    <div class="list contacts-list">
      ...
    </div>
  </div>
</div>Змінні CSS
Нижче наведено список пов’язаних змінних CSS (спеціальні властивості CSS).
Зауважте, що коментовані змінні не вказано за замовчуванням, і в цьому випадку вони повертаються до їхніх значень.
:root {
  --t4-list-index-width: 16px;
  --t4-list-index-font-size: 11px;
  --t4-list-index-font-weight: 600;
  /* --t4-list-index-text-color: var(--t4-theme-color); */
  --t4-list-index-item-height: 14px;
  --t4-list-index-label-text-color: #fff;
  /* --t4-list-index-label-bg-color: var(--t4-theme-color); */
  --t4-list-index-label-font-weight: 500;
}
.ios {
  --t4-list-index-label-size: 44px;
  --t4-list-index-label-font-size: 17px;
  --t4-list-index-skip-dot-size: 6px;
}
.md {
  --t4-list-index-label-size: 56px;
  --t4-list-index-label-font-size: 20px;
  --t4-list-index-skip-dot-size: 4px;
}
.aurora {
  --t4-list-index-font-size: 12px;
  --t4-list-index-label-size: 32px;
  --t4-list-index-label-font-size: 12px;
  --t4-list-index-label-font-weight: 600;
  --t4-list-index-skip-dot-size: 4px;
}Приклади:
<template>
  <div class="page navbar-fixed" data-page="home">
    <div class="navbar">
      <div class="navbar-bg"></div>
      <div class="navbar-inner">
        <div class="title">List Index</div>
      </div>
    </div>
    <div class="list-index"></div>
    <div class="page-content">
      <div class="list simple-list contacts-list indexed-list-init">
        <div class="list-group">
          <ul>
            <li class="list-group-title">A</li>
            <li>Aaron</li>
            <li>Adam</li>
            <li>Aiden</li>
            <li>Albert</li>
            <li>Alex</li>
            <li>Alexander</li>
            <li>Alfie</li>
            <li>Archie</li>
            <li>Arthur</li>
            <li>Austin</li>
          </ul>
        </div>
        <div class="list-group">
          <ul>
            <li class="list-group-title">B</li>
            <li>Benjamin</li>
            <li>Blake</li>
            <li>Bobby</li>
          </ul>
        </div>
        <div class="list-group">
          <ul>
            <li class="list-group-title">C</li>
            <li>Caleb</li>
            <li>Callum</li>
            <li>Cameron</li>
            <li>Charles</li>
            <li>Charlie</li>
            <li>Connor</li>
          </ul>
        </div>
        <div class="list-group">
          <ul>
            <li class="list-group-title">D</li>
            <li>Daniel</li>
            <li>David</li>
            <li>Dexter</li>
            <li>Dylan</li>
          </ul>
        </div>
        <div class="list-group">
          <ul>
            <li class="list-group-title">E</li>
            <li>Edward</li>
            <li>Elijah</li>
            <li>Elliot</li>
            <li>Elliott</li>
            <li>Ethan</li>
            <li>Evan</li>
          </ul>
        </div>
        <div class="list-group">
          <ul>
            <li class="list-group-title">F</li>
            <li>Felix</li>
            <li>Finlay</li>
            <li>Finley</li>
            <li>Frankie</li>
            <li>Freddie</li>
            <li>Frederick</li>
          </ul>
        </div>
        <div class="list-group">
          <ul>
            <li class="list-group-title">G</li>
            <li>Gabriel</li>
            <li>George</li>
          </ul>
        </div>
        <div class="list-group">
          <ul>
            <li class="list-group-title">H</li>
            <li>Harley</li>
            <li>Harrison</li>
            <li>Harry</li>
            <li>Harvey</li>
            <li>Henry</li>
            <li>Hugo</li>
          </ul>
        </div>
        <div class="list-group">
          <ul>
            <li class="list-group-title">I</li>
            <li>Ibrahim</li>
            <li>Isaac</li>
          </ul>
        </div>
        <div class="list-group">
          <ul>
            <li class="list-group-title">J</li>
            <li>Jack</li>
            <li>Jacob</li>
            <li>Jake</li>
            <li>James</li>
            <li>Jamie</li>
            <li>Jayden</li>
            <li>Jenson</li>
            <li>Joseph</li>
            <li>Joshua</li>
            <li>Jude</li>
          </ul>
        </div>
        <div class="list-group">
          <ul>
            <li class="list-group-title">K</li>
            <li>Kai</li>
            <li>Kian</li>
          </ul>
        </div>
        <div class="list-group">
          <ul>
            <li class="list-group-title">L</li>
            <li>Leo</li>
            <li>Leon</li>
            <li>Lewis</li>
            <li>Liam</li>
            <li>Logan</li>
            <li>Louie</li>
            <li>Louis</li>
            <li>Luca</li>
            <li>Lucas</li>
            <li>Luke</li>
          </ul>
        </div>
        <div class="list-group">
          <ul>
            <li class="list-group-title">M</li>
            <li>Mason</li>
            <li>Matthew</li>
            <li>Max</li>
            <li>Michael</li>
            <li>Mohammad</li>
            <li>Mohammed</li>
            <li>Muhammad</li>
          </ul>
        </div>
        <div class="list-group">
          <ul>
            <li class="list-group-title">N</li>
            <li>Nathan</li>
            <li>Noah</li>
          </ul>
        </div>
        <div class="list-group">
          <ul>
            <li class="list-group-title">O</li>
            <li>Oliver</li>
            <li>Ollie</li>
            <li>Oscar</li>
            <li>Owen</li>
          </ul>
        </div>
        <div class="list-group">
          <ul>
            <li class="list-group-title">R</li>
            <li>Reuben</li>
            <li>Riley</li>
            <li>Robert</li>
            <li>Ronnie</li>
            <li>Rory</li>
            <li>Ryan</li>
          </ul>
        </div>
        <div class="list-group">
          <ul>
            <li class="list-group-title">S</li>
            <li>Samuel</li>
            <li>Sebastian</li>
            <li>Seth</li>
            <li>Sonny</li>
            <li>Stanley</li>
          </ul>
        </div>
        <div class="list-group">
          <ul>
            <li class="list-group-title">T</li>
            <li>Teddy</li>
            <li>Theo</li>
            <li>Theodore</li>
            <li>Thomas</li>
            <li>Toby</li>
            <li>Tommy</li>
            <li>Tyler</li>
          </ul>
        </div>
        <div class="list-group">
          <ul>
            <li class="list-group-title">W</li>
            <li>William</li>
          </ul>
        </div>
        <div class="list-group">
          <ul>
            <li class="list-group-title">Z</li>
            <li>Zachary</li>
          </ul>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
  export default (props, { $t4, $on }) => {
    $on('pageInit', () => {
      var listIndex = $t4.listIndex.create({
        // ".list-index" element
        el: '.list-index',
        // List el where to look indexes and scroll for
        listEl: '.contacts-list',
        // Generate indexes automatically based on ".list-group-title" and ".item-divider"
        indexes: 'auto',
        // Scroll list on indexes click and touchmove
        scrollList: true,
        // Enable bubble label when swiping over indexes
        label: true,
      });
    })
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