2014-06-17 12:54:39 +03:00
|
|
|
|
/**
|
|
|
|
|
* Прокрутка вверх
|
|
|
|
|
*
|
|
|
|
|
* @module ls/toolbar/scrollup
|
|
|
|
|
*
|
|
|
|
|
* @license GNU General Public License, version 2
|
|
|
|
|
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
|
|
|
|
|
* @author Denis Shakhov <denis.shakhov@gmail.com>
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
(function($) {
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
$.widget( "livestreet.lsToolbarScrollUp", {
|
|
|
|
|
/**
|
|
|
|
|
* Дефолтные опции
|
|
|
|
|
*/
|
|
|
|
|
options: {
|
|
|
|
|
// Продолжительность прокрутки, мс
|
|
|
|
|
duration: 500
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Конструктор
|
|
|
|
|
*
|
|
|
|
|
* @constructor
|
|
|
|
|
* @private
|
|
|
|
|
*/
|
|
|
|
|
_create: function () {
|
2015-02-17 16:40:18 +02:00
|
|
|
|
this._on({ click: 'onClick' });
|
|
|
|
|
this._on( this.window, { scroll: 'onScroll' } );
|
2014-06-17 12:54:39 +03:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
2014-06-18 13:19:45 +03:00
|
|
|
|
* Показывает/скрывает кнопку прокрутки в зависимости от значения scrollTop
|
2014-06-17 12:54:39 +03:00
|
|
|
|
*/
|
2014-07-30 15:11:55 +03:00
|
|
|
|
onScroll: function() {
|
|
|
|
|
if ( this.prev && this.isTop && this.window.scrollTop() > 0 ) {
|
|
|
|
|
this.element.removeClass( ls.options.classes.states.active );
|
|
|
|
|
this.isTop = false;
|
|
|
|
|
this.prev = null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
! this.prev && this.element[ this.window.scrollTop() > this.window.height() / 2 ? 'fadeIn' : 'fadeOut' ]( 500 );
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Обработка клика
|
|
|
|
|
*/
|
|
|
|
|
onClick: function() {
|
|
|
|
|
// Не обрабатываем клики в процессе скролла
|
|
|
|
|
! this.isScroll && this[ this.prev && this.isTop ? 'back' : 'up' ]();
|
2014-06-17 12:54:39 +03:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Прокрутка вверх
|
|
|
|
|
*/
|
|
|
|
|
up: function() {
|
2014-07-30 15:11:55 +03:00
|
|
|
|
this.prev = this.window.scrollTop();
|
|
|
|
|
this.isScroll = true;
|
|
|
|
|
|
|
|
|
|
$.scrollTo( 0, this.options.duration, {
|
|
|
|
|
onAfter: function () {
|
|
|
|
|
this.isTop = true;
|
|
|
|
|
this.isScroll = false;
|
|
|
|
|
this.element.addClass( ls.options.classes.states.active );
|
|
|
|
|
}.bind(this)
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Прокрутка к предыдущей позиции
|
|
|
|
|
*/
|
|
|
|
|
back: function() {
|
|
|
|
|
if ( ! this.prev ) return;
|
|
|
|
|
|
|
|
|
|
this.isTop = false;
|
|
|
|
|
this.isScroll = true;
|
|
|
|
|
|
|
|
|
|
$.scrollTo( this.prev, this.options.duration, {
|
|
|
|
|
onAfter: function () {
|
|
|
|
|
this.element.removeClass( ls.options.classes.states.active );
|
|
|
|
|
this.isScroll = false;
|
|
|
|
|
this.prev = null;
|
|
|
|
|
}.bind(this)
|
|
|
|
|
});
|
2014-06-17 12:54:39 +03:00
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
})(jQuery);
|