К содержимому

SusParallaxStack ​

SusParallaxStack

Стек слоёв от указателя: bg → pattern → subject → ui (tips) → chrome.

Пакет

SusKit · Атомы (коммерческий)

Открыть в песочнице

SusKit · Atoms

Свойства

ИмяТипПо умолчанию
PatternAmpProp<float>8f
SubjectAmpProp<float>14f
UiAmpProp<float>22f
EnabledProp<bool>true
EasingProp<float>0.08f
MinFpsProp<float>24f
PauseOnFocusLossProp<bool>false

Слоты

Слотов нет.

События

ИмяПолеPayload
ActiveChangedOnActiveChangedbool

Хуки стиля ​

Контракт USS-классов — внешний вид переопределяется без правки C#. Состояния переключаются этими классами:

  • sus-parallax-stack
  • sus-parallax-stack__bg
  • sus-parallax-stack__chrome
  • sus-parallax-stack__layer
  • sus-parallax-stack__layers
  • sus-parallax-stack__pattern
  • sus-parallax-stack__subject
  • sus-parallax-stack__tips
  • sus-parallax-stack__ui
  • sus-parallax-stack--off

Использование ​

csharp
var stack = new SusParallaxStack();
stack.EnsureLayers();
stack.Subject.Add(characterArt);
stack.Chrome.Add(nav);
stack.SetAmps(patternAmp: 8f, subjectAmp: 14f, uiAmp: 4f);
Prop / APIРоль
PatternAmp / SubjectAmp / UiAmpАмплитуда parallax (px)
EnabledГлавный выключатель. По умолчанию true
PauseOnFocusLossЗамирать, пока у окна приложения нет фокуса. По умолчанию false
SetLayers(layers)Заменить слои-картинки (см. ниже)
TrackPointer(source)Следить также за указателем над другим элементом
IsActive / OnActiveChangedДвигается ли стек прямо сейчас, и фронты этого состояния

Слои-картинки ​

SetLayers принимает список SusParallaxLayer (картинка, глубина, необязательный USS-класс). Слои живут в хосте sus-parallax-stack__layers между Bg и Pattern; каждый слой — абсолютный, прозрачный для указателя элемент sus-parallax-stack__layer, который смещается на Depth, умноженное на смещение указателя. Depth задаётся в пикселях у края стека: 0 — неподвижно, больше — ближе, отрицательное значение движется против указателя. Размер, позиция и выпуск за край задаются в USS. null или пустой список убирает хост, и у стека снова пять встроенных слоёв.

csharp
stack.SetLayers(new List<SusParallaxLayer>
{
    new SusParallaxLayer(Background.FromTexture2D(sky), depth: 4f),
    new SusParallaxLayer(Background.FromTexture2D(ridge), depth: 12f, className: "my-backdrop__ridge"),
});

// A backdrop sits under the screen content and gets no pointer events of its own:
// follow the pointer over the screen root instead.
stack.TrackPointer(screenRoot);
stack.PauseOnFocusLoss.Value = true;

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

С включённым PauseOnFocusLoss окно без фокуса ставит стек на паузу: слои стоят в нуле, тикер останавливается, а корень получает sus-parallax-stack--unfocused. Возврат фокуса возобновляет движение при следующем перемещении указателя.

Reduce motion ​

Пока включён SusMotion.Reduce, стек замирает так же: слои в нуле, тикера нет, класс sus-parallax-stack--reduced на корне. Выключение флага возобновляет движение при следующем перемещении указателя.

Заметки ​

  • Вызовите EnsureLayers() после построения, чтобы получить хосты слоёв (Bg, Pattern, Subject, Ui, TipHost, Chrome).
  • Визуальное оформление (арт, стекло) задаётся в USS потребителя.

Смотрите также Layout recipes.