1(function($){ 2 $.fn.parallaxSlider=function(o) 3 { 4 5 var options = { 6 prevButton: $('.prevButton') 7 , nextButton: $('.nextButton') 8 , duration: 1000 9 , autoSwitcher: true 10 , autoSwitcherDelay: 7000 11 , slider_navs: true 12 , scrolling_description: false 13 , slider_pagination: 'buttons_pagination' 14 , animateLayout: 'zoom-fade-eff' //simple-fade-eff, zoom-fade-eff, slide-top-eff 15 , parallaxEffect: 'parallax_effect_normal' 16 , parallaxInvert: false 17 , liteMode: false 18 } 19 $.extend(options, o); 20 21 var 22 _this = $(this) 23 , _window = $(window) 24 , _document = $(document) 25 , sliderData = new Array() 26 , itemLength = 0 27 , currIndex 28 , prevIndex 29 , isPreviewLoading = false 30 , isPreviewAnimate = false 31 , intervalSwitcher 32 33 , obj_inner 34 , mainImageHolder 35 , primaryImageHolder 36 , secondarImageHolder 37 , mainCaptionHolder 38 , primaryCaption 39 , secondaryCaption 40 , mainCaptionHolderContainer 41 , previewSpinner 42 , parallaxPrevBtn 43 , parallaxNextBtn 44 , slidesCounterList 45 , paralaxSliderPagination 46 , progressBar 47 , youtubeApiLoad = false 48 , vimeoApiLoad = false 49 50 , parallax = true 51 , parallaxType = 'parallax_normal' 52 , _baseHeight 53 , _thisOffsetTop = _this.offset().top 54 , _thisHeight = _this.height() 55 , _windowWidth = _window.width() 56 , _windowHeight = _window.height() 57 , originalWidth = 0 58 , originalHeight = 0 59 , bufferRatio 60 ; 61 62 63 // parse slider data 64 $('ul li', _this).each( 65 function() 66 { 67 var this_slide = $(this), 68 slideData = new Object(), 69 slide_type = 'image', 70 image = this_slide.attr('data-preview'), 71 thumb = this_slide.attr('data-thumb-url'), 72 caption = this_slide.html(), 73 link = this_slide.attr('data-ulr-link'), 74 mp4_src = this_slide.attr('data-video-src-mp4'), 75 webm_src = this_slide.attr('data-video-src-webm'), 76 ogv_src = this_slide.attr('data-video-src-ogv'), 77 video_loader = this_slide.attr('data-video-preloader'), 78 youtube_id = this_slide.attr('data-video-youtube-id'), 79 vimeo_id = this_slide.attr('data-video-vimeo-id'); 80 81 if (mp4_src || webm_src || ogv_src) slide_type = 'library_video'; 82 if (youtube_id) { 83 slide_type = 'youtube_video'; 84 youtubeApiLoad = true 85 } 86 if (vimeo_id) { 87 slide_type = 'vimeo_video'; 88 vimeoApiLoad = true 89 } 90 if (options.liteMode) slide_type = 'image'; 91 92 slideData = 93 { 94 slide_type: slide_type, 95 image: image, 96 thumb: thumb, 97 caption: caption, 98 link: link, 99 library_video: 100 { 101 mp4_src: mp4_src, 102 webm_src: webm_src, 103 ogv_src: ogv_src, 104 video_loader: video_loader, 105 video_loaded: false, 106 }, 107 youtube_video: 108 { 109 youtube_id: youtube_id, 110 }, 111 vimeo_video: 112 { 113 vimeo_id: vimeo_id, 114 } 115 }; 116 117 sliderData.push(slideData); 118 } 119 ) 120 121 // if necessary, load the youtube and vimeo API 122 if(youtubeApiLoad) 123 $.getScript( 'https://www.youtube.com/iframe_api', function( ) { 124 if(sliderData[0].slide_type == 'youtube_video') 125 window.onYouTubeIframeAPIReady = function() { 126 init(); 127 } 128 }); 129 if(vimeoApiLoad) 130 $.getScript( '//f.vimeocdn.com/js/froogaloop2.min.js', function( ) { 131 if(sliderData[0].slide_type == 'vimeo_video') init(
131); 132 }); 133 134 135 if(sliderData[0].slide_type != 'youtube_video' && sliderData[0].slide_type != 'vimeo_video') init(); 136 137 138 function init() 139 { 140 // holder erase 141 _this.html(''); 142 _this.addClass(options.animateLayout); 143 144 // preview holder build 145 _this.append("<div id='mainImageHolder'></div>"); 146 mainImageHolder = $('#mainImageHolder'); 147 148 // caption holder build 149 _this.append("<div id='mainCaptionHolder'><div class='container'></div></div>"); 150 mainCaptionHolder = $('#mainCaptionHolder'); 151 mainCaptionHolderContainer = $('>.container', mainCaptionHolder); 152 153 // controls build 154 _this.append("<div class='controlBtn parallaxPrevBtn'><div class='innerBtn icon-angle-left'></div><div class='slidesCounter'></div></div><div class='controlBtn parallaxNextBtn'><div class='innerBtn icon-angle-right'></div><div class='slidesCounter'></div></div>"); 155 parallaxPrevBtn = $('.parallaxPrevBtn', _this); 156 parallaxNextBtn = $('.parallaxNextBtn', _this); 157 158 // fullpreview pagination build 159 _this.append("<div id='paralaxSliderPagination'><ul></ul></div>"); 160 paralaxSliderPagination = $('#paralaxSliderPagination'); 161 162 slidesCounterList = $('.slidesCounter', _this); 163 164 // preview loader build 165 _this.append("<div id='previewSpinner'><span></span></div>"); 166 previewSpinner = $('#previewSpinner'); 167 168 _this.on("reBuild", 169 function(e,d){ 170 setBuilder(d); 171 } 172 ) 173 174 _this.on("switchNext", 175 function(e){ 176 nextSwither(); 177 } 178 ) 179 180 _this.on("switchPrev", 181 function(e){ 182 prevSwither(); 183 } 184 ) 185 186 if(options.liteMode) options.parallaxEffect = 'parallax_none'; 187 188 switch (options.parallaxEffect) { 189 case 'parallax_effect_low': 190 if(!options.parallaxInvert){ 191 parallaxType = 'parallax_normal'; 192 } else { 193 parallaxType = 'parallax_invert'; 194 } 195 196 bufferRatio = 3; 197 198 break 199 200 case 'parallax_effect_normal': 201 if(!options.parallaxInvert){ 202 parallaxType = 'parallax_normal'; 203 } else { 204 parallaxType = 'parallax_invert'; 205 } 206 207 bufferRatio = 2.25; 208 209 break 210 211 case 'parallax_effect_high': 212 if(!options.parallaxInvert){ 213 parallaxType = 'parallax_normal'; 214 } else { 215 parallaxType = 'parallax_invert'; 216 } 217 218 bufferRatio = 1.5; 219 220 break 221 222 case 'parallax_effect_fixed': 223 if(isIE()){ 224 parallax = false; 225 } else { 226 parallaxType = 'parallax_fixes'; 227 } 228 229 bufferRatio = 1; 230 231 break 232 233 default: 234 parallax = false; 235 parallaxType = 'parallax_none'; 236 237 break 238 } 239 240 _baseHeight = getBaseHeight(); 241 242 243 setBuilder(); 244 245 if(!options.slider_navs){ 246 parallaxPrevBtn.remove(); 247 parallaxNextBtn.remove(); 248 } 249 if(options.slider_pagination == 'none_pagination'){ 250 paralaxSliderPagination.remove(); 251 } 252 253 254 addEventsFunction(); 255 autoSwitcher(); 256 } 257 258 //------------------------- set Builder -----------------------------//
259 function setBuilder() 260 { 261 currIndex = 0; 262 itemLength = sliderData.length; 263 264 $(">ul", paralaxSliderPagination).empty(); 265 266 switch (options.slider_pagination) { 267 case 'buttons_pagination': 268 paralaxSliderPagination.addClass('buttons_pagination'); 269 for (var i = 0; i < itemLength; i++) { 270 $(">ul", paralaxSliderPagination).append("<li></li>"); 271 }; 272 273 break 274 275 case 'images_pagination': 276 paralaxSliderPagination.addClass('images_pagination'); 277 for (var i = 0; i < itemLength; i++) { 278 $(">ul", paralaxSliderPagination).append("<li><img src='"+sliderData[i].thumb+"'></li>"); 279 }; 280 281 break 282 } 283 284 if(itemLength==1){ 285 paralaxSliderPagination.remove(); 286 parallaxPrevBtn.remove(); 287 parallaxNextBtn.remove(); 288 } 289 290 imageSwitcher(0); 291 addEventsPagination(); 292 } 293 294 function autoSwitcher() 295 { 296 if(options.autoSwitcher){ 297 if(itemLength>1){ 298 intervalSwitcher = setInterval(function(){ 299 nextSwither(); 300 }, options.autoSwitcherDelay); 301 } 302 } 303 } 304 305 //--------------- addEvents ----------------------// 306 function addEventsPagination() 307 { 308 $(">ul >li", paralaxSliderPagination).on("click", 309 function() 310 { 311 if((!isPreviewLoading) && (!isPreviewAnimate) && ($(this).index() !== currIndex)){ 312 clearInterval(intervalSwitcher); 313 prevIndex = currIndex; 314 currIndex = $(this).index(); 315 imageSwitcher(currIndex); 316 } 317 } 318 ) 319 } 320 321 function addEventsFunction() 322 { 323 //--------------- controls events ----------------------// 324 options.prevButton.on("click", 325 function() 326 { 327 clearInterval(intervalSwitcher); 328 prevSwither(); 329 } 330 ) 331 options.nextButton.on("click", 332 function() 333 { 334 clearInterval(intervalSwitcher); 335 nextSwither(); 336 } 337 ) 338 parallaxPrevBtn.on("click", 339 function() 340 { 341 clearInterval(intervalSwitcher); 342 prevSwither(); 343 } 344 ) 345 parallaxNextBtn.on("click", 346 function() 347 { 348 clearInterval(intervalSwitcher); 349 nextSwither(); 350 } 351 ) 352 353 //--------------- keyboard events ----------------------// 354 _window.on("keydown", 355 function(eventObject) 356 { 357 switch (eventObject.keyCode){ 358 case 37: 359 clearInterval(intervalSwitcher); 360 prevSwither(); 361 break 362 case 39: 363 clearInterval(intervalSwitcher); 364 nextSwither(); 365 break 366 } 367 } 368 ) 369 370 //------------------ window scroll event -------------// 371 $(window).on('scroll', 372 function() 373 { 374 mainScrollFunction(); 375 } 376 ).trigger('scroll'); 377 378 //------------------ window resize event -------------// 379 $(window).on("resize", 380 function() 381 { 382 mainResizeFunction(); 383 } 384 ) 385 } 386 387 //----------------------------------------------------------------- 388 function prevSwither() 389 { 390 if(!isPreviewLoading && !isPreviewAnimate){ 391 prevIndex = currIndex; 392 if(currIndex > 0){ 393 currIndex--; 394 }else{ 395 currIndex = itemLength-1; 396 } 397 imageSwitcher(currIndex); 398 } 399 } 400 function nextSwither() 401 { 402 if(!isPreviewLoading && !isPreviewAnimate){ 403 prevIndex = currIndex; 404 if(currIndex < itemLength-1){ 405 currIndex++; 406 }else{ 407 currIndex = 0; 408 } 409 imageSwitcher(currIndex); 410 } 411 } 412 413 //------------------------- main Swither ----------------------------// 414 function imageSwitcher(currIndex) 415 { 416 // add next ImageHolder 417 if(primaryImageHolder){ 418 secondarImageHolder = primaryImageHolder; 419 secondarImageHolder.toggleClass('primaryHolder').toggleClass('secondaryHolder'); 420 } 421 422 mainImageHolder.append('<div class="primaryHolder"></div>'); 423 primaryImageHolder = $('> .primaryHolder', mainImageHolder); 424 objectCssTransition(primaryImageHolder, 0, 'ease'); 425 primaryImageHolder.addClass('animateState'); 426 427 428 // add next CaptionHolder 429 mainCaptionHolder.find('>a').remove(); 430 431 if(primaryCaption){ 432 secondaryCaption = primaryCaption; 433 secondaryCaption.toggleClass('primaryCaption').toggleClass('secondaryCaption'); 434 } 435
436 if(sliderData[currIndex].caption != ''){ 437 mainCaptionHolderContainer.append('<div class="primaryCaption"></div>'); 438 primaryCaption = $('> .primaryCaption', mainCaptionHolderContainer); 439 primaryCaption.html(sliderData[currIndex].caption); 440 if(sliderData[currIndex].link != '') mainCaptionHolder.append('<a href="'+sliderData[currIndex].link+'"></a>'); 441 objectCssTransition(primaryCaption, 0, 'ease'); 442 primaryCaption.addClass('animateState'); 443 } 444 445 slidesCounterList.text((currIndex+1) + '/'+itemLength); 446 $(">ul >li", paralaxSliderPagination).removeClass('active').eq(currIndex).addClass('active'); 447 448 isPreviewLoading = true; 449 isPreviewAnimate = true; 450 previewSpinner.css({display:'block'}).stop().fadeTo(300, 1); 451 452 if(progressBar) progressBar.remove(); 453 454 //------------------------- image slide type ----------------------------// 455 if(sliderData[currIndex].slide_type == 'image') 456 { 457 var img = new Image(); 458 img.src = sliderData[currIndex].image; 459 460 img.onload = function () 461 { 462 if(!options.liteMode){ 463 primaryImageHolder.html('<div class="parallax-slider-img obj-inner"></div>'); 464 obj_inner = $('.parallax-slider-img', primaryImageHolder); 465 obj_inner.css('background-image', 'url(' + img.src + ')'); 466 } else { 467 primaryImageHolder.html('<img class="parallax-slider-img obj-inner" src="'+img.src+'" alt=""/>'); 468 obj_inner = $('.parallax-slider-img', primaryImageHolder); 469 } 470 471 if(isIE()) obj_inner.css({backgroundAttachment:'fixed'}); 472 473 originalWidth = img.width; 474 originalHeight = img.height; 475 objectResize(obj_inner, primaryImageHolder.width(), _baseHeight); 476 477 onSlideLoaded(); 478 } 479 480 } 481 //------------------------- library video slide type ----------------------------// 482 if(sliderData[currIndex].slide_type == 'library_video') 483 { 484 if(sliderData[currIndex].library_video.player){ 485 486 var videoElement = sliderData[currIndex].library_video.player; 487 488 } else { 489 490 var videoElement = document.createElement('video'); 491 492 videoElement.className = 'parallax-slider-video obj-inner'; 493 videoElement.setAttribute('loop','loop'); 494 videoElement.setAttribute('poster', sliderData[currIndex].image); 495 496 function addSourceToVideo(element, src, type) 497 { 498 if(src) 499 { 500 var source = document.createElement('source'); 501 502 source.src = src; 503 source.type = type; 504 505 element.appendChild(source); 506 } 507 } 508 509 addSourceToVideo(videoElement, sliderData[currIndex].library_video.mp4_src, 'video/mp4'); 510 addSourceToVideo(videoElement, sliderData[currIndex].library_video.webm_src, 'video/webm'); 511 addSourceToVideo(videoElement, sliderData[currIndex].library_video.ogv_src, 'video/ogv'); 512 513 videoElement.load(); 514 515 sliderData[currIndex].library_video.player = videoElement; 516 } 517 518 primaryImageHolder.get(0).appendChild(videoElement); 519 obj_inner = $('.parallax-slider-video', primaryImageHolder); 520 521 videoElement.play(); 522 523 originalWidth = 0; 524 originalHeight = 0; 525 originalWidth = videoElement.videoWidth; 526 originalHeight = videoElement.videoHeight; 527 528 var img = new Image(); 529 img.src = sliderData[currIndex].image; 530 531 img.onload = function () 532 { 533 originalWidth = originalWidth==0 ? img.width : originalWidth; 534 originalHeight = originalHeight==0 ? img.height : originalHeight; 535 objectResize(obj_inner, primaryImageHolder.width(), _baseHeight); 536 537 onSlideLoaded(); 538 } 539 540 videoElement.onloadedmetadata = function() 541 { 542 originalWidth = videoElement.videoWidth; 543 originalHeight = videoElement.videoHeight; 544 objectResize(obj_inner, primaryImageHolder.width(), _baseHeight); 545 } 546 547 videoLoaded = sliderData[currIndex].library_video.video_loaded; 548 549 if(sliderData[currIndex].library_video.video_loader && !videoLoaded) 550 { 551 _this.append('<div class="parallax-slider-video-progress-bar"><div class="parallax-slider-video-progress"></div></div>'); 552 progressBar = $('.parallax-slider-video-progress-bar', _this); 553 progressLine = $('.parallax-slider-video-progress', progressBar); 554 555 var updateProgressBar = function() 556 { 557 if(videoElement.buffered.length > 0) { 558 if(videoElement.played.length > 0) progressBar.css({background:'#000'}); 559 if(videoElement.buffered.end(0) == videoElement.duration){ 560 clearTimeout(watchBuffer); 561 sliderData[currIndex].library_video.video_loaded = true; 562 progressLine.width('100%'); 563 progressBar.stop().delay(1000).animate({top:'-15px'}, 1000, function(){ 564 progressBar.remove(); 565 }); 566 }else{ 567 progressLine.width(((videoElement.buffered.end(0) / videoElement.duration) * 100) + '%'); 568 } 569 } 570 }; 571 var watchBuffer = setInterval(updateProgressBar, 500); 572 } 573 } 574 //------------------------- youtube video slide type ----------------------------// 575 if(sliderData[currIndex].slide_type == 'youtube_video') 576 { 577 var youtube_id = sliderData[currIndex].youtube_video.youtube_id; 578 579 primaryImageHolder.html('<div id="parallax-slider-youtube-video'+currIndex+'" class="parallax-slider-youtube-video obj-inner"></div>'); 580 581 function onPlayerReady(event) 582 { 583 event.target.playVideo(); 584 585 var intervalID; 586 intervalID = setInterval(function(){ 587 if(youtubePlayer.getPlayerState() == 1){ 588 clearInterval(intervalID); 589 onSlideLoaded(); 590 } 591 }, 100); 592 } 593 594 originalWidth = 16; 595 originalHeight = 9; 596 597 var youtubePlayer = new YT.Player('parallax-slider-youtube-video'+currIndex+'', { 598 height: '0px',
599 width: '0px', 600 playerVars : { 601 'autoplay' : 1, 602 'showinfo' : 0, 603 'controls' : 0, 604 'loop' : 1, 605 'disablekb' : 1, 606 'enablejsapi' : 1, 607 'html5' : isIE() ? 1 : 0, 608 'playlist': youtube_id 609 }, 610 videoId: youtube_id, 611 events: { 612 'onReady': onPlayerReady 613 } 614 }); 615 616 obj_inner = $('#parallax-slider-youtube-video'+currIndex+'', primaryImageHolder); 617 objectResize(obj_inner, primaryImageHolder.width(), _baseHeight); 618 619 sliderData[currIndex].youtube_video.player = youtubePlayer; 620 621 } 622 //------------------------- vimeo video slide type ----------------------------// 623 if(sliderData[currIndex].slide_type == 'vimeo_video') 624 { 625 var vimeo_id = sliderData[currIndex].vimeo_video.vimeo_id, 626 vimeo_iframe, 627 vimeo_player, 628 vimeo_player_playstarted = false; 629 630 primaryImageHolder.html('<div class="parallax-slider-vimeo-video obj-inner"><iframe id="vimeo-player-'+currIndex+'" class="parallax-slider-vimeo-iframe" src="http://player.vimeo.com/video/'+vimeo_id+'?api=1&player_id=vimeo-player-'+currIndex+';autoplay=1&loop=1" frameborder="0"></iframe></div>'); 631 632 vimeo_iframe = $('#vimeo-player-'+currIndex+'')[0]; 633 vimeo_player = $f(vimeo_iframe); 634 635 sliderData[currIndex].vimeo_video.player = vimeo_player; 636 637 vimeo_player.addEvent('ready', function() { 638 vimeo_player.addEvent('play', function(){ 639 if(!vimeo_player_playstarted) 640 { 641 vimeo_player_playstarted = true; 642 643 originalWidth = 16; 644 originalHeight = 9; 645 646 obj_inner = $('.obj-inner', primaryImageHolder); 647 objectResize(obj_inner, primaryImageHolder.width(), _baseHeight); 648 649 setTimeout(onSlideLoaded, 500); 650 } 651 }); 652 }) 653 } 654 655 function onSlideLoaded() 656 { 657 isPreviewLoading = false; 658 previewSpinner.stop().fadeTo(300, 0, function(){ $(this).css({display:'none'}); }); 659 660 objectCssTransition(primaryImageHolder, options.duration, 'outCubic'); 661 primaryImageHolder.removeClass('animateState'); 662 663 if(secondarImageHolder){ 664 if(sliderData[prevIndex].slide_type == 'youtube_video' || sliderData[prevIndex].slide_type == 'vimeo_video'){ 665 setTimeout(function(){ 666 if(sliderData[prevIndex].slide_type == 'youtube_video') sliderData[prevIndex].youtube_video.player.stopVideo(); 667 if(sliderData[prevIndex].slide_type == 'vimeo_video') sliderData[prevIndex].vimeo_video.player.api('unload'); 668 }, options.duration/1.25) 669 } 670 671 objectCssTransition(secondarImageHolder, options.duration, 'outCubic'); 672 secondarImageHolder.addClass('animateState'); 673 } 674 675 objectCssTransition(primaryCaption, options.duration, 'outCubic'); 676 primaryCaption.removeClass('animateState'); 677 678 if(secondaryCaption){ 679 objectCssTransition(secondaryCaption, options.duration, 'outCubic'); 680 secondaryCaption.addClass('animateState'); 681 } 682 683 mainCaptionHolderContainer.height(primaryCaption.height()); 684 685 setTimeout(function() 686 { 687 if(secondarImageHolder) secondarImageHolder.remove(); 688 if(secondaryCaption) secondaryCaption.remove(); 689 690 isPreviewAnimate = false;
691 692 }, options.duration ) 693 } 694 } 695 696 //----------------------------------------------------// 697 function objectCssTransition(obj, duration, ease){ 698 var durationValue; 699 700 if(duration !== 0){ 701 durationValue = duration/1000; 702 }else{ 703 durationValue = 0 704 } 705 706 switch(ease){ 707 case 'ease': 708 obj.css({"-webkit-transition":"all "+durationValue+"s ease", "-moz-transition":"all "+durationValue+"s ease", "-o-transition":"all "+durationValue+"s ease", "transition":"all "+durationValue+"s ease"}); 709 break; 710 case 'outSine': 711 obj.css({"-webkit-transition":"all "+durationValue+"s cubic-bezier(0.470, 0.000, 0.745, 0.715)", "-moz-transition":"all "+durationValue+"s cubic-bezier(0.470, 0.000, 0.745, 0.715)", "-o-transition":"all "+durationValue+"s cubic-bezier(0.470, 0.000, 0.745, 0.715)", "transition":"all "+durationValue+"s cubic-bezier(0.470, 0.000, 0.745, 0.715)"}); 712 break; 713 case 'outCubic': 714 obj.css({"-webkit-transition":"all "+durationValue+"s cubic-bezier(0.215, 0.610, 0.355, 1.000)", "-moz-transition":"all "+durationValue+"s cubic-bezier(0.215, 0.610, 0.355, 1.000)", "-o-transition":"all "+durationValue+"s cubic-bezier(0.215, 0.610, 0.355, 1.000)", "transition":"all "+durationValue+"s cubic-bezier(0.215, 0.610, 0.355, 1.000)"}); 715 break; 716 case 'outExpo': 717 obj.css({"-webkit-transition":"all "+durationValue+"s cubic-bezier(0.190, 1.000, 0.220, 1.000)", "-moz-transition":"all "+durationValue+"s cubic-bezier(0.190, 1.000, 0.220, 1.000)", "-o-transition":"all "+durationValue+"s cubic-bezier(0.190, 1.000, 0.220, 1.000)", "transition":"all "+durationValue+"s cubic-bezier(0.190, 1.000, 0.220, 1.000)"}); 718 break; 719 case 'outBack': 720 obj.css({"-webkit-transition":"all "+durationValue+"s cubic-bezier(0.175, 0.885, 0.320, 1.275)", "-moz-transition":"all "+durationValue+"s cubic-bezier(0.175, 0.885, 0.320, 1.275)", "-o-transition":"all "+durationValue+"s cubic-bezier(0.175, 0.885, 0.320, 1.275)", "transition":"all "+durationValue+"s cubic-bezier(0.175, 0.885, 0.320, 1.275)"}); 721 break; 722 } 723 } 724 725 //------------------------ Object resize ----------------------------// 726 function objectResize(obj, baseWidth, baseHeight) 727 { 728 var imageRatio, 729 newImgWidth, 730 newImgHeight, 731 newImgTop, 732 newImgLeft; 733 734 imageRatio = originalHeight/originalWidth; 735 containerRatio = baseHeight/baseWidth; 736 737 if(containerRatio > imageRatio){ 738 newImgHeight = baseHeight; 739 newImgWidth = Math.round( (newImgHeight*originalWidth) / originalHeight ); 740 }else{ 741 newImgWidth = baseWidth; 742 newImgHeight = Math.round( (newImgWidth*originalHeight) / originalWidth ); 743 } 744 745 newImgLeft=-(newImgWidth-baseWidth)*.5; 746 newImgTop= -(newImgHeight-baseHeight)*.5; 747 748 if(obj.prop('tagName').toLowerCase() == 'div'){ obj.css({width: '100%', height: newImgHeight, marginTop: newImgTop}); } else { obj.css({width: newImgWidth, height: newImgHeight, marginTop: newImgTop, marginLeft: newImgLeft}); } 749 750 if(sliderData[currIndex].slide_type == 'vimeo_video'){ 751 obj.find('.parallax-slider-vimeo-iframe').css({width: newImgWidth, height: newImgHeight+200, marginLeft: newImgLeft}); 752 } 753 } 754 755 //------------------- main window scroll function -------------------// 756 function mainScrollFunction(){ 757 if(parallax || options.scrolling_description && !options.liteMode){ 758 759 var _documentScrollTop 760 , startScrollTop 761 , endScrollTop 762 ; 763 764 _documentScrollTop = _document.scrollTop(); 765 _thisOffsetTop = _this.offset().top; 766 767 startScrollTop = _documentScrollTop + _windowHeight; 768 endScrollTop = _documentScrollTop - _thisHeight; 769 770 if((startScrollTop > _thisOffsetTop) && (endScrollTop < _thisOffsetTop)){ 771 772 y = _documentScrollTop - _thisOffsetTop; 773 774 if(parallax){ 775 if(!options.parallaxInvert) { 776 newPositionTop = parseInt(y / bufferRatio); 777 } else { 778 if(_thisOffsetTop < Math.abs(_windowHeight-_thisHeight)){ 779 newPositionTop = -parseInt(y / bufferRatio) - parseInt(_thisOffsetTop / bufferRatio); 780 } else{ 781 newPositionTop = -parseInt(y / bufferRatio) - parseInt(_windowHeight / bufferRatio) 782 } 783 } 784 785 mainImageHolder.css({ top: newPositionTop + 'px' }); 786 } 787 788 if(options.scrolling_description){ 789 description_opacity = (1-(y / _thisHeight)).toFixed(2); 790 if(description_opacity < 1) mainCaptionHolder.css('opacity', description_opacity); 791 792 description_offset = parseInt(y/2.5); 793 if(description_offset > 0) { 794 mainCaptionHolder.css('top', description_offset); 795 } else { 796 mainCaptionHolder.css('top', '0px'); 797 } 798 } 799 } 800 } 801 } 802 803 //------------------- main window resize function -------------------// 804 function mainResizeFunction(){ 805 _windowWidth = _window.width(); 806 _windowHeight = _window.height(); 807 _thisWidth = _this.width(); 808 _thisHeight = _this.height(); 809 _thisOffsetTop = _this.offset().top; 810 811 _baseHeight = getBaseHeight(); 812 objectResize(obj_inner, _thisWidth, _baseHeight); 813 mainScrollFunction(); 814 } 815 816 //------------------- get heigth function -------------------// 817 function getBaseHeight(){ 818 819 switch (parallaxType) { 820 case 'parallax_normal': 821 if(_thisOffsetTop < (_windowHeight-_thisHeight)){ 822 baseHeight = _thisHeight + parseInt(_thisOffsetTop/bufferRatio); 823 } else { 824 baseHeight = _thisHeight + parseInt((_windowHeight - _thisHeight)/bufferRatio); 825 } 826 break 827 828 case 'parallax_invert': 829 if(_thisOffsetTop < Math.abs(_windowHeight-_thisHeight)){ 830 baseHeight = _thisHeight + parseInt((_thisOffsetTop + _thisHeight)/bufferRatio); 831 } else { 832 baseHeight = _thisHeight + parseInt((_windowHeight + _thisHeight)/bufferRatio); 833 } 834 break 835 836 case 'parallax_fixes': 837 if((_thisOffsetTop + _thisHeight) < _windowHeight){ 838 baseHeight = _thisOffsetTop + _thisHeight; 839 } else { 840 baseHeight = _windowHeight; 841 } 842 break 843 844 case 'parallax_none': 845 baseHeight = _thisHeight; 846 break 847 } 848 849 return baseHeight; 850 } 851 852 function toRadians (angle) { 853 return angle * (Math.PI / 180); 854 } 855 856 function isIE() { 857 if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) { 858 return true; 859 }else{ 860 return false;
861 } 862 } 863 864 function loadScript(url, callback){ 865 $.ajax({ 866 url: url, 867 dataType: 'script', 868 success: callback, 869 async: true 870 }); 871 } 872 } 873})(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.