Перейти к основному содержимому

direction

Base

Базовый класс, наследующийся от BaseWidgetPart.js

Base extends BaseWidgetPart {
/**
* @param {String|Number} command
*/
go(command) {
if (this.widgetBase.settings.maxFramesAmount > 0 && this.widgetBase.activeFramesForProgress.length >= this.widgetBase.settings.maxFramesAmount) {
this.widgetBase.widgetType.triggerEventMax()
throw 'maxFramesAmount reached'
}

const frameNum = this.widgetBase.getNewFrameNum(command);

if( frameNum < 0 ) {
this.widgetBase.widgetType.triggerEventMin()
} else if (frameNum > this.widgetBase.getLength() - 1) {
this.widgetBase.widgetType.triggerEventMax()
}
}

getCurrentFrameId() {}
}

Класс определяет две функции:

  • go - отвечает за переход между фреймами. В базовом методе go сам переход не совершается, только отслеживание достижения минимального/максимального фрейма
  • getCurrentFrameId - возвращает id активного фрейма

Метод go должен обновить данные в массивах:

  • this.widgetBase.activeFrames - для установки id фреймов, которые будут отображаться на странице
  • this.widgetBase.activeFramesForProgress - для установки id фреймов, которые были показаны ранее или показаны сейчас и которые могут учитываться в подсчете прогресса И метод go в дочерних классах также должен вызвать два метода:
  • this.widgetBase.updateView() - для применения нового состояния на странице
  • this.widgetBase.saveData() - для сохранения данных в оболочке с помощью CourseControllerData

Horizontal

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

Так что метод go устанавливает один активный фрейм и хранит все ранее открытые фреймы. Так же метод go скролит страницу к верху активированного фрейма, если он целиком не помешается на странице

Активным фреймом считается единственный фрейм из массива this.widgetBase.activeFrames

Vertical

В вертикальных виджетах показываются все открытые фреймы, а не только последний фрейм. Поэтому в this.widgetBase.activeFrames и this.widgetBase.activeFramesForProgress находятся одинаковые массивы с id всех активных фреймов

Также при включенной настройке "Gsap scroll" вызывается скролл до фрейма, который активировали. Если перейти к ранее активированному фрейму, то к нему также произойдет плавный скролл

Активным фреймом считается последний открытый фрейм из массива this.widgetBase.activeFrames