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