1/* 2 * parallax.jquery.js v1.0.0 3 * http://themeforest.net/user/lionstyle 4 * 5 * Copyright 2016, LionStyle 6 * http://themeforest.net/user/lionstyle 7 */ 8 9(function($) { 10 11 $.fn.parallax = function(options) { 12 13 if(navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/webOS/i) || navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/iPod/i)) return; 14 15 var settings = { 16 shine : true, 17 shadow : true 18 }; 19 20 if(options) { 21 $.extend(settings, options); 22 } 23 24 return this.each(function() { 25 26 27 var $poster = $(this), 28 $settings = settings, 29 $shine, 30 $layer = $poster.find('[class*="layer-"]'), 31 w, 32 h, 33 $posterLeft, 34 $posterTop, 35 isWebkit = 'WebkitAppearance' in document.documentElement.style; 36 37 if($settings.shine) { 38 $poster.append('<span class="shine" style="position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(90deg, rgba(255,255,255,.5) 0%,rgba(255,255,255,0) 60%);"></span>'); 39 $shine = $poster.find('.shine'); 40 } 41 if($settings.shadow) $poster.addClass('shadow'); 42 if(!isWebkit) $poster.addClass('animation-disabled'); 43 //$poster.parent().css({'transform-style' : 'preserve-3d', 'transform' : 'perspective(800px)'}); 44 45 function init(){ 46 w = $poster.outerWidth(); 47 h = $poster.outerHeight(); 48 $posterLeft = $poster.offset().left; 49 $posterTop = $poster.offset().top; 50 } 51 52 init(); 53 54 window.addEventListener("resize", function() { 55 init(); 56 }, false); 57 58 59 $poster.on('mousemove', function(e) { 60 var offsetX = 0.5 - (e.pageX - $posterLeft) / w, //cursor position X 61 offsetY = 0.5 - (e.pageY - $posterTop) / h, //cursor position Y 62 dy = (e.pageY - $posterTop) - h / 2, //@h/2 = center of poster 63 dx = (e.pageX - $posterLeft) - w / 2, //@w/2 = center of poster 64 theta = Math.atan2(dy, dx), //angle between cursor and center of poster in RAD 65 angle = theta * 180 / Math.PI - 90, //convert rad in degrees 66 offsetPoster = $poster.data('offset'), 67 transformPoster = 'perspective(800px) translateY(' + -offsetX * offsetPoster + 'px) rotateX(' + (-offsetY * offsetPoster) + 'deg) rotateY(' + (offsetX * (offsetPoster * 2)) + 'deg)'; //poster transform 68 69 70 //get angle between 0-360 71 if (angle < 0) { 72 angle = angle + 360; 73 } 74 75 //gradient angle and opacity 76 if($settings.shine) $shine.css('background', 'linear-gradient(' + angle + 'deg, rgba(255,255,255,' + (e.pageY - $posterTop) / h*0.5 + ') 0%,rgba(255,255,255,0) 80%)'); 77 78 //poster transform 79 $poster.css({'transform': transformPoster, '-webkit-transform': transformPoster}); 80 81 //parallax foreach layer 82 $layer.each(function() { 83 var $this = $(this), 84 offsetLayer = $this.data('offset') || 0, 85 transformLayer = 'translateX(' + offsetX * offsetLayer + 'px) translateY(' + offsetY * offsetLayer + 'px)'; 86 $this.css({'transform': transformLayer, '-webkit-transform': transformLayer}); 87 }); 88 }); 89 90 $poster.on('mouseenter', function(e) { 91 init(); 92 }); 93 94 $poster.on('mouseleave', function(e) { 95 transformPoster = 'translateY(0px) rotateX(0deg) rotateY(0deg)'; 96 $poster.css({'transform': transformPoster, '-webkit-transform': transformPoster}); 97 transformLayer = 'translateX(0px) translateY(0px)'; 98 $layer.css({'transform': transformLayer, '-webkit-transform': transformLayer}); 99 }); 100 101 }); 102 103 }; 104 105})(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.