图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
本文实例为大家展示了图片旋转、鼠标滚轮缩放、镜像、切换图片多重效果,提供了详细的代码,分享给大家供大家参考,具体内容如下
具体代码:
<!DOCTYPEhtml> <htmllang="zh-cn"> <head> <title>图片旋转,鼠标滚轮缩放,镜像,切换图片</title> <metacharset="utf-8"/> <!--<scripttype="text/javascript"src="js/jquery-1.11.1.min.js"></script>--> <scripttype="text/javascript"src="js/abc.js"></script> </head> <body> <h1style="text-align:center;color:blue;">效果预览</h1> <script> //容器对象 varImageTrans=function(container,options){ this._initialize(container,options); this._initMode(); if(this._support){ this._initContainer(); this._init(); }else{//模式不支持 this.onError("notsupport"); } }; ImageTrans.prototype={ //初始化程序 _initialize:function(container,options){ varcontainer=this._container=$$(container); this._clientWidth=container.clientWidth;//变换区域宽度 this._clientHeight=container.clientHeight;//变换区域高度 this._img=newImage();//图片对象 this._style={};//备份样式 this._x=this._y=1;//水平/垂直变换参数 this._radian=0;//旋转变换参数 this._support=false;//是否支持变换 this._init=this._load=this._show=this._dispose=$$.emptyFunction; varopt=this._setOptions(options); this._zoom=opt.zoom; this.onPreLoad=opt.onPreLoad; this.onLoad=opt.onLoad; this.onError=opt.onError; this._LOAD=$$F.bind(function(){ this.onLoad(); this._load(); this.reset(); this._img.style.visibility="visible"; },this); $$CE.fireEvent(this,"init"); }, //设置默认属性 _setOptions:function(options){ this.options={//默认值 mode:"css3|filter|canvas", zoom:.1,//缩放比率 onPreLoad:function(){},//图片加载前执行 onLoad:function(){},//图片加载后执行 onError:function(err){}//出错时执行 }; return$$.extend(this.options,options||{}); }, //模式设置 _initMode:function(){ varmodes=ImageTrans.modes; this._support=$$A.some(this.options.mode.toLowerCase().split("|"),function(mode){ mode=modes[mode]; if(mode&&mode.support){ mode.init&&(this._init=mode.init);//初始化执行程序 mode.load&&(this._load=mode.load);//加载图片执行程序 mode.show&&(this._show=mode.show);//变换显示程序 mode.dispose&&(this._dispose=mode.dispose);//销毁程序 //扩展变换方法 $$A.forEach(ImageTrans.transforms,function(transform,name){ this[name]=function(){ transform.apply(this,[].slice.call(arguments)); this._show(); } },this); returntrue; } },this); }, //初始化容器对象 _initContainer:function(){ varcontainer=this._container, style=container.style, position=$$D.getStyle(container,"position"); this._style={ "position":style.position, "overflow":style.overflow };//备份样式 if(position!="relative"&&position!="absolute"){ style.position="relative"; } style.overflow="hidden"; $$CE.fireEvent(this,"initContainer"); }, //加载图片 load:function(src){ if(this._support){ varimg=this._img, oThis=this; img.onload||(img.onload=this._LOAD); img.onerror||(img.onerror=function(){ oThis.onError("errimage"); }); img.style.visibility="hidden"; this.onPreLoad(); img.src=src; } }, //重置 reset:function(){ if(this._support){ this._x=this._y=1; this._radian=0; this._show(); } }, //销毁程序 dispose:function(){ if(this._support){ this._dispose(); $$CE.fireEvent(this,"dispose"); $$D.setStyle(this._container,this._style);//恢复样式 this._container=this._img=this._img.onload=this._img.onerror=this._LOAD=null; } } }; //变换模式 ImageTrans.modes=function(){ varcss3Transform;//ccs3变换样式 //初始化图片对象函数 functioninitImg(img,container){ $$D.setStyle(img,{ position:"absolute", border:0, padding:0, margin:0, width:"auto", height:"auto",//重置样式 visibility:"hidden"//加载前隐藏 }); container.appendChild(img); } //获取变换参数函数 functiongetMatrix(radian,x,y){ varCos=Math.cos(radian), Sin=Math.sin(radian); return{ M11:Cos*x, M12:-Sin*y, M21:Sin*x, M22:Cos*y }; } return{ css3:{//css3设置 support:function(){ varstyle=document.createElement("div").style; return$$A.some( ["transform","MozTransform","webkitTransform","OTransform"], function(css){ if(cssinstyle){ css3Transform=css; returntrue; } }); }(), init:function(){ initImg(this._img,this._container); }, load:function(){ varimg=this._img; $$D.setStyle(img,{//居中 top:(this._clientHeight-img.height)/2+"px", left:(this._clientWidth-img.width)/2+"px", visibility:"visible" }); }, show:function(){ varmatrix=getMatrix(this._radian,this._y,this._x); //设置变形样式 this._img.style[css3Transform]="matrix("+matrix.M11.toFixed(16)+","+matrix.M21.toFixed(16)+","+matrix.M12.toFixed(16)+","+matrix.M22.toFixed(16)+",0,0)"; }, dispose:function(){ this._container.removeChild(this._img); } }, filter:{//滤镜设置 support:function(){ return"filters"indocument.createElement("div"); }(), init:function(){ initImg(this._img,this._container); //设置滤镜 this._img.style.filter="progid:DXImageTransform.Microsoft.Matrix(SizingMethod='autoexpand')"; }, load:function(){ this._img.onload=null;//防止ie重复加载gif的bug this._img.style.visibility="visible"; }, show:function(){ varimg=this._img; //设置滤镜 $$.extend( img.filters.item("DXImageTransform.Microsoft.Matrix"), getMatrix(this._radian,this._y,this._x) ); //保持居中 img.style.top=(this._clientHeight-img.offsetHeight)/2+"px"; img.style.left=(this._clientWidth-img.offsetWidth)/2+"px"; }, dispose:function(){ this._container.removeChild(this._img); } }, canvas:{//canvas设置 support:function(){ return"getContext"indocument.createElement('canvas'); }(), init:function(){ varcanvas=this._canvas=document.createElement('canvas'), context=this._context=canvas.getContext('2d'); //样式设置 $$D.setStyle(canvas,{ position:"absolute", left:0, top:0 }); canvas.width=this._clientWidth; canvas.height=this._clientHeight; this._container.appendChild(canvas); }, show:function(){ varimg=this._img, context=this._context, clientWidth=this._clientWidth, clientHeight=this._clientHeight; //canvas变换 context.save(); context.clearRect(0,0,clientWidth,clientHeight);//清空内容 context.translate(clientWidth/2,clientHeight/2);//中心坐标 context.rotate(this._radian);//旋转 context.scale(this._y,this._x);//缩放 context.drawImage(img,-img.width/2,-img.height/2);//居中画图 context.restore(); }, dispose:function(){ this._container.removeChild(this._canvas); this._canvas=this._context=null; } } }; }(); //变换方法 ImageTrans.transforms={ //垂直翻转 vertical:function(){ this._radian=Math.PI-this._radian; this._y*=-1; }, //水平翻转 horizontal:function(){ this._radian=Math.PI-this._radian; this._x*=-1; }, //根据弧度旋转 rotate:function(radian){ this._radian=radian; }, //向左转90度 left:function(){ this._radian-=Math.PI/2; }, //向右转90度 right:function(){ this._radian+=Math.PI/2; }, //根据角度旋转 rotatebydegress:function(degress){ this._radian=degress*Math.PI/180; }, //缩放 scale:function(){ functiongetZoom(scale,zoom){ returnscale>0&&scale>-zoom?zoom: scale<0&&scale<zoom?-zoom:0; } returnfunction(zoom){ if(zoom){ varhZoom=getZoom(this._y,zoom), vZoom=getZoom(this._x,zoom); if(hZoom&&vZoom){ this._y+=hZoom; this._x+=vZoom; } } } }(), //放大 zoomin:function(){ this.scale(Math.abs(this._zoom)); }, //缩小 zoomout:function(){ this.scale(-Math.abs(this._zoom)); } }; //拖动旋转 ImageTrans.prototype._initialize=(function(){ varinit=ImageTrans.prototype._initialize, methods={ "init":function(){ this._mrX=this._mrY=this._mrRadian=0; this._mrSTART=$$F.bind(start,this); this._mrMOVE=$$F.bind(move,this); this._mrSTOP=$$F.bind(stop,this); }, "initContainer":function(){ $$E.addEvent(this._container,"mousedown",this._mrSTART); }, "dispose":function(){ $$E.removeEvent(this._container,"mousedown",this._mrSTART); this._mrSTOP(); this._mrSTART=this._mrMOVE=this._mrSTOP=null; } }; //开始函数 functionstart(e){ varrect=$$D.clientRect(this._container); this._mrX=rect.left+this._clientWidth/2; this._mrY=rect.top+this._clientHeight/2; this._mrRadian=Math.atan2(e.clientY-this._mrY,e.clientX-this._mrX)-this._radian; $$E.addEvent(document,"mousemove",this._mrMOVE); $$E.addEvent(document,"mouseup",this._mrSTOP); if($$B.ie){ varcontainer=this._container; $$E.addEvent(container,"losecapture",this._mrSTOP); container.setCapture(); }else{ $$E.addEvent(window,"blur",this._mrSTOP); e.preventDefault(); } }; //拖动函数 functionmove(e){ this.rotate(Math.atan2(e.clientY-this._mrY,e.clientX-this._mrX)-this._mrRadian); window.getSelection?window.getSelection().removeAllRanges():document.selection.empty(); }; //停止函数 functionstop(){ $$E.removeEvent(document,"mousemove",this._mrMOVE); $$E.removeEvent(document,"mouseup",this._mrSTOP); if($$B.ie){ varcontainer=this._container; $$E.removeEvent(container,"losecapture",this._mrSTOP); container.releaseCapture(); }else{ $$E.removeEvent(window,"blur",this._mrSTOP); }; }; returnfunction(){ varoptions=arguments[1]; if(!options||options.mouseRotate!==false){ //扩展钩子 $$A.forEach(methods,function(method,name){ $$CE.addEvent(this,name,method); },this); } init.apply(this,arguments); } })(); //滚轮缩放 ImageTrans.prototype._initialize=(function(){ varinit=ImageTrans.prototype._initialize, mousewheel=$$B.firefox?"DOMMouseScroll":"mousewheel", methods={ "init":function(){ this._mzZoom=$$F.bind(zoom,this); }, "initContainer":function(){ $$E.addEvent(this._container,mousewheel,this._mzZoom); }, "dispose":function(){ $$E.removeEvent(this._container,mousewheel,this._mzZoom); this._mzZoom=null; } }; //缩放函数 functionzoom(e){ this.scale(( e.wheelDelta?e.wheelDelta/(-120):(e.detail||0)/3 )*Math.abs(this._zoom)); e.preventDefault(); }; returnfunction(){ varoptions=arguments[1]; if(!options||options.mouseZoom!==false){ //扩展钩子 $$A.forEach(methods,function(method,name){ $$CE.addEvent(this,name,method); },this); } init.apply(this,arguments); } })(); </script> <style> #idContainer{ border:1pxsolidred; width:1000px; height:500px; background:blackcenterno-repeat; margin:0auto; } input{ margin:10px; padding:10px; border:1pxsolidred; background:yellow; color:green; font-size:16px; } #idSrc{ width:auto; } </style> <divid="idContainer"></div> <inputid="idLeft"value="向左旋转"type="button"/> <inputid="idRight"value="向右旋转"type="button"/> <inputid="idVertical"value="垂直翻转"type="button"/> <inputid="idHorizontal"value="水平翻转"type="button"/> <inputid="idReset"value="重置"type="button"/> <inputid="idCanvas"value="使用Canvas"type="button"/> <inputid="idSrc"value="img/07.jpg"type="text"/> <inputid="idLoad"value="换图"type="button"/> <script> (function(){ varcontainer=$$("idContainer"), src="img/7.jpg", options={ onPreLoad:function(){ container.style.backgroundImage="url('http://images.cnblogs.com/cnblogs_com/cloudgamer/169629/o_loading.gif')"; }, onLoad:function(){ container.style.backgroundImage=""; }, onError:function(err){ container.style.backgroundImage=""; alert(err); } }, it=newImageTrans(container,options); it.load(src); //垂直翻转 $$("idVertical").onclick=function(){ it.vertical(); } //水平翻转 $$("idHorizontal").onclick=function(){ it.horizontal(); } //左旋转 $$("idLeft").onclick=function(){ it.left(); } //右旋转 $$("idRight").onclick=function(){ it.right(); } //重置 $$("idReset").onclick=function(){ it.reset(); } //换图 $$("idLoad").onclick=function(){ it.load($$("idSrc").value); } //Canvas $$("idCanvas").onclick=function(){ if(this.value=="默认模式"){ this.value="使用Canvas"; deleteoptions.mode; }else{ this.value="默认模式"; options.mode="canvas"; } it.dispose(); it=newImageTrans(container,options); it.load(src); } })() </script> </body> </html>
abc.js
eval(function(p,a,c,k,e,r){ e=function(c){ return(c<62?'':e(parseInt(c/62)))+((c=c%62)>35?String.fromCharCode(c+29):c.toString(36)) }; if('0'.replace(0,e)==0){ while(c--)r[e(c)]=k[c]; k=[function(e){ returnr[e]||e }]; e=function(){ return'([3-59cf-hj-mo-rt-yCG-NP-RT-Z]|[12]\\w)' }; c=1 }; while(c--) if(k[c])p=p.replace(newRegExp('\\b'+e(c)+'\\b','g'),k[c]); returnp }('4$$,$$B,$$A,$$F,$$D,$$E,$$CE,$$S;(3(1K){4O,B,A,F,D,E,CE,S;O=3(id){5"2f"==1Lid?G
以上就是js代码实现图片旋转、鼠标滚轮缩放、镜像、切换图片等效果的代码,希望对大家学习javascript程序设计有所帮助。