Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 76 additions & 0 deletions blocks-touch/b-slider/_align/b-slider_align_center.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
/**
* Слайдер
*
* Центрует слайдер, чтобы активная рубрика была по середине.
*
*/
BEM.DOM.decl({ block: 'b-slider', modName: 'align', modVal: 'center' }, {

onSetMod: {

js: {
inited: function() {
'use strict';

var self = this;

self.__base.apply(self, arguments);

// прячем this в замыкание
self._correctToCenter = self._correctToCenter.bind(self);

// небольшая задержка, чтобы дать блоку дорисоваться
// для дальнейших расчетов позиционирования
setTimeout(self._correctToCenter, 1000);

// при смене ориентации скорректировать по центру
BEM.DOM.win.bind('orientchange', self._correctToCenter);

}
}

},

destruct: function() {
'use strict';

var self = this;

self.__base.apply(self, arguments);

BEM.DOM.win.unbind('orientchange', self._correctToCenter);
},

/*
* Корректируем слайдер по центру
*/
_correctToCenter: function() {
'use strict';

// минимальный сдвиг
var self = this,
active_item = self.findElem('active-item');

if (!active_item.length) {
return;
}

self._calcParams();

var minX = 0,

// максимальный сдвиг
maxX = self._width - self._parentWidth,

// складываем текущее смещение активного элемента и половину его высоты
x = active_item.offset().left + active_item.outerWidth()/2
// и вычитаем половину ширины родителя и текущее смещение слайдера
- self._parentWidth/2 - self._currentX;

// если maxX < 0, значит родитель больше слайдера и корректировка не нужна
if ( x > minX && maxX > 0) {
self._currentX = -((x < maxX) ? x : maxX);
self._correct();
}
}
});