Блок для отслеживания прокрутки страницы. Предназначен для проектов, использующих БЭМ методологию.
bem-core
- блок
i-bem-dom
- блок
next-tick
- блок
functions
- блок
jquery
- Добавьте библиотеку в зависимости
package.json
:
{
"devDependencies": {
"bem-scrollspy": "github:bem-contrib/bem-scrollspy#v0.3.0"
}
}
- Добавьте уровень переопределения в файл
.bemrc.js
:
{
root: true,
levels: [],
libs: {
"bem-scrollspy": {}
}
}
Все, что делает блок scrollspy
— генерирует два БЭМ-события:
scrollin
- когда блок становится виден пользователю;scrollout
- когда блок скрывается из виду.
Подписавшись на эти события, можно выполнять различные действия. Например, запускать и останавливать анимацию:
this
._events(this.findMixedBlock(Scrollspy))
.on('scrollin', function() { this.setMod('animation', 'progress'); }, this)
.on('scrollout', function() { this.setMod('animation', 'stop'); }, this);
В объекте события передается направление прокрутки. Например:
this
._events(this.findMixedBlock(Scrollspy))
.on('scrollin', this._onScrollIn, this); //подписка на событие
function _onScrollIn(_, dir) { //получаем направление скролла вторым параметром
if (dir === 'down') {
doAction();
} else if (dir === 'up') {
doAnotherAction();
}
}
Можно задать отступ для блока в пикселях или процентах (по умолчанию 10% от края окна). Можно задать отступ сразу в js-параметрах блока:
{
block: 'scrollspy',
js: { offset: 40 }
}
или использовать метод setOffset()
:
const ss = this.findChild(Scrollspy);
ss.setOffset(0);
Этот метод установит новый размер отступа и пересчитает позицию блока.
Если вам нужно только пересчитать позицию блока, не меняя значений, можно использовать метод calcOffsets()
.
Метод | Описание |
---|---|
setOffset(val) | Устанавливает отступ в процентах или пикселях. |
calcOffsets() | Запускает расчет позиции блока. |
activate() | Ручная активация блока (вызовет событие scrollin ). |
deactivate() | «Ручной» scrollout . |
getDir() | Возвращает последнее направление прокрутки. |
isActive() | Проверяет, находится ли блок в зоне просмотра |