/* * 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 var strWrap = $(this).addClass('str_wrap').data({ scrollamount: p.scrollamount }) var 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($('
').addClass('str_move')) } var strMove = $('.str_move', strWrap).addClass('str_origin') var strMoveClone = strMove.clone().removeClass('str_origin').addClass('str_move_clone') var 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() var k1 = 0 var timeFunc1 = function () { var fullS = Math.abs(leftPos) var 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 } var moveFuncId1 = false var 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() var k1 = 0 var 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() // крайняя точка var 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) var 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() // крайняя точка var 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 = $('').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)