1309 lines
62 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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: '0px',
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);