1/* 2 * jQuery liMarquee v 4.4 3 * 4 * Copyright 2013, Linnik Yura | LI MASS CODE | http://masscode.ru 5 * http://masscode.ru/index.php/k2/item/44-limarquee 6 * Free to use 7 * 8 * Last Update 27.04.2014 9 */ 10(function ($) { 11 var methods = { 12 init: function (options) { 13 var p = { 14 direction: 'left', //УказÑÐ²Ð°ÐµÑ Ð½Ð°Ð¿Ñавление Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑодеÑжимого конÑейнеÑа (left | right | up | down) 15 loop: -1, //ÐадаеÑ, ÑколÑко Ñаз бÑÐ´ÐµÑ Ð¿ÑокÑÑÑиваÑÑÑÑ ÑодеÑжимое. "-1" Ð´Ð»Ñ Ð±ÐµÑконеÑного воÑпÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ 16 scrolldelay: 0, //ÐелиÑина задеÑжки в миллиÑекÑÐ½Ð´Ð°Ñ Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñми 17 scrollamount: 50, //СкоÑоÑÑÑ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑенÑа (px/sec) 18 circular: true, //ÐÑли "true" - ÑÑÑока непÑеÑÑÐ²Ð½Ð°Ñ 19 drag: true, //ÐÑли "true" - вклÑÑено пеÑеÑаÑкивание ÑÑÑоки 20 runshort: true, //ÐÑли "true" - коÑоÑÐºÐ°Ñ ÑÑÑока Ñоже "бегаеÑ", "false" - ÑÑÐ¾Ð¸Ñ Ð½Ð° меÑÑе 21 hoverstop: true, //true - ÑÑÑока оÑÑанавливаеÑÑÑ Ð¿Ñи наведении кÑÑÑоÑа мÑÑи, false - ÑÑÑока не оÑÑанавливаеÑÑÑ 22 inverthover: false, //false - ÑÑандаÑÑное поведение. ÐÑли "true" - ÑÑÑока наÑÐ¸Ð½Ð°ÐµÑ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ðµ ÑолÑко пÑи наведении кÑÑÑоÑа 23 xml: false //ÐÑÑÑ Ðº xml ÑÐ°Ð¹Ð»Ñ Ñ Ð½ÑжнÑм ÑекÑÑом 24 }; 25 if (options) { 26 $.extend(p, options); 27 } 28 29 return this.each(function () { 30 var enterEvent = 'mouseenter'; 31 var leaveEvent = 'mouseleave'; 32 if(p.inverthover){ 33 enterEvent = 'mouseleave'; 34 leaveEvent = 'mouseenter'; 35 } 36 37 38 var 39 loop = p.loop, 40 strWrap = $(this).addClass('str_wrap'), 41 fMove = false; 42 43 44 45 var strWrapStyle = strWrap.attr('style'); 46 47 if(strWrapStyle){ 48 var wrapStyleArr = strWrapStyle.split(';'); 49 var startHeight = false; 50 for(var i=0; i < wrapStyleArr.length; i++){ 51 var str = $.trim(wrapStyleArr[i]); 52 var tested = str.search(/^height/g); 53 if(tested != -1){ 54 startHeight = parseFloat(strWrap.css('height')); 55 } 56 } 57 } 58 59 60 61 var code = function () { 62 63 64 strWrap.off('mouseleave'); 65 strWrap.off('mouseenter'); 66 strWrap.off('mousemove'); 67 strWrap.off('mousedown'); 68 strWrap.off('mouseup'); 69 70 71 72 73 74 75 76 77 78 if(!$('.str_move',strWrap).length){ 79 strWrap.wrapInner($('<div>').addClass('str_move')); 80 } 81 82 var 83 strMove = $('.str_move', strWrap).addClass('str_origin'), 84 strMoveClone = strMove.clone().removeClass('str_origin').addClass('str_move_clone'), 85 time = 0; 86 87 88 89 if (!p.hoverstop) { 90 strWrap.addClass('noStop'); 91 } 92 93 var circCloneHor = function(){ 94 strMoveClone.clone().css({ 95 left:'100%', 96 right:'auto', 97 width: strMove.width() 98 }).appendTo(strMove); 99 strMoveClone.css({ 100 right: '100%', 101 left:'auto', 102 width: strMove.width() 103 }).appendTo(strMove); 104 } 105 106 var circCloneVert = function(){ 107 strMoveClone.clone().css({ 108 top: '100%', 109 bottom:'auto', 110 height: strMove.height() 111 }).appendTo(strMove); 112 strMoveClone.css({ 113 bottom: '100%', 114 top:'auto', 115 height:strMove.height() 116 }).appendTo(strMove); 117 } 118 119 120 121 if (p.direction == 'left') { 122 strWrap.height(strMove.outerHeight()) 123 if (strMove.width() > strWrap.width()) { 124 var leftPos = -strMove.width(); 125 126 if (p.circular) { 127 128 if (!p.xml) { 129 circCloneHor() 130 leftPos = -(strMove.width() + (strMove.width() - strWrap.width())); 131 } 132 } 133 if (p.xml) { 134 strMove.css({ 135 left:strWrap.width() 136 }) 137 } 138 var 139 strMoveLeft = strWrap.width(), 140 k1 = 0, 141 timeFunc1 = function () { 142 var 143 fullS = Math.abs(leftPos), 144 time = (fullS / p.scrollamount) * 1000; 145 if (parseFloat(strMove.css('left')) != 0) { 146 fullS = (fullS + strWrap.width()); 147 time = (fullS - (strWrap.width() - parseFloat(strMove.css('left')))) / p.scrollamount * 1000; 148 } 149 return time; 150 }, 151 moveFuncId1 = false, 152 moveFunc1 = function () { 153 if (loop != 0) { 154 strMove.stop(true).animate({ 155 left: leftPos 156 }, timeFunc1(), 'linear', function () { 157 $(this).css({ 158 left: strWrap.width() 159 }); 160 if (loop == -1) { 161 moveFuncId1 = setTimeout(moveFunc1, p.scrolldelay); 162 } else { 163 loop--; 164 moveFuncId1 = setTimeout(moveFunc1, p.scrolldelay); 165 } 166 }); 167 } 168 }; 169 if(!p.inverthover){ 170 moveFunc1(); 171 } 172 173 if (p.hoverstop) { 174 strWrap.on(enterEvent, function () { 175 $(this).addClass('str_active'); 176 clearTimeout(moveFuncId1); 177 strMove.stop(true); 178 }).on(leaveEvent, function () { 179 $(this).removeClass('str_active'); 180 $(this).off('mousemove'); 181 moveFunc1(); 182 }); 183 184 if (p.drag) { 185 strWrap.on('mousedown', function (e) { 186 if(p.inverthover){ 187 strMove.stop(true); 188 } 189 //drag 190 var dragLeft; 191 var dir = 1; 192 var newX; 193 var oldX = e.clientX; 194 //drag 195 196 strMoveLeft = strMove.position().left; 197 k1 = strMoveLeft - (e.clientX - strWrap.offset().left); 198 199 200 201 $(this).on('mousemove', function (e) { 202 fMove = true; 203 204 //drag 205 newX = e.clientX; 206 if(newX > oldX){ 207 dir = 1 208 }else{ 209 dir = -1 210 } 211 oldX = newX 212 dragLeft = k1 + (e.clientX - strWrap.offset().left); 213 214 if (!p.circular) { 215 if(dragLeft < -strMove.width() && dir < 0){ 216 dragLeft = strWrap.width(); 217 strMoveLeft = strMove.position().left; 218 k1 = strMoveLeft - (e.clientX - strWrap.offset().left); 219 } 220 if(dragLeft > strWrap.width() && dir > 0){ 221 dragLeft = -strMove.width(); 222 strMoveLeft = strMove.position().left; 223 k1 = strMoveLeft - (e.clientX - strWrap.offset().left); 224 } 225 }else{ 226 if(dragLeft < -strMove.width() && dir < 0){ 227 dragLeft = 0; 228 strMoveLeft = strMove.position().left; 229 k1 = strMoveLeft - (e.clientX - strWrap.offset().left); 230 } 231 if(dragLeft > 0 && dir > 0){ 232 dragLeft = -strMove.width(); 233 strMoveLeft = strMove.position().left; 234 k1 = strMoveLeft - (e.clientX - strWrap.offset().left); 235 } 236 237 } 238 239 240 strMove.stop(true).css({ 241 left: dragLeft 242 }); 243 //drag 244 245 246 247 }).on('mouseup', function () { 248 $(this).off('mousemove'); 249 if(p.inverthover){ 250 strMove.trigger('mouseenter') 251 } 252 setTimeout(function () { 253 fMove = false 254 }, 50) 255 256 }); 257 return false;
258 }) 259 .on('click', function () { 260 if (fMove) { 261 return false 262 } 263 }); 264 } else { 265 strWrap.addClass('no_drag'); 266 }; 267 } 268 } else { 269 if (p.runshort) { 270 strMove.css({ 271 left: strWrap.width() 272 }); 273 var 274 strMoveLeft = strWrap.width(), 275 k1 = 0, 276 timeFunc = function () { 277 time = (strMove.width() + strMove.position().left) / p.scrollamount * 1000; 278 return time; 279 }; 280 var moveFunc = function () { 281 var leftPos = -strMove.width(); 282 strMove.animate({ 283 left: leftPos 284 }, timeFunc(), 'linear', function () { 285 $(this).css({ 286 left: strWrap.width() 287 }); 288 if (loop == -1) { 289 setTimeout(moveFunc, p.scrolldelay); 290 } else { 291 loop--; 292 setTimeout(moveFunc, p.scrolldelay); 293 } 294 }); 295 }; 296 if(!p.inverthover){ 297 moveFunc(); 298 } 299 if (p.hoverstop) { 300 strWrap.on(enterEvent, function () { 301 $(this).addClass('str_active'); 302 strMove.stop(true); 303 }).on(leaveEvent, function () { 304 $(this).removeClass('str_active'); 305 $(this).off('mousemove'); 306 moveFunc(); 307 }); 308 309 if (p.drag) { 310 strWrap.on('mousedown', function (e) { 311 if(p.inverthover){ 312 strMove.stop(true); 313 } 314 315 //drag 316 var dragLeft; 317 var dir = 1; 318 var newX; 319 var oldX = e.clientX; 320 //drag 321 322 strMoveLeft = strMove.position().left; 323 k1 = strMoveLeft - (e.clientX - strWrap.offset().left); 324 $(this).on('mousemove', function (e) { 325 fMove = true; 326 327 328 //drag 329 newX = e.clientX; 330 if(newX > oldX){ 331 dir = 1 332 }else{ 333 dir = -1 334 } 335 oldX = newX 336 dragLeft = k1 + (e.clientX - strWrap.offset().left); 337 338 if(dragLeft < -strMove.width() && dir < 0){ 339 dragLeft = strWrap.width(); 340 strMoveLeft = strMove.position().left; 341 k1 = strMoveLeft - (e.clientX - strWrap.offset().left); 342 } 343 if(dragLeft > strWrap.width() && dir > 0){ 344 dragLeft = -strMove.width(); 345 strMoveLeft = strMove.position().left; 346 k1 = strMoveLeft - (e.clientX - strWrap.offset().left); 347 } 348 349 350 strMove.stop(true).css({ 351 left: dragLeft 352 }); 353 354 355 356 }).on('mouseup', function () { 357 if(p.inverthover){ 358 strMove.trigger('mouseenter') 359 } 360 $(this).off('mousemove'); 361 setTimeout(function () { 362 fMove = false 363 }, 50) 364 }); 365 return false; 366 }) 367 .on('click', function () { 368 if (fMove) { 369 return false 370 } 371 }); 372 } else { 373 strWrap.addClass('no_drag'); 374 }; 375 } 376 } else { 377 strWrap.addClass('str_static'); 378 } 379 }; 380 }; 381 if (p.direction == 'right') { 382 strWrap.height(strMove.outerHeight()) 383 strWrap.addClass('str_right'); 384 strMove.css({ 385 left: -strMove.width(), 386 right: 'auto' 387 }) 388 389 if (strMove.width() > strWrap.width()) { 390 var leftPos = strWrap.width(); 391 strMove.css({ 392 left: 0 393 }) 394 if (p.circular) { 395 if (!p.xml) { 396 circCloneHor() 397 //ÐпÑеделÑем кÑайнÑÑ ÑоÑÐºÑ 398 leftPos = strMove.width(); 399 } 400 } 401 402 var 403 k2 = 0; 404 timeFunc = function () { 405 var 406 fullS = strWrap.width(), //кÑайнÑÑ ÑоÑка 407 time = (fullS / p.scrollamount) * 1000; //вÑÐµÐ¼Ñ 408 if (parseFloat(strMove.css('left')) != 0) { 409 fullS = (strMove.width() + strWrap.width()); 410 time = (fullS - (strMove.width() + parseFloat(strMove.css('left')))) / p.scrollamount * 1000; 411 } 412 return time; 413 }; 414 var moveFunc = function () { 415 416 if (loop != 0) { 417 strMove.animate({ 418 left: leftPos 419 }, timeFunc(), 'linear', function () { 420 $(this).css({ 421 left: -strMove.width() 422 }); 423 if (loop == -1) { 424 setTimeout(moveFunc, p.scrolldelay); 425 } else { 426 loop--; 427 setTimeout(moveFunc, p.scrolldelay); 428 }; 429 }); 430 }; 431 }; 432 433 if(!p.inverthover){ 434 moveFunc(); 435 } 436 if (p.hoverstop) { 437 strWrap.on(enterEvent, function () { 438 $(this).addClass('str_active'); 439 strMove.stop(true); 440 }).on(leaveEvent, function () { 441 $(this).removeClass('str_active'); 442 $(this).off('mousemove'); 443 moveFunc(); 444 }); 445 446 if (p.drag) { 447 448 strWrap.on('mousedown', function (e) { 449 if(p.inverthover){ 450 strMove.stop(true); 451 } 452 453 454 //drag 455 var dragLeft; 456 var dir = 1; 457 var newX; 458 var oldX = e.clientX; 459 //drag 460 461 strMoveLeft = strMove.position().left; 462 k2 = strMoveLeft - (e.clientX - strWrap.offset().left); 463 $(this).on('mousemove', function (e) { 464 465 fMove = true; 466 467 //drag 468 newX = e.clientX; 469 if(newX > oldX){ 470 dir = 1 471 }else{ 472 dir = -1 473 } 474 oldX = newX 475 dragLeft = k2 + (e.clientX - strWrap.offset().left); 476 477 478 if (!p.circular) { 479 480 if(dragLeft < -strMove.width() && dir < 0){ 481 dragLeft = strWrap.width(); 482 strMoveLeft = strMove.position().left; 483 k2 = strMoveLeft - (e.clientX - strWrap.offset().left); 484 } 485 if(dragLeft > strWrap.width() && dir > 0){ 486 dragLeft = -strMove.width(); 487 strMoveLeft = strMove.position().left; 488 k2 = strMoveLeft - (e.clientX - strWrap.offset().left); 489 } 490 }else{ 491 if(dragLeft < -strMove.width() && dir < 0){ 492 dragLeft = 0; 493 strMoveLeft = strMove.position().left; 494 k2 = strMoveLeft - (e.clientX - strWrap.offset().left); 495 } 496 if(dragLeft > 0 && dir > 0){ 497 dragLeft = -strMove.width(); 498 strMoveLeft = strMove.position().left; 499 k2 = strMoveLeft - (e.clientX - strWrap.offset().left); 500 } 501 502 } 503 504 strMove.stop(true).css({ 505 left: dragLeft 506 }); 507 508 509 }).on('mouseup', function () { 510 if(p.inverthover){ 511 strMove.trigger('mouseenter') 512 } 513 $(this).off('mousemove'); 514 setTimeout(function () { 515 fMove = false 516 }, 50) 517 }); 518 return false;
519 }) 520 .on('click', function () { 521 if (fMove) { 522 return false 523 } 524 }); 525 } else { 526 strWrap.addClass('no_drag'); 527 }; 528 } 529 } else { 530 531 if (p.runshort) { 532 533 var k2 = 0; 534 var timeFunc = function () { 535 time = (strWrap.width() - strMove.position().left) / p.scrollamount * 1000; 536 return time; 537 }; 538 var moveFunc = function () { 539 var leftPos = strWrap.width(); 540 strMove.animate({ 541 left: leftPos 542 }, timeFunc(), 'linear', function () { 543 $(this).css({ 544 left: -strMove.width() 545 }); 546 if (loop == -1) { 547 setTimeout(moveFunc, p.scrolldelay); 548 } else { 549 loop--; 550 setTimeout(moveFunc, p.scrolldelay); 551 }; 552 }); 553 }; 554 555 if(!p.inverthover){ 556 moveFunc(); 557 } 558 if (p.hoverstop) { 559 strWrap.on(enterEvent, function () { 560 $(this).addClass('str_active'); 561 strMove.stop(true); 562 }).on(leaveEvent, function () { 563 $(this).removeClass('str_active'); 564 $(this).off('mousemove'); 565 moveFunc(); 566 }); 567 568 if (p.drag) { 569 strWrap.on('mousedown', function (e) { 570 if(p.inverthover){ 571 strMove.stop(true); 572 } 573 574 //drag 575 var dragLeft; 576 var dir = 1; 577 var newX; 578 var oldX = e.clientX; 579 //drag 580 581 strMoveLeft = strMove.position().left; 582 k2 = strMoveLeft - (e.clientX - strWrap.offset().left); 583 $(this).on('mousemove', function (e) { 584 fMove = true; 585 586 587 588 //drag 589 newX = e.clientX; 590 if(newX > oldX){ 591 dir = 1 592 }else{ 593 dir = -1 594 } 595 oldX = newX 596 dragLeft = k2 + (e.clientX - strWrap.offset().left); 597 598 if(dragLeft < -strMove.width() && dir < 0){ 599 dragLeft = strWrap.width(); 600 strMoveLeft = strMove.position().left; 601 k2 = strMoveLeft - (e.clientX - strWrap.offset().left); 602 } 603 if(dragLeft > strWrap.width() && dir > 0){ 604 dragLeft = -strMove.width(); 605 strMoveLeft = strMove.position().left; 606 k2 = strMoveLeft - (e.clientX - strWrap.offset().left); 607 } 608 609 strMove.stop(true).css({ 610 left:dragLeft 611 }); 612 613 }).on('mouseup', function () { 614 if(p.inverthover){ 615 strMove.trigger('mouseenter') 616 } 617 $(this).off('mousemove'); 618 setTimeout(function () { 619 fMove = false 620 }, 50) 621 }); 622 return false; 623 }) 624 .on('click', function () { 625 if (fMove) { 626 return false 627 } 628 }); 629 } else { 630 strWrap.addClass('no_drag'); 631 }; 632 } 633 } else { 634 strWrap.addClass('str_static'); 635 } 636 }; 637 }; 638 if (p.direction == 'up') { 639 strWrap.addClass('str_vertical'); 640 641 if (strMove.height() > strWrap.height()) { 642 var topPos = -strMove.height(); 643 if (p.circular) { 644 if (!p.xml) { 645 circCloneVert(); 646 topPos = -(strMove.height() + (strMove.height() - strWrap.height())); 647 } 648 } 649 if (p.xml) { 650 strMove.css({ 651 top:strWrap.height() 652 }) 653 } 654 var 655 k2 = 0; 656 timeFunc = function () { 657 var 658 fullS = Math.abs(topPos), 659 time = (fullS / p.scrollamount) * 1000; 660 if (parseFloat(strMove.css('top')) != 0) { 661 fullS = (fullS + strWrap.height()); 662 time = (fullS - (strWrap.height() - parseFloat(strMove.css('top')))) / p.scrollamount * 1000; 663 } 664 665 return time; 666 }; 667 var moveFunc = function () { 668 if (loop != 0) { 669 strMove.animate({ 670 top: topPos 671 }, timeFunc(), 'linear', function () { 672 $(this).css({ 673 top: strWrap.height() 674 }); 675 if (loop == -1) { 676 setTimeout(moveFunc, p.scrolldelay); 677 } else { 678 loop--; 679 setTimeout(moveFunc, p.scrolldelay); 680 }; 681 }); 682 }; 683 }; 684 if(!p.inverthover){ 685 moveFunc(); 686 } 687 if (p.hoverstop) { 688 strWrap.on(enterEvent, function () { 689 $(this).addClass('str_active'); 690 strMove.stop(true); 691 }).on(leaveEvent, function () { 692 $(this).removeClass('str_active'); 693 $(this).off('mousemove'); 694 moveFunc(); 695 }); 696 697 if (p.drag) { 698 strWrap.on('mousedown', function (e) { 699 if(p.inverthover){ 700 strMove.stop(true); 701 } 702 703 //drag 704 var dragTop; 705 var dir = 1; 706 var newY; 707 var oldY = e.clientY; 708 //drag 709 710 711 strMoveTop = strMove.position().top; 712 k2 = strMoveTop - (e.clientY - strWrap.offset().top); 713 $(this).on('mousemove', function (e) { 714 715 fMove = true; 716 717 //drag 718 newY = e.clientY; 719 if(newY > oldY){ 720 dir = 1 721 }else{ 722 if(newY < oldY){ 723 dir = -1 724 } 725 } 726 oldY = newY 727 dragTop = k2 + e.clientY - strWrap.offset().top; 728 729 730 if (!p.circular){ 731 if(dragTop < -strMove.height() && dir < 0){ 732 dragTop = strWrap.height(); 733 strMoveTop = strMove.position().top; 734 k2 = strMoveTop - (e.clientY - strWrap.offset().top); 735 } 736 if(dragTop > strWrap.height() && dir > 0){ 737 dragTop = -strMove.height(); 738 strMoveTop = strMove.position().top; 739 k2 = strMoveTop - (e.clientY - strWrap.offset().top); 740 } 741 }else{ 742 if(dragTop < -strMove.height() && dir < 0){ 743 dragTop = 0; 744 strMoveTop = strMove.position().top; 745 k2 = strMoveTop - (e.clientY - strWrap.offset().top); 746 } 747 if(dragTop > 0 && dir > 0){ 748 dragTop = -strMove.height(); 749 strMoveTop = strMove.position().top; 750 k2 = strMoveTop - (e.clientY - strWrap.offset().top); 751 } 752 } 753 754 755 strMove.stop(true).css({ 756 top: dragTop 757 }); 758 //drag 759 760 761 762 763 764 765 766 767 768 769 770 771 }).on('mouseup', function () { 772 if(p.inverthover){ 773 strMove.trigger('mouseenter') 774 } 775 $(this).off('mousemove'); 776 setTimeout(function () { 777 fMove = false 778 }, 50) 779 }); 780 return false;
781 }) 782 .on('click', function () { 783 if (fMove) { 784 return false 785 } 786 }); 787 } else { 788 strWrap.addClass('no_drag'); 789 }; 790 } 791 } else { 792 if (p.runshort) { 793 strMove.css({ 794 top: strWrap.height() 795 }); 796 var k2 = 0; 797 var timeFunc = function () { 798 799 time = (strMove.height() + strMove.position().top) / p.scrollamount * 1000; 800 801 return time; 802 }; 803 var moveFunc = function () { 804 var topPos = -strMove.height(); 805 strMove.animate({ 806 top: topPos 807 }, timeFunc(), 'linear', function () { 808 $(this).css({ 809 top: strWrap.height() 810 }); 811 if (loop == -1) { 812 setTimeout(moveFunc, p.scrolldelay); 813 } else { 814 loop--; 815 setTimeout(moveFunc, p.scrolldelay); 816 }; 817 }); 818 }; 819 if(!p.inverthover){ 820 moveFunc(); 821 } 822 if (p.hoverstop) { 823 strWrap.on(enterEvent, function () { 824 $(this).addClass('str_active'); 825 strMove.stop(true); 826 }).on(leaveEvent, function () { 827 $(this).removeClass('str_active'); 828 $(this).off('mousemove'); 829 moveFunc(); 830 }); 831 832 if (p.drag) { 833 strWrap.on('mousedown', function (e) { 834 if(p.inverthover){ 835 strMove.stop(true); 836 } 837 838 //drag 839 var dragTop; 840 var dir = 1; 841 var newY; 842 var oldY = e.clientY; 843 //drag 844 845 strMoveTop = strMove.position().top; 846 k2 = strMoveTop - (e.clientY - strWrap.offset().top); 847 $(this).on('mousemove', function (e) { 848 849 850 fMove = true; 851 852 //drag 853 newY = e.clientY; 854 if(newY > oldY){ 855 dir = 1 856 }else{ 857 if(newY < oldY){ 858 dir = -1 859 } 860 } 861 oldY = newY 862 dragTop = k2 + e.clientY - strWrap.offset().top; 863 864 if(dragTop < -strMove.height() && dir < 0){ 865 dragTop = strWrap.height(); 866 strMoveTop = strMove.position().top; 867 k2 = strMoveTop - (e.clientY - strWrap.offset().top); 868 } 869 if(dragTop > strWrap.height() && dir > 0){ 870 dragTop = -strMove.height(); 871 strMoveTop = strMove.position().top; 872 k2 = strMoveTop - (e.clientY - strWrap.offset().top); 873 } 874 //*drag 875 876 strMove.stop(true).css({ 877 top: dragTop 878 }); 879 880 881 }).on('mouseup', function () { 882 if(p.inverthover){ 883 strMove.trigger('mouseenter') 884 } 885 $(this).off('mousemove'); 886 setTimeout(function () { 887 fMove = false 888 }, 50) 889 }); 890 return false; 891 }) 892 .on('click', function () { 893 if (fMove) { 894 return false 895 } 896 }); 897 } else { 898 strWrap.addClass('no_drag'); 899 }; 900 } 901 } else { 902 strWrap.addClass('str_static'); 903 } 904 }; 905 }; 906 if (p.direction == 'down') { 907 908 strWrap.addClass('str_vertical').addClass('str_down'); 909 strMove.css({ 910 top: -strMove.height(), 911 bottom: 'auto' 912 }) 913 if (strMove.height() > strWrap.height()) { 914 var topPos = strWrap.height(); 915 if (p.circular) { 916 if (!p.xml) { 917 circCloneVert(); 918 topPos = strMove.height(); 919 } 920 } 921 if (p.xml) { 922 strMove.css({ 923 top:-strMove.height() 924 }) 925 } 926 var 927 k2 = 0; 928 timeFunc = function () { 929 var 930 fullS = strWrap.height(), //кÑайнÑÑ ÑоÑка 931 time = (fullS / p.scrollamount) * 1000; //вÑÐµÐ¼Ñ 932 933 if (parseFloat(strMove.css('top')) != 0) { 934 fullS = (strMove.height() + strWrap.height()); 935 time = (fullS - (strMove.height() + parseFloat(strMove.css('top')))) / p.scrollamount * 1000; 936 } 937 return time; 938 }; 939 var moveFunc = function () { 940 941 if (loop != 0) { 942 strMove.animate({ 943 top: topPos 944 }, timeFunc(), 'linear', function () { 945 $(this).css({ 946 top: -strMove.height() 947 }); 948 if (loop == -1) { 949 950 setTimeout(moveFunc, p.scrolldelay); 951 } else { 952 loop--; 953 setTimeout(moveFunc, p.scrolldelay); 954 }; 955 }); 956 }; 957 }; 958 if(!p.inverthover){ 959 moveFunc(); 960 } 961 if (p.hoverstop) { 962 strWrap.on(enterEvent, function () { 963 $(this).addClass('str_active'); 964 strMove.stop(true); 965 }).on(leaveEvent, function () { 966 $(this).removeClass('str_active'); 967 $(this).off('mousemove'); 968 moveFunc(); 969 }); 970 971 if (p.drag) { 972 strWrap.on('mousedown', function (e) { 973 if(p.inverthover){ 974 strMove.stop(true); 975 } 976 977 //drag 978 var dragTop; 979 var dir = 1; 980 var newY; 981 var oldY = e.clientY; 982 //drag 983 984 985 strMoveTop = strMove.position().top; 986 k2 = strMoveTop - (e.clientY - strWrap.offset().top); 987 $(this).on('mousemove', function (e) { 988 989 fMove = true; 990 991 //drag 992 newY = e.clientY; 993 if(newY > oldY){ 994 dir = 1 995 }else{ 996 if(newY < oldY){ 997 dir = -1 998 } 999 } 1000 oldY = newY 1001 dragTop = k2 + e.clientY - strWrap.offset().top; 1002 1003 1004 if (!p.circular){ 1005 if(dragTop < -strMove.height() && dir < 0){ 1006 dragTop = strWrap.height(); 1007 strMoveTop = strMove.position().top; 1008 k2 = strMoveTop - (e.clientY - strWrap.offset().top); 1009 } 1010 if(dragTop > strWrap.height() && dir > 0){ 1011 dragTop = -strMove.height(); 1012 strMoveTop = strMove.position().top; 1013 k2 = strMoveTop - (e.clientY - strWrap.offset().top); 1014 } 1015 }else{ 1016 if(dragTop < -strMove.height() && dir < 0){ 1017 dragTop = 0; 1018 strMoveTop = strMove.position().top; 1019 k2 = strMoveTop - (e.clientY - strWrap.offset().top); 1020 } 1021 if(dragTop > 0 && dir > 0){ 1022 dragTop = -strMove.height(); 1023 strMoveTop = strMove.position().top; 1024 k2 = strMoveTop - (e.clientY - strWrap.offset().top); 1025 } 1026 } 1027 1028 1029 strMove.stop(true).css({ 1030 top: dragTop 1031 }); 1032 //drag 1033 1034 1035 1036 }).on('mouseup', function () { 1037 if(p.inverthover){ 1038 strMove.trigger('mouseenter') 1039 } 1040 $(this).off('mousemove'); 1041 setTimeout(function () { 1042 fMove = false 1043 }, 50) 1044 }); 1045 return false;
1046 }) 1047 .on('click', function () { 1048 if (fMove) { 1049 return false 1050 } 1051 }); 1052 } else { 1053 strWrap.addClass('no_drag'); 1054 }; 1055 } 1056 } else { 1057 if (p.runshort) { 1058 var k2 = 0; 1059 var timeFunc = function () { 1060 time = (strWrap.height() - strMove.position().top) / p.scrollamount * 1000; 1061 return time; 1062 }; 1063 var moveFunc = function () { 1064 var topPos = strWrap.height(); 1065 strMove.animate({ 1066 top: topPos 1067 }, timeFunc(), 'linear', function () { 1068 $(this).css({ 1069 top: -strMove.height() 1070 }); 1071 if (loop == -1) { 1072 setTimeout(moveFunc, p.scrolldelay); 1073 } else { 1074 loop--; 1075 setTimeout(moveFunc, p.scrolldelay); 1076 }; 1077 }); 1078 }; 1079 if(!p.inverthover){ 1080 moveFunc(); 1081 } 1082 if (p.hoverstop) { 1083 strWrap.on(enterEvent, function () { 1084 $(this).addClass('str_active'); 1085 strMove.stop(true); 1086 }).on(leaveEvent, function () { 1087 $(this).removeClass('str_active'); 1088 $(this).off('mousemove'); 1089 moveFunc(); 1090 }); 1091 1092 if (p.drag) { 1093 strWrap.on('mousedown', function (e) { 1094 if(p.inverthover){ 1095 strMove.stop(true); 1096 } 1097 1098 //drag 1099 var dragTop; 1100 var dir = 1; 1101 var newY; 1102 var oldY = e.clientY; 1103 //drag 1104 1105 strMoveTop = strMove.position().top; 1106 k2 = strMoveTop - (e.clientY - strWrap.offset().top); 1107 $(this).on('mousemove', function (e) { 1108 fMove = true; 1109 1110 //drag 1111 newY = e.clientY; 1112 if(newY > oldY){ 1113 dir = 1 1114 }else{ 1115 if(newY < oldY){ 1116 dir = -1 1117 } 1118 } 1119 oldY = newY 1120 dragTop = k2 + e.clientY - strWrap.offset().top; 1121 1122 1123 if(dragTop < -strMove.height() && dir < 0){ 1124 dragTop = strWrap.height(); 1125 strMoveTop = strMove.position().top; 1126 k2 = strMoveTop - (e.clientY - strWrap.offset().top); 1127 } 1128 if(dragTop > strWrap.height() && dir > 0){ 1129 dragTop = -strMove.height(); 1130 strMoveTop = strMove.position().top; 1131 k2 = strMoveTop - (e.clientY - strWrap.offset().top); 1132 } 1133 //*drag 1134 1135 strMove.stop(true).css({ 1136 top: dragTop 1137 }); 1138 1139 1140 1141 1142 1143 1144 1145 1146 }).on('mouseup', function () { 1147 if(p.inverthover){ 1148 strMove.trigger('mouseenter') 1149 } 1150 $(this).off('mousemove'); 1151 setTimeout(function () { 1152 fMove = false 1153 }, 50) 1154 }) 1155 return false; 1156 }) 1157 .on('click', function () { 1158 if (fMove) { 1159 return false 1160 } 1161 }); 1162 } else { 1163 strWrap.addClass('no_drag'); 1164 }; 1165 } 1166 } else { 1167 strWrap.addClass('str_static'); 1168 } 1169 }; 1170 }; 1171 1172 1173 1174 1175 } 1176 if (p.xml) { 1177 $.ajax({ 1178 url: p.xml, 1179 dataType: "xml", 1180 success: function (xml) { 1181 var xmlTextEl = $(xml).find('text'); 1182 var xmlTextLength = xmlTextEl.length; 1183 for(var i = 0; i < xmlTextLength; i++){ 1184 var xmlElActive = xmlTextEl.eq(i); 1185 var xmlElContent = xmlElActive.text(); 1186 var xmlItemEl = $('<span>').text(xmlElContent).appendTo(strWrap); 1187 1188 if(p.direction == 'left' || p.direction == 'right'){ 1189 xmlItemEl.css({display:'inline-block',textAlign:'right'}); 1190 if(i > 0){ 1191 xmlItemEl.css({width:strWrap.width()+xmlItemEl.width()}); 1192 } 1193 } 1194 if(p.direction == 'down' || p.direction == 'up'){ 1195 xmlItemEl.css({display:'block',textAlign:'left'}); 1196 if(i > 0){ 1197 xmlItemEl.css({paddingTop:strWrap.height()}); 1198 } 1199 } 1200 1201 } 1202 code(); 1203 } 1204 }); 1205 } else { 1206 code(); 1207 } 1208 strWrap.data({ 1209 ini:code, 1210 startheight: startHeight 1211 }) 1212 1213 1214 1215 1216 }); 1217 }, 1218 update: function () { 1219 var el = $(this); 1220 var str_origin = $('.str_origin',el); 1221 var str_move_clone = $('.str_move_clone',el); 1222 str_origin.stop(true); 1223 str_move_clone.remove(); 1224 el.data('ini')(); 1225 }, 1226 destroy: function () { 1227 1228 var el = $(this); 1229 var elMove = $('.str_move',el); 1230 var startHeight = el.data('startheight'); 1231 1232 $('.str_move_clone',el).remove(); 1233 el.off('mouseenter'); 1234 el.off('mousedown'); 1235 el.off('mouseup'); 1236 el.off('mouseleave'); 1237 el.off('mousemove'); 1238 el.removeClass('noStop').removeClass('str_vertical').removeClass('str_active').removeClass('no_drag').removeClass('str_static').removeClass('str_right').removeClass('str_down'); 1239 1240 var elStyle = el.attr('style'); 1241 if(elStyle){ 1242 var styleArr = elStyle.split(';'); 1243 for(var i=0; i < styleArr.length; i++){ 1244 var str = $.trim(styleArr[i]); 1245 var tested = str.search(/^height/g); 1246 if(tested != -1){ 1247 styleArr[i] = ''; 1248 } 1249 } 1250 var newArr = styleArr.join(';'); 1251 var newStyle = newArr.replace(/;+/g,';') 1252 1253 if(newStyle == ';'){ 1254 el.removeAttr('style'); 1255 }else{ 1256 el.attr('style',newStyle); 1257 } 1258 1259 if(startHeight){ 1260 el.css({height:startHeight}) 1261 } 1262 } 1263 elMove.stop(true); 1264 1265 if(elMove.length){ 1266 var context = elMove.html(); 1267 elMove.remove(); 1268 el.html(context); 1269 } 1270 1271 } 1272 }; 1273 $.fn.liMarquee = function (method) { 1274 if (methods[method]) { 1275 return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); 1276 } else if (typeof method === 'object' || !method) { 1277 return methods.init.apply(this, arguments); 1278 } else { 1279 $.error('ÐеÑод ' + method + ' в jQuery.liMarquee не ÑÑÑеÑÑвÑеÑ'); 1280 } 1281 }; 1282})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.