forked from edgarjs/jquery-perspectiva
-
Notifications
You must be signed in to change notification settings - Fork 0
/
perspectiva.min.js
1 lines (1 loc) · 2.79 KB
/
perspectiva.min.js
1
(function(){var b=function(c){this.init(c);return this};b.prototype={init:function(c){var d=this;this.update(c);this.element.load(function(){d.element.unbind("load");d.setCenter();$(this).trigger("ready.perspectiva")})},update:function(c){var d=$.extend(true,{xAxis:true,yAxis:true,xSpeed:0.2,scale:0,ySpeed:0.2,x:0,y:0,},c);$.extend(true,this,d);if(!this.element){this.element=$("<img />")}if(this.scale){this.element.height((this.scale*100)+"%")}else{this.element.css("height","")}this.element.css({position:"absolute",marginLeft:"",marginTop:""});this.setCenter();if(typeof this.src==="function"){this.src=this.src(this)}this.element.attr("src",this.src)},setCenter:function(){var d=0.5,f=0.5,e=1,c={};c.x=d+this.x*e;c.y=f-this.y*e;this.element.css({top:(c.y*this.viewport.height()-this.element.height()/2),left:(c.x*this.viewport.width()-this.element.width()/2)})},render:function(c){c.append(this.element);return this},move:function(d){var e={},c,f;d=this._translateScreenToCartesian(d);if(this.xAxis){c=-(d.x*this.xSpeed);e.marginLeft=this.viewport.width()*c}if(this.yAxis){f=d.y*this.ySpeed;e.marginTop=this.viewport.height()*f}this.element.css(e)},destroy:function(){this.element.remove();this.viewport=null},_translateScreenToCartesian:function(d){var c,h,e,g,f;f=1;e=g=0.5;c=(d.x-e)/f;h=-((d.y-g)/f);return{x:c,y:h}}};var a=function(d,c){this.init(d,c);return this};a.prototype={init:function(d,c){this.options=$.extend({},c);this.element=d;this.layers=[];this.layersReady=0;this.initLayers()},_onLayerReady:function(){var c=this;this.layersReady++;if(this.layersReady===this.layers.length){this.element.on("mousemove.perspectiva",function(d){var f=$(this).offset(),e={x:d.pageX-f.left,y:d.pageY-f.top};c.animate(e)});this.options.ready&&this.options.ready()}},center:function(){var c=this.width()/2,d=this.height()/2;return{x:c,y:d}},width:function(){return this.element.width()},height:function(){return this.element.height()},initLayers:function(){var c=this.options.layers.length,e,d,f=this;for(d=0;d<c;d++){this.options.layers[d].viewport=this;e=new b(this.options.layers[d]);e.element.bind("ready.perspectiva",function(){$(this).unbind("ready.perspectiva");f._onLayerReady()});this.layers.push(e);if(e.name){this[e.name]=e}e.render(this.element)}},animate:function(c){var f,e,d,g=this.layers.length;d={x:(c.x/this.width()),y:(c.y/this.height())};for(f=0;f<g;f++){e=this.layers[f];e.move(d)}return this},destroy:function(){var c=this.layers.length,d;this.element.unbind("mousemove.perspectiva");for(d=0;d<c;d++){this.layers[d].destroy()}}};$.fn.perspectiva=function(d,e,c){if(d==="settings"){return this[0].perspectiva[e]&&this[0].perspectiva[e]}return $(this).each(function(){if(d==="destroy"){this.perspectiva.destroy()}else{if(d==="update"){this.perspectiva[e]&&this.perspectiva[e].update(c)}else{this.perspectiva=new a($(this),d)}}})}})();