Компонент ScrollView: прокрутка контента

В PlayCanvas компонент ScrollView предоставляет удобное средство для создания прокручиваемых областей внутри интерфейса. Это позволяет отображать большое количество контента в ограниченной области экрана, не перегружая пользовательский интерфейс. Компонент поддерживает как вертикальную, так и горизонтальную прокрутку, что делает его универсальным инструментом для работы с динамическими интерфейсами в играх или приложениях.

Основные принципы работы

Компонент ScrollView работает путём создания области, которая может содержать элементы, выходящие за пределы видимой области. Когда пользователь прокручивает содержимое, эти элементы перемещаются в пределах заданного контейнера. Система прокрутки в PlayCanvas интуитивно понятна и предоставляет гибкие способы управления прокручиваемым контентом.

Структура компонента

Компонент ScrollView состоит из нескольких важных частей:

  • Контейнер прокрутки (scroll container) — это область, в пределах которой отображаются элементы, подлежащие прокрутке.
  • Контент (content) — это объекты или элементы, которые находятся в области прокрутки. Обычно этот элемент больше по размеру, чем сам контейнер, и именно он будет прокручиваться.
  • Ползунки прокрутки (scrollbars) — визуальные элементы, отображающие текущее положение прокручиваемого контента и позволяющие пользователю взаимодействовать с ним.

В PlayCanvas можно использовать как стандартные скрипты, так и настраивать параметры через инспектор для получения нужного эффекта.

Создание ScrollView

Для создания компонента прокрутки в PlayCanvas необходимо выполнить следующие шаги:

  1. Добавление элемента в сцену В сцене создаётся пустой объект, к которому добавляется компонент ScrollView. Это можно сделать через инспектор или программно.

    Пример добавления компонента программно:

    var scrollView = new pc.Entity();
    scrollView.addComponent('scrollview', {
        width: 500,
        height: 300
    });
  2. Настройка контента Внутри объекта ScrollView создается контейнер для контента. Он должен быть размером больше, чем сам контейнер прокрутки, чтобы обеспечить прокрутку. Контент может состоять из различных элементов UI, таких как кнопки, изображения и текст.

    Пример:

    var content = new pc.Entity();
    content.setLocalScale(1, 5, 1); // Увеличиваем высоту контента для прокрутки
    scrollView.addChild(content);
  3. Добавление ползунков (если требуется) Если необходимо, можно добавить ползунки для прокрутки. Они будут автоматически отображаться, если контент превышает размер контейнера.

Параметры компонента ScrollView

При настройке компонента важно учитывать следующие ключевые параметры:

  • width и height — задают размеры контейнера прокрутки.
  • scrollSpeed — скорость прокрутки. Значение по умолчанию — 1.
  • invert — если параметр установлен в true, прокрутка будет происходить в обратном направлении.
  • autoHide — автоматическое скрытие ползунков прокрутки, если они не используются.

Пример с настройками компонента:

scrollView.addComponent('scrollview', {
    width: 600,
    height: 400,
    scrollSpeed: 1.5,
    invert: false,
    autoHide: true
});

Обработка событий прокрутки

Компонент ScrollView предоставляет несколько событий, которые могут быть использованы для отслеживания изменений состояния прокрутки. Наиболее часто используемыми являются события:

  • scroll — вызывается при каждом изменении прокрутки.
  • scrollend — активируется, когда прокрутка заканчивается.

Пример обработки события:

scrollView.element.on('scroll', function (event) {
    console.log('Прокрутка изменена');
});

Управление прокруткой программно

Для программного управления прокруткой можно использовать методы компонента ScrollView, которые позволяют изменять положение контента. Это полезно, например, для автоматической прокрутки до определённого элемента или при переходе на новую страницу.

  • scrollTo(x, y) — прокручивает контент до заданной позиции. Параметры x и y задают новые координаты контента в контейнере.
  • scrollTop и scrollLeft — позволяют получить или установить положение прокрутки по вертикали или горизонтали.

Пример программной прокрутки:

scrollView.scrollTo(0, 200);  // Прокрутка контента на 200 пикселей вниз

Поддержка различных типов контента

ScrollView идеально подходит для прокрутки текстовых и графических элементов. Важно помнить, что PlayCanvas предоставляет несколько типов контента, включая:

  • Текст: для вывода длинных текстовых сообщений или списков.
  • Изображения: для галерей или прокрутки картинок.
  • UI элементы: кнопки, поля ввода и другие элементы интерфейса, которые могут быть размещены в прокручиваемой области.

Прокрутка может быть настроена как для вертикального, так и для горизонтального направления, что даёт гибкость в использовании.

Оптимизация производительности

Использование компонента ScrollView может повлиять на производительность, если прокручиваемый контент слишком велик. Чтобы избежать ухудшения производительности, можно:

  • Использовать динамическую загрузку и выгрузку элементов в зависимости от видимости.
  • Ограничить количество объектов, которые одновременно находятся в прокручиваемой области.
  • Отключать обновление элементов за пределами видимой области.

Используя эти методы, можно сохранить производительность интерфейса на высоком уровне даже при работе с большим количеством данных.

Пример реализации ScrollView в PlayCanvas

Пример кода, реализующего прокрутку длинного списка элементов:

var scrollView = new pc.Entity();
scrollView.addComponent('scrollview', {
    width: 400,
    height: 600,
    scrollSpeed: 1
});

var content = new pc.Entity();
content.setLocalScale(1, 10, 1); // Увеличиваем высоту контента
scrollView.addChild(content);

for (var i = 0; i < 20; i++) {
    var item = new pc.Entity();
    item.addComponent('element', {
        type: 'image',
        width: 380,
        height: 30,
        pivot: new pc.Vec2(0.5, 0.5)
    });
    item.element.material = new pc.Material();
    item.element.material.diffuse = new pc.Color(0.5, 0.5, 1); // Цвет элемента
    content.addChild(item);
}

this.app.root.addChild(scrollView);

Этот код создаёт вертикально прокручиваемую область, содержащую 20 элементов, и позволяет пользователю прокручивать их, если они не помещаются в установленный размер контейнера.

ScrollView является мощным инструментом для создания динамичных и интерактивных интерфейсов в PlayCanvas, позволяя эффективно работать с большими объемами контента.