浏览代码

up: 5.3.2 静态资源

mingsoft 2 年之前
父节点
当前提交
c632a105a8

+ 1309 - 0
src/main/webapp/static/plugins/jquery.liMarquee/jquery.liMarquee.js

@@ -0,0 +1,1309 @@
+/*
+ * jQuery liMarquee v 4.6
+ *
+ * Copyright 2013, Linnik Yura | LI MASS CODE | http://masscode.ru
+ * http://masscode.ru/index.php/k2/item/44-limarquee
+ * Free to use
+ *
+ * Last Update 20.11.2014
+ */
+(function ($) {
+	var methods = {
+		init: function (options) {
+			var p = {
+				direction: 'left', //Указывает направление движения содержимого контейнера (left | right | up | down)
+				loop: -1, //Задает, сколько раз будет прокручиваться содержимое. "-1" для бесконечного воспроизведения движения
+				scrolldelay: 0, //Величина задержки в миллисекундах между движениями
+				scrollamount: 50, //Скорость движения контента (px/sec)
+				circular: true, //Если "true" - строка непрерывная 
+				drag: true, //Если "true" - включено перетаскивание строки
+				runshort: true, //Если "true" - короткая строка тоже "бегает", "false" - стоит на месте
+				hoverstop: true, //true - строка останавливается при наведении курсора мыши, false - строка не останавливается
+				inverthover: false, //false - стандартное поведение. Если "true" - строка начинает движение только при наведении курсора
+				xml: false //Путь к xml файлу с нужным текстом
+			};
+			if (options) {
+				$.extend(p, options);
+			}
+
+			return this.each(function () {
+				var enterEvent = 'mouseenter';
+				var leaveEvent = 'mouseleave';
+				if(p.inverthover){
+					enterEvent = 'mouseleave';
+					leaveEvent = 'mouseenter';	
+				}
+				
+								
+				var
+					loop = p.loop,
+					strWrap = $(this).addClass('str_wrap').data({scrollamount:p.scrollamount}),
+					fMove = false;
+					
+				
+				
+				var strWrapStyle = strWrap.attr('style'); 
+				
+				if(strWrapStyle){
+					var wrapStyleArr = strWrapStyle.split(';');
+					var startHeight = false;
+					for(var i=0; i < wrapStyleArr.length; i++){
+						var str = $.trim(wrapStyleArr[i]);					
+						var tested =  str.search(/^height/g);
+						if(tested != -1){
+							startHeight = parseFloat(strWrap.css('height'));
+						}
+					}
+				}
+
+				var code = function () {
+					
+					strWrap.off('mouseleave');
+					strWrap.off('mouseenter');
+					strWrap.off('mousemove');
+					strWrap.off('mousedown');
+					strWrap.off('mouseup');
+
+					
+					if(!$('.str_move',strWrap).length){
+						strWrap.wrapInner($('<div>').addClass('str_move'));
+					}
+					
+					var
+					strMove = $('.str_move', strWrap).addClass('str_origin'),
+					strMoveClone = strMove.clone().removeClass('str_origin').addClass('str_move_clone'),
+					time = 0;
+
+					if (!p.hoverstop) {
+						strWrap.addClass('noStop');
+					}
+
+					var circCloneHor = function(){
+						strMoveClone.clone().css({
+							left:'100%',
+							right:'auto',							
+							width: strMove.width()
+						}).appendTo(strMove);
+						strMoveClone.css({
+							right: '100%',
+							left:'auto',
+							width: strMove.width()
+						}).appendTo(strMove);
+					}
+					
+					var circCloneVert = function(){
+						strMoveClone.clone().css({
+							top: '100%',
+							bottom:'auto',
+							height: strMove.height()
+						}).appendTo(strMove);
+						strMoveClone.css({
+							bottom: '100%',
+							top:'auto',
+							height:strMove.height()
+						}).appendTo(strMove);
+					}
+					
+					
+					
+					if (p.direction == 'left') {
+						strWrap.height(strMove.outerHeight())
+						if (strMove.width() > strWrap.width()) {
+							var leftPos = -strMove.width();
+							
+							if (p.circular) {
+								
+								if (!p.xml) {
+									circCloneHor()
+									leftPos = -(strMove.width() + (strMove.width() - strWrap.width()));
+								}
+							}
+							if (p.xml) {
+								strMove.css({
+									left:strWrap.width()	
+								})
+							}
+							var
+							strMoveLeft = strWrap.width(),
+								k1 = 0,
+								timeFunc1 = function () {
+									var
+									fullS = Math.abs(leftPos),
+										time = (fullS / strWrap.data('scrollamount')) * 1000;
+									if (parseFloat(strMove.css('left')) != 0) {
+										fullS = (fullS + strWrap.width());
+										time = (fullS - (strWrap.width() - parseFloat(strMove.css('left')))) / strWrap.data('scrollamount') * 1000;
+									}
+									return time;
+								},
+								moveFuncId1 = false,
+								moveFunc1 = function () {
+									if (loop != 0) {
+										strMove.stop(true).animate({
+											left: leftPos
+										}, timeFunc1(), 'linear', function () {
+											$(this).css({
+												left: strWrap.width()
+											});
+											if (loop == -1) {
+												moveFuncId1 = setTimeout(moveFunc1, p.scrolldelay);
+											} else {
+												loop--;
+												moveFuncId1 = setTimeout(moveFunc1, p.scrolldelay);
+											}
+										});
+									}
+								};
+								strWrap.data({
+									moveId: moveFuncId1	,
+									moveF : moveFunc1
+								})
+								if(!p.inverthover){
+									moveFunc1();
+								}
+							
+							if (p.hoverstop) {
+								strWrap.on(enterEvent, function () {
+									$(this).addClass('str_active');
+									clearTimeout(moveFuncId1);
+									strMove.stop(true);
+								}).on(leaveEvent, function () {
+									$(this).removeClass('str_active');
+									$(this).off('mousemove');
+									moveFunc1();
+								});
+
+								if (p.drag) {
+									strWrap.on('mousedown', function (e) {
+										if(p.inverthover){
+											strMove.stop(true);
+										}
+										//drag
+										var dragLeft;
+										var dir = 1;
+										var newX;
+										var oldX = e.clientX;
+										//drag
+										
+										strMoveLeft = strMove.position().left;
+										k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
+										
+										
+										
+										$(this).on('mousemove', function (e) {
+											fMove = true;
+											
+											//drag
+											newX = e.clientX;
+											if(newX > oldX){
+												dir = 1
+											}else{
+												dir = -1
+											}
+											oldX = newX	
+											dragLeft = k1 + (e.clientX - strWrap.offset().left);
+											
+											if (!p.circular) {
+												if(dragLeft < -strMove.width() && dir < 0){
+													dragLeft = strWrap.width();
+													strMoveLeft = strMove.position().left;
+													k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+												if(dragLeft > strWrap.width() && dir > 0){
+													dragLeft = -strMove.width();
+													strMoveLeft = strMove.position().left;
+													k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+											}else{
+												if(dragLeft < -strMove.width() && dir < 0){
+													dragLeft = 0;
+													strMoveLeft = strMove.position().left;
+													k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+												if(dragLeft > 0 && dir > 0){
+													dragLeft = -strMove.width();
+													strMoveLeft = strMove.position().left;
+													k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+	
+											}
+											
+											
+											strMove.stop(true).css({
+												left: dragLeft
+											});
+											//drag
+											
+										
+											
+										}).on('mouseup', function () {
+											$(this).off('mousemove');
+											if(p.inverthover){
+												strMove.trigger('mouseenter')
+											}
+											setTimeout(function () {                             
+												fMove = false
+											}, 50)
+											
+										});
+										return false;
+									})
+									.on('click', function () {
+										if (fMove) {
+											return false
+										}
+									});
+								} else {
+									strWrap.addClass('no_drag');
+								};
+							}
+						} else {
+							if (p.runshort) {
+								strMove.css({
+									left: strWrap.width()
+								});
+								var
+								strMoveLeft = strWrap.width(),
+									k1 = 0,
+									timeFunc = function () {
+										time = (strMove.width() + strMove.position().left) / strWrap.data('scrollamount') * 1000;
+										return time;
+									};
+								var moveFunc = function () {
+									var leftPos = -strMove.width();
+									strMove.animate({
+										left: leftPos
+									}, timeFunc(), 'linear', function () {
+										$(this).css({
+											left: strWrap.width()
+										});
+										if (loop == -1) {
+											setTimeout(moveFunc, p.scrolldelay);
+										} else {
+											loop--;
+											setTimeout(moveFunc, p.scrolldelay);
+										}
+									});
+								};
+								strWrap.data({
+									moveF : moveFunc
+								})
+								if(!p.inverthover){
+									moveFunc();
+								}
+								if (p.hoverstop) {
+									strWrap.on(enterEvent, function () {
+										$(this).addClass('str_active');
+										strMove.stop(true);
+									}).on(leaveEvent, function () {
+										$(this).removeClass('str_active');
+										$(this).off('mousemove');
+										moveFunc();
+									});
+
+									if (p.drag) {
+										strWrap.on('mousedown', function (e) {
+											if(p.inverthover){
+												strMove.stop(true);
+											}
+											
+											//drag
+											var dragLeft;
+											var dir = 1;
+											var newX;
+											var oldX = e.clientX;
+											//drag
+											
+											strMoveLeft = strMove.position().left;
+											k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
+											$(this).on('mousemove', function (e) {
+												fMove = true;
+												
+												
+												//drag
+												newX = e.clientX;
+												if(newX > oldX){
+													dir = 1
+												}else{
+													dir = -1
+												}
+												oldX = newX	
+												dragLeft = k1 + (e.clientX - strWrap.offset().left);
+												
+												if(dragLeft < -strMove.width() && dir < 0){
+													dragLeft = strWrap.width();
+													strMoveLeft = strMove.position().left;
+													k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+												if(dragLeft > strWrap.width() && dir > 0){
+													dragLeft = -strMove.width();
+													strMoveLeft = strMove.position().left;
+													k1 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+												
+												
+												strMove.stop(true).css({
+													left: dragLeft
+												});
+												
+												
+												
+											}).on('mouseup', function () {
+												if(p.inverthover){
+													strMove.trigger('mouseenter')
+												}
+												$(this).off('mousemove');
+												setTimeout(function () {                             
+													fMove = false
+												}, 50)
+											});
+											return false;
+										})
+										.on('click', function () {
+											if (fMove) {
+												return false
+											}
+										});
+									} else {
+										strWrap.addClass('no_drag');
+									};
+								}
+							} else {
+								strWrap.addClass('str_static');
+							}
+						};
+					};
+					if (p.direction == 'right') {
+						strWrap.height(strMove.outerHeight())
+						strWrap.addClass('str_right');
+						strMove.css({
+							left: -strMove.width(),
+							right: 'auto'
+						})
+						
+						if (strMove.width() > strWrap.width()) {
+							var leftPos = strWrap.width();
+							strMove.css({
+								left: 0
+							})
+							if (p.circular) {
+								if (!p.xml) {
+									circCloneHor()
+									//Определяем крайнюю точку
+									leftPos = strMove.width();
+								}
+							}
+							
+							var
+							k2 = 0;
+							timeFunc = function () {
+								var
+								fullS = strWrap.width(), //крайняя точка
+									time = (fullS / strWrap.data('scrollamount')) * 1000; //время
+								if (parseFloat(strMove.css('left')) != 0) {
+									fullS = (strMove.width() + strWrap.width());
+									time = (fullS - (strMove.width() + parseFloat(strMove.css('left')))) / strWrap.data('scrollamount') * 1000;
+								}
+								return time;
+							};
+							var moveFunc = function () {
+
+								if (loop != 0) {
+									strMove.animate({
+										left: leftPos
+									}, timeFunc(), 'linear', function () {
+										$(this).css({
+											left: -strMove.width()
+										});
+										if (loop == -1) {
+											setTimeout(moveFunc, p.scrolldelay);
+										} else {
+											loop--;
+											setTimeout(moveFunc, p.scrolldelay);
+										};
+									});
+								};
+							};
+							strWrap.data({
+								moveF : moveFunc
+							})
+					
+							if(!p.inverthover){
+								moveFunc();
+							}
+							if (p.hoverstop) {
+								strWrap.on(enterEvent, function () {
+									$(this).addClass('str_active');
+									strMove.stop(true);
+								}).on(leaveEvent, function () {
+									$(this).removeClass('str_active');
+									$(this).off('mousemove');
+									moveFunc();
+								});
+
+								if (p.drag) {
+									
+									strWrap.on('mousedown', function (e) {
+										if(p.inverthover){
+											strMove.stop(true);
+										}
+										
+										
+										//drag
+										var dragLeft;
+										var dir = 1;
+										var newX;
+										var oldX = e.clientX;
+										//drag
+										
+										strMoveLeft = strMove.position().left;
+										k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
+										$(this).on('mousemove', function (e) {
+											
+											fMove = true;
+											
+											//drag
+											newX = e.clientX;
+											if(newX > oldX){
+												dir = 1
+											}else{
+												dir = -1
+											}
+											oldX = newX	
+											dragLeft = k2 + (e.clientX - strWrap.offset().left);
+
+
+											if (!p.circular) {
+
+												if(dragLeft < -strMove.width() && dir < 0){
+													dragLeft = strWrap.width();
+													strMoveLeft = strMove.position().left;
+													k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+												if(dragLeft > strWrap.width() && dir > 0){
+													dragLeft = -strMove.width();
+													strMoveLeft = strMove.position().left;
+													k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+											}else{
+												if(dragLeft < -strMove.width() && dir < 0){
+													dragLeft = 0;
+													strMoveLeft = strMove.position().left;
+													k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+												if(dragLeft > 0 && dir > 0){
+													dragLeft = -strMove.width();
+													strMoveLeft = strMove.position().left;
+													k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+	
+											}
+											
+											strMove.stop(true).css({
+												left: dragLeft
+											});
+											
+
+										}).on('mouseup', function () {
+											if(p.inverthover){
+												strMove.trigger('mouseenter')
+											}
+											$(this).off('mousemove');
+											setTimeout(function () {                             
+												fMove = false
+											}, 50)
+										});
+										return false;
+									})
+									.on('click', function () {
+										if (fMove) {
+											return false
+										}
+									});
+								} else {
+									strWrap.addClass('no_drag');
+								};
+							}
+						} else {
+														
+							if (p.runshort) {
+								
+								var k2 = 0;
+								var timeFunc = function () {
+									time = (strWrap.width() - strMove.position().left) / strWrap.data('scrollamount') * 1000;
+									return time;
+								};
+								var moveFunc = function () {
+									var leftPos = strWrap.width();
+									strMove.animate({
+										left: leftPos
+									}, timeFunc(), 'linear', function () {
+										$(this).css({
+											left: -strMove.width()
+										});
+										if (loop == -1) {
+											setTimeout(moveFunc, p.scrolldelay);
+										} else {
+											loop--;
+											setTimeout(moveFunc, p.scrolldelay);
+										};
+									});
+								};
+
+								strWrap.data({
+									moveF : moveFunc
+								})
+
+								if(!p.inverthover){
+									moveFunc();
+								}
+								if (p.hoverstop) {
+									strWrap.on(enterEvent, function () {
+										$(this).addClass('str_active');
+										strMove.stop(true);
+									}).on(leaveEvent, function () {
+										$(this).removeClass('str_active');
+										$(this).off('mousemove');
+										moveFunc();
+									});
+
+									if (p.drag) {
+										strWrap.on('mousedown', function (e) {
+											if(p.inverthover){
+												strMove.stop(true);
+											}
+											
+											//drag
+											var dragLeft;
+											var dir = 1;
+											var newX;
+											var oldX = e.clientX;
+											//drag
+											
+											strMoveLeft = strMove.position().left;
+											k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
+											$(this).on('mousemove', function (e) {
+												fMove = true;
+												
+												
+												
+												//drag
+												newX = e.clientX;
+												if(newX > oldX){
+													dir = 1
+												}else{
+													dir = -1
+												}
+												oldX = newX	
+												dragLeft = k2 + (e.clientX - strWrap.offset().left);
+												
+												if(dragLeft < -strMove.width() && dir < 0){
+													dragLeft = strWrap.width();
+													strMoveLeft = strMove.position().left;
+													k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+												if(dragLeft > strWrap.width() && dir > 0){
+													dragLeft = -strMove.width();
+													strMoveLeft = strMove.position().left;
+													k2 = strMoveLeft - (e.clientX - strWrap.offset().left);
+												}
+
+												strMove.stop(true).css({
+													left:dragLeft
+												});
+												
+											}).on('mouseup', function () {
+												if(p.inverthover){
+													strMove.trigger('mouseenter')
+												}
+												$(this).off('mousemove');
+												setTimeout(function () {                             
+													fMove = false
+												}, 50)
+											});
+											return false;
+										})
+										.on('click', function () {
+											if (fMove) {
+												return false
+											}
+										});
+									} else {
+										strWrap.addClass('no_drag');
+									};
+								}
+							} else {
+								strWrap.addClass('str_static');
+							}
+						};
+					};
+					if (p.direction == 'up') {
+						strWrap.addClass('str_vertical');
+						
+						if (strMove.height() > strWrap.height()) {
+							var topPos = -strMove.height();
+							if (p.circular) {
+								if (!p.xml) {
+									circCloneVert();									
+									topPos = -(strMove.height() + (strMove.height() - strWrap.height()));
+								}
+							}
+							if (p.xml) {
+								strMove.css({
+									top:strWrap.height()	
+								})
+							}
+							var
+							k2 = 0;
+							timeFunc = function () {
+								var
+								fullS = Math.abs(topPos),
+									time = (fullS / strWrap.data('scrollamount')) * 1000;
+								if (parseFloat(strMove.css('top')) != 0) {
+									fullS = (fullS + strWrap.height());
+									time = (fullS - (strWrap.height() - parseFloat(strMove.css('top')))) / strWrap.data('scrollamount') * 1000;
+								}
+								
+								return time;
+							};
+							var moveFunc = function () {
+								if (loop != 0) {
+									strMove.animate({
+										top: topPos
+									}, timeFunc(), 'linear', function () {
+										$(this).css({
+											top: strWrap.height()
+										});
+										if (loop == -1) {
+											setTimeout(moveFunc, p.scrolldelay);
+										} else {
+											loop--;
+											setTimeout(moveFunc, p.scrolldelay);
+										};
+									});
+								};
+							};
+							
+							strWrap.data({
+								moveF : moveFunc
+							})
+							
+							if(!p.inverthover){
+								moveFunc();
+							}
+							if (p.hoverstop) {
+								strWrap.on(enterEvent, function () {
+									$(this).addClass('str_active');
+									strMove.stop(true);
+								}).on(leaveEvent, function () {
+									$(this).removeClass('str_active');
+									$(this).off('mousemove');
+									moveFunc();
+								});
+
+								if (p.drag) {
+									strWrap.on('mousedown', function (e) {
+										if(p.inverthover){
+											strMove.stop(true);
+										}
+										
+										//drag
+										var dragTop;
+										var dir = 1;
+										var newY;
+										var oldY = e.clientY;
+										//drag
+										
+										
+										strMoveTop = strMove.position().top;
+										k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+										$(this).on('mousemove', function (e) {
+											
+											fMove = true;
+
+											//drag
+											newY = e.clientY;
+											if(newY > oldY){
+												dir = 1
+											}else{
+												if(newY < oldY){
+													dir = -1
+												}
+											}
+											oldY = newY	
+											dragTop = k2 + e.clientY - strWrap.offset().top;
+
+
+											if (!p.circular){
+												if(dragTop < -strMove.height() && dir < 0){
+													dragTop = strWrap.height();
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}
+												if(dragTop > strWrap.height() && dir > 0){
+													dragTop = -strMove.height();
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}	
+											}else{
+												if(dragTop < -strMove.height() && dir < 0){
+													dragTop = 0;
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}
+												if(dragTop > 0 && dir > 0){
+													dragTop = -strMove.height();
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}
+											}
+
+
+											strMove.stop(true).css({
+												top: dragTop
+											});
+											//drag
+											
+											
+											
+											
+											
+											
+											
+											
+											
+											
+											
+											
+										}).on('mouseup', function () {
+											if(p.inverthover){
+												strMove.trigger('mouseenter')
+											}
+											$(this).off('mousemove');
+											setTimeout(function () {                             
+												fMove = false
+											}, 50)
+										});
+										return false;
+									})
+									.on('click', function () {
+										if (fMove) {
+											return false
+										}
+									});
+								} else {
+									strWrap.addClass('no_drag');
+								};
+							}
+						} else {
+							if (p.runshort) {
+								strMove.css({
+									top: strWrap.height()
+								});
+								var k2 = 0;
+								var timeFunc = function () {
+									
+									time = (strMove.height() + strMove.position().top) / strWrap.data('scrollamount') * 1000;
+									
+									return time;
+								};
+								var moveFunc = function () {
+									var topPos = -strMove.height();
+									strMove.animate({
+										top: topPos
+									}, timeFunc(), 'linear', function () {
+										$(this).css({
+											top: strWrap.height()
+										});
+										if (loop == -1) {
+											setTimeout(moveFunc, p.scrolldelay);
+										} else {
+											loop--;
+											setTimeout(moveFunc, p.scrolldelay);
+										};
+									});
+								};
+								strWrap.data({
+									moveF : moveFunc
+								})
+								if(!p.inverthover){
+									moveFunc();
+								}
+								if (p.hoverstop) {
+									strWrap.on(enterEvent, function () {
+										$(this).addClass('str_active');
+										strMove.stop(true);
+									}).on(leaveEvent, function () {
+										$(this).removeClass('str_active');
+										$(this).off('mousemove');
+										moveFunc();
+									});
+
+									if (p.drag) {
+										strWrap.on('mousedown', function (e) {
+											if(p.inverthover){
+												strMove.stop(true);
+											}
+											
+											//drag
+											var dragTop;
+											var dir = 1;
+											var newY;
+											var oldY = e.clientY;
+											//drag
+											
+											strMoveTop = strMove.position().top;
+											k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+											$(this).on('mousemove', function (e) {
+												
+												
+												fMove = true;
+
+												//drag
+												newY = e.clientY;
+												if(newY > oldY){
+													dir = 1
+												}else{
+													if(newY < oldY){
+														dir = -1
+													}
+												}
+												oldY = newY	
+												dragTop = k2 + e.clientY - strWrap.offset().top;
+												
+												if(dragTop < -strMove.height() && dir < 0){
+													dragTop = strWrap.height();
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}
+												if(dragTop > strWrap.height() && dir > 0){
+													dragTop = -strMove.height();
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}	
+												//*drag
+												
+												strMove.stop(true).css({
+													top: dragTop
+												});
+												
+												
+											}).on('mouseup', function () {
+												if(p.inverthover){
+													strMove.trigger('mouseenter')
+												}
+												$(this).off('mousemove');
+												setTimeout(function () {                             
+													fMove = false
+												}, 50)
+											});
+											return false;
+										})
+										.on('click', function () {
+											if (fMove) {
+												return false
+											}
+										});
+									} else {
+										strWrap.addClass('no_drag');
+									};
+								}
+							} else {
+								strWrap.addClass('str_static');
+							}
+						};
+					};
+					if (p.direction == 'down') {
+
+						strWrap.addClass('str_vertical').addClass('str_down');
+						strMove.css({
+							top: -strMove.height(),
+							bottom: 'auto'
+						})
+						if (strMove.height() > strWrap.height()) {
+							var topPos = strWrap.height();
+							if (p.circular) {
+								if (!p.xml) {
+									circCloneVert();									
+									topPos = strMove.height();
+								}
+							}
+							if (p.xml) {
+								strMove.css({
+									top:-strMove.height()
+								})
+							}
+							var
+							k2 = 0;
+							timeFunc = function () {
+								var
+								fullS = strWrap.height(), //крайняя точка
+									time = (fullS / strWrap.data('scrollamount')) * 1000; //время
+
+								if (parseFloat(strMove.css('top')) != 0) {
+									fullS = (strMove.height() + strWrap.height());
+									time = (fullS - (strMove.height() + parseFloat(strMove.css('top')))) / strWrap.data('scrollamount') * 1000;
+								}
+								return time;
+							};
+							var moveFunc = function () {
+
+								if (loop != 0) {
+									strMove.animate({
+										top: topPos
+									}, timeFunc(), 'linear', function () {
+										$(this).css({
+											top: -strMove.height()
+										});
+										if (loop == -1) {
+
+											setTimeout(moveFunc, p.scrolldelay);
+										} else {
+											loop--;
+											setTimeout(moveFunc, p.scrolldelay);
+										};
+									});
+								};
+							};
+							strWrap.data({
+								moveF : moveFunc
+							})
+							if(!p.inverthover){
+								moveFunc();
+							}
+							if (p.hoverstop) {
+								strWrap.on(enterEvent, function () {
+									$(this).addClass('str_active');
+									strMove.stop(true);
+								}).on(leaveEvent, function () {
+									$(this).removeClass('str_active');
+									$(this).off('mousemove');
+									moveFunc();
+								});
+
+								if (p.drag) {
+									strWrap.on('mousedown', function (e) {
+										if(p.inverthover){
+											strMove.stop(true);
+										}
+										
+										//drag
+										var dragTop;
+										var dir = 1;
+										var newY;
+										var oldY = e.clientY;
+										//drag
+										
+										
+										strMoveTop = strMove.position().top;
+										k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+										$(this).on('mousemove', function (e) {
+											
+											fMove = true;
+											
+											//drag
+											newY = e.clientY;
+											if(newY > oldY){
+												dir = 1
+											}else{
+												if(newY < oldY){
+													dir = -1
+												}
+											}
+											oldY = newY	
+											dragTop = k2 + e.clientY - strWrap.offset().top;
+
+
+											if (!p.circular){
+												if(dragTop < -strMove.height() && dir < 0){
+													dragTop = strWrap.height();
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}
+												if(dragTop > strWrap.height() && dir > 0){
+													dragTop = -strMove.height();
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}	
+											}else{
+												if(dragTop < -strMove.height() && dir < 0){
+													dragTop = 0;
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}
+												if(dragTop > 0 && dir > 0){
+													dragTop = -strMove.height();
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}
+											}
+
+
+											strMove.stop(true).css({
+												top: dragTop
+											});
+											//drag
+
+
+
+										}).on('mouseup', function () {
+											if(p.inverthover){
+												strMove.trigger('mouseenter')
+											}
+											$(this).off('mousemove');
+											setTimeout(function () {                             
+												fMove = false
+											}, 50)
+										});
+										return false;
+									})
+									.on('click', function () {
+										if (fMove) {
+											return false
+										}
+									});
+								} else {
+									strWrap.addClass('no_drag');
+								};
+							}
+						} else {
+							if (p.runshort) {
+								var k2 = 0;
+								var timeFunc = function () {
+									time = (strWrap.height() - strMove.position().top) / strWrap.data('scrollamount') * 1000;
+									return time;
+								};
+								var moveFunc = function () {
+									var topPos = strWrap.height();
+									strMove.animate({
+										top: topPos
+									}, timeFunc(), 'linear', function () {
+										$(this).css({
+											top: -strMove.height()
+										});
+										if (loop == -1) {
+											setTimeout(moveFunc, p.scrolldelay);
+										} else {
+											loop--;
+											setTimeout(moveFunc, p.scrolldelay);
+										};
+									});
+								};
+								strWrap.data({
+									moveF : moveFunc
+								})
+								if(!p.inverthover){
+									moveFunc();
+								}
+								if (p.hoverstop) {
+									strWrap.on(enterEvent, function () {
+										$(this).addClass('str_active');
+										strMove.stop(true);
+									}).on(leaveEvent, function () {
+										$(this).removeClass('str_active');
+										$(this).off('mousemove');
+										moveFunc();
+									});
+
+									if (p.drag) {
+										strWrap.on('mousedown', function (e) {
+											if(p.inverthover){
+												strMove.stop(true);
+											}
+											
+											//drag
+											var dragTop;
+											var dir = 1;
+											var newY;
+											var oldY = e.clientY;
+											//drag
+											
+											strMoveTop = strMove.position().top;
+											k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+											$(this).on('mousemove', function (e) {
+												fMove = true;
+
+												//drag
+												newY = e.clientY;
+												if(newY > oldY){
+													dir = 1
+												}else{
+													if(newY < oldY){
+														dir = -1
+													}
+												}
+												oldY = newY	
+												dragTop = k2 + e.clientY - strWrap.offset().top;
+	
+	
+												if(dragTop < -strMove.height() && dir < 0){
+													dragTop = strWrap.height();
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}
+												if(dragTop > strWrap.height() && dir > 0){
+													dragTop = -strMove.height();
+													strMoveTop = strMove.position().top;
+													k2 = strMoveTop - (e.clientY - strWrap.offset().top);
+												}	
+												//*drag
+												
+												strMove.stop(true).css({
+													top: dragTop
+												});
+												
+												
+												
+												
+												
+												
+												
+												
+											}).on('mouseup', function () {
+												if(p.inverthover){
+													strMove.trigger('mouseenter')
+												}
+												$(this).off('mousemove');
+												setTimeout(function () {                             
+													fMove = false
+												}, 50)
+											})
+											return false;
+										})
+										.on('click', function () {
+											if (fMove) {
+												return false
+											}
+										});
+									} else {
+										strWrap.addClass('no_drag');
+									};
+								}
+							} else {
+								strWrap.addClass('str_static');
+							}
+						};
+					};
+					
+					
+					
+					
+				}
+				if (p.xml) {
+					$.ajax({
+						url: p.xml,
+						dataType: "xml",
+						success: function (xml) {
+							var xmlTextEl = $(xml).find('text');
+							var xmlTextLength = xmlTextEl.length;
+							for(var i = 0; i < xmlTextLength; i++){
+								var xmlElActive = xmlTextEl.eq(i);
+								var xmlElContent = xmlElActive.text();
+								var xmlItemEl = $('<span>').text(xmlElContent).appendTo(strWrap);
+								
+								if(p.direction == 'left' || p.direction == 'right'){
+									xmlItemEl.css({display:'inline-block',textAlign:'right'});	
+									if(i > 0){
+										xmlItemEl.css({width:strWrap.width()+xmlItemEl.width()});	
+									}
+								}
+								if(p.direction == 'down' || p.direction == 'up'){
+									xmlItemEl.css({display:'block',textAlign:'left'});	
+										if(i > 0){
+											xmlItemEl.css({paddingTop:strWrap.height()});
+										}
+								}
+								
+							}
+							code();
+						}
+					});
+				} else {
+					code();
+				}
+				strWrap.data({
+					ini:code,
+					startheight: startHeight	
+				})
+				
+				
+				
+				
+			});
+		},
+		update: function () {
+			var el = $(this);
+			var str_origin = $('.str_origin',el);
+			var str_move_clone = $('.str_move_clone',el);
+			str_origin.stop(true);
+			str_move_clone.remove();
+			el.data('ini')();
+		},
+		destroy: function () {
+			
+			var el = $(this);
+			var elMove = $('.str_move',el);
+			var startHeight = el.data('startheight');
+			
+			$('.str_move_clone',el).remove();
+			el.off('mouseenter');
+			el.off('mousedown');
+			el.off('mouseup');
+			el.off('mouseleave');
+			el.off('mousemove');
+			el.removeClass('noStop').removeClass('str_vertical').removeClass('str_active').removeClass('no_drag').removeClass('str_static').removeClass('str_right').removeClass('str_down');
+			
+			var elStyle = el.attr('style'); 
+			if(elStyle){
+				var styleArr = elStyle.split(';');
+				for(var i=0; i < styleArr.length; i++){
+					var str = $.trim(styleArr[i]);
+					var tested =  str.search(/^height/g);
+					if(tested != -1){
+						styleArr[i] = '';	
+					}
+				}
+				var newArr = styleArr.join(';');
+				var newStyle =  newArr.replace(/;+/g,';')
+			
+				if(newStyle == ';'){
+					el.removeAttr('style');	
+				}else{
+					el.attr('style',newStyle);	
+				}
+				
+				if(startHeight){
+					el.css({height:startHeight})	
+				}
+			}
+			elMove.stop(true);
+
+			if(elMove.length){
+				var context = elMove.html();
+				elMove.remove();
+				el.html(context);
+			}
+	
+		},
+		pause: function(){	
+			var el = $(this);
+			var elMove = $('.str_move',el);
+			elMove.stop(true);
+		}, 
+		play: function(){
+			var el = $(this);
+			$(this).off('mousemove');
+			el.data('moveF')();	
+		}
+		
+	};
+	$.fn.liMarquee = function (method) {
+		if (methods[method]) {
+			return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
+		} else if (typeof method === 'object' || !method) {
+			return methods.init.apply(this, arguments);
+		} else {
+			$.error('Метод ' + method + ' в jQuery.liMarquee не существует');
+		}
+	};
+})(jQuery);

+ 55 - 0
src/main/webapp/static/plugins/jquery.liMarquee/liMarquee.css

@@ -0,0 +1,55 @@
+/*Plugin CSS*/
+.str_wrap {
+	overflow:hidden;
+	//zoom:1;
+	width:100%;
+	font-size:12px;
+	line-height:16px;
+	position:relative;
+	-moz-user-select: none;
+	-khtml-user-select: none;
+	user-select: none;  
+	background:#f6f6f6;
+	white-space:nowrap;
+}
+
+.str_wrap.str_active {
+	background:#f1f1f1;
+}
+.str_move { 
+	white-space:nowrap;
+	position:absolute; 
+	top:0; 
+	left:0;
+	cursor:move;
+}
+.str_move_clone {
+	display:inline-block;
+	//display:inline;
+	//zoom:1;
+	vertical-align:top;
+	position:absolute; 
+	left:100%;
+	top:0;
+}
+.str_vertical .str_move_clone {
+	left:0;
+	top:100%;
+}
+.str_down .str_move_clone {
+	left:0;
+	bottom:100%;
+}
+.str_vertical .str_move,
+.str_down .str_move {
+	white-space:normal;
+	width:100%;
+}
+.str_static .str_move,
+.no_drag .str_move,
+.noStop .str_move{
+	cursor:inherit;
+}
+.str_wrap img {
+	max-width:none !important;	
+}