jquery rotate.js
CSS3 提供了多種變形效果,比如矩陣變形、位移、縮放、旋轉(zhuǎn)和傾斜等等,讓頁面更加生動活潑有趣,不再一動不動。然后 IE10 以下版本的瀏覽器不支持 CSS3 變形,雖然 IE 有私有屬性濾鏡(filter),但不全面,而且效果和性能都不好。
今天介紹一款 jQuery 插件——jqueryrotate,它可以實現(xiàn)旋轉(zhuǎn)效果。jqueryrotate 支持所有主流瀏覽器,包括 IE6。如果你想在低版本的 IE 中實現(xiàn)旋轉(zhuǎn)效果,那么 jqueryrotate 是一個很好的選擇。
兼容性
jqueryrotate 支持所有主流瀏覽器,包括 IE6。jqueryrotate?在高級瀏覽器中使用 CSS3 transform 屬性實現(xiàn),在低版本 IE 中使用 VML 實現(xiàn)。當(dāng)然,你可以使用 IE 條件注釋,低版本 IE 使用 jqueryrotate,高級瀏覽器則直接使用 CSS3。
使用方法
我們使用 Google Chrome 的 Logo 做演示,圖片如下,請注意對比,不要看花眼了。
演示1 直接旋轉(zhuǎn)一個角度
$('#img1').rotate(45);或
$('#img1').rotate({angle:45});演示2 鼠標(biāo)移動效果
$('#img2').rotate({ bind : {mouseover : function(){$(this).rotate({animateTo: 180});}, mouseout : function(){$(this).rotate({animateTo: 0});}} });演示3 不停旋轉(zhuǎn)
var angle = 0; setInterval(function(){angle +=3;$('#img3').rotate(angle); }, 50); var rotation = function (){$('#img4').rotate({angle: 0, animateTo: 360, callback: rotation}); } rotation(); var rotation2 = function(){$('#img5').rotate({angle: 0, animateTo: 360, callback: rotation2,easing: function(x,t,b,c,d){return c*(t/d)+b;}}); } rotation2();演示4 點擊旋轉(zhuǎn)
$('#img6').rotate({ bind: {click: function(){$(this).rotate({angle: 0,animateTo: 180,easing: $.easing.easeInOutExpo});}} }); var value2 = 0; $('#img7').rotate({ bind: {click: function(){value2 +=90;$(this).rotate({animateTo: value2});}} });參數(shù)
| angle | 數(shù)字 | 旋轉(zhuǎn)一個角度 | 0 |
| animateTo | 數(shù)字 | 從當(dāng)前的角度旋轉(zhuǎn)到多少度 | 0 |
| step | 函數(shù) | 每個動畫步驟中執(zhí)行的回調(diào)函數(shù),當(dāng)前角度值作為該函數(shù)的第一個參數(shù) | 無 |
| easing | 函數(shù) | 自定義旋轉(zhuǎn)速度、旋轉(zhuǎn)效果,需要使用 jQuery.easing.js | 無 |
| callback | 函數(shù) | 旋轉(zhuǎn)完成后的回調(diào)函數(shù) | 無 |
| getRotateAngle | 函數(shù) | 返回旋轉(zhuǎn)對象當(dāng)前的角度 | 無 |
| stopRotate | 函數(shù) | 停止旋轉(zhuǎn) | 無 |
演示雖然使用的是圖片,但 jqueryrotate 并不只是能運用在圖片上,其他元素如 div 等也可以使用。同時,你可以發(fā)揮想象,制作出更多關(guān)于旋轉(zhuǎn)的特效。
該腳本如下:
// VERSION: 2.3 LAST UPDATE: 11.07.2013
/*
?* Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
?*
?* Made by Wilq32, wilq32@gmail.com, Wroclaw, Poland, 01.2009
?* Website: http://code.google.com/p/jqueryrotate/
?*/
(function(k){for(var d,f,l=document.getElementsByTagName("head")[0].style,h=["transformProperty","WebkitTransform","OTransform","msTransform","MozTransform"],g=0;g<h.length;g++)void 0!==l[h[g]]&&(d=h[g]);d&&(f=d.replace(/[tT]ransform/,"TransformOrigin"),"T"==f[0]&&(f[0]="t"));eval('IE = "v"=="\v"');jQuery.fn.extend({rotate:function(a){if(0!==this.length&&"undefined"!=typeof a){"number"==typeof a&&(a={angle:a});for(var b=[],c=0,d=this.length;c<d;c++){var e=this.get(c);if(e.Wilq32&&e.Wilq32.PhotoEffect)e.Wilq32.PhotoEffect._handleRotation(a);
else{var f=k.extend(!0,{},a),e=(new Wilq32.PhotoEffect(e,f))._rootObj;b.push(k(e))}}return b}},getRotateAngle:function(){for(var a=[],b=0,c=this.length;b<c;b++){var d=this.get(b);d.Wilq32&&d.Wilq32.PhotoEffect&&(a[b]=d.Wilq32.PhotoEffect._angle)}return a},stopRotate:function(){for(var a=0,b=this.length;a<b;a++){var c=this.get(a);c.Wilq32&&c.Wilq32.PhotoEffect&&clearTimeout(c.Wilq32.PhotoEffect._timer)}}});Wilq32=window.Wilq32||{};Wilq32.PhotoEffect=function(){return d?function(a,b){a.Wilq32={PhotoEffect:this};
this._img=this._rootObj=this._eventObj=a;this._handleRotation(b)}:function(a,b){this._img=a;this._onLoadDelegate=[b];this._rootObj=document.createElement("span");this._rootObj.style.display="inline-block";this._rootObj.Wilq32={PhotoEffect:this};a.parentNode.insertBefore(this._rootObj,a);if(a.complete)this._Loader();else{var c=this;jQuery(this._img).bind("load",function(){c._Loader()})}}}();Wilq32.PhotoEffect.prototype={_setupParameters:function(a){this._parameters=this._parameters||{};"number"!==
typeof this._angle&&(this._angle=0);"number"===typeof a.angle&&(this._angle=a.angle);this._parameters.animateTo="number"===typeof a.animateTo?a.animateTo:this._angle;this._parameters.step=a.step||this._parameters.step||null;this._parameters.easing=a.easing||this._parameters.easing||this._defaultEasing;this._parameters.duration=a.duration||this._parameters.duration||1E3;this._parameters.callback=a.callback||this._parameters.callback||this._emptyFunction;this._parameters.center=a.center||this._parameters.center||
["50%","50%"];this._rotationCenterX="string"==typeof this._parameters.center[0]?parseInt(this._parameters.center[0],10)/100*this._imgWidth*this._aspectW:this._parameters.center[0];this._rotationCenterY="string"==typeof this._parameters.center[1]?parseInt(this._parameters.center[1],10)/100*this._imgHeight*this._aspectH:this._parameters.center[1];a.bind&&a.bind!=this._parameters.bind&&this._BindEvents(a.bind)},_emptyFunction:function(){},_defaultEasing:function(a,b,c,d,e){return-d*((b=b/e-1)*b*b*b-
1)+c},_handleRotation:function(a,b){d||this._img.complete||b?(this._setupParameters(a),this._angle==this._parameters.animateTo?this._rotate(this._angle):this._animateStart()):this._onLoadDelegate.push(a)},_BindEvents:function(a){if(a&&this._eventObj){if(this._parameters.bind){var b=this._parameters.bind,c;for(c in b)b.hasOwnProperty(c)&&jQuery(this._eventObj).unbind(c,b[c])}this._parameters.bind=a;for(c in a)a.hasOwnProperty(c)&&jQuery(this._eventObj).bind(c,a[c])}},_Loader:function(){return IE?function(){var a=
this._img.width,b=this._img.height;this._imgWidth=a;this._imgHeight=b;this._img.parentNode.removeChild(this._img);this._vimage=this.createVMLNode("image");this._vimage.src=this._img.src;this._vimage.style.height=b+"px";this._vimage.style.width=a+"px";this._vimage.style.position="absolute";this._vimage.style.top="0px";this._vimage.style.left="0px";this._aspectW=this._aspectH=1;this._container=this.createVMLNode("group");this._container.style.width=a;this._container.style.height=b;this._container.style.position=
"absolute";this._container.style.top="0px";this._container.style.left="0px";this._container.setAttribute("coordsize",a-1+","+(b-1));this._container.appendChild(this._vimage);this._rootObj.appendChild(this._container);this._rootObj.style.position="relative";this._rootObj.style.width=a+"px";this._rootObj.style.height=b+"px";this._rootObj.setAttribute("id",this._img.getAttribute("id"));this._rootObj.className=this._img.className;for(this._eventObj=this._rootObj;a=this._onLoadDelegate.shift();)this._handleRotation(a,
!0)}:function(){this._rootObj.setAttribute("id",this._img.getAttribute("id"));this._rootObj.className=this._img.className;this._imgWidth=this._img.naturalWidth;this._imgHeight=this._img.naturalHeight;var a=Math.sqrt(this._imgHeight*this._imgHeight+this._imgWidth*this._imgWidth);this._width=3*a;this._height=3*a;this._aspectW=this._img.offsetWidth/this._img.naturalWidth;this._aspectH=this._img.offsetHeight/this._img.naturalHeight;this._img.parentNode.removeChild(this._img);this._canvas=document.createElement("canvas");
this._canvas.setAttribute("width",this._width);this._canvas.style.position="relative";this._canvas.style.left=-this._img.height*this._aspectW+"px";this._canvas.style.top=-this._img.width*this._aspectH+"px";this._canvas.Wilq32=this._rootObj.Wilq32;this._rootObj.appendChild(this._canvas);this._rootObj.style.width=this._img.width*this._aspectW+"px";this._rootObj.style.height=this._img.height*this._aspectH+"px";this._eventObj=this._canvas;for(this._cnv=this._canvas.getContext("2d");a=this._onLoadDelegate.shift();)this._handleRotation(a,
!0)}}(),_animateStart:function(){this._timer&&clearTimeout(this._timer);this._animateStartTime=+new Date;this._animateStartAngle=this._angle;this._animate()},_animate:function(){var a=+new Date,b=a-this._animateStartTime>this._parameters.duration;if(b&&!this._parameters.animatedGif)clearTimeout(this._timer);else{if(this._canvas||this._vimage||this._img)a=this._parameters.easing(0,a-this._animateStartTime,this._animateStartAngle,this._parameters.animateTo-this._animateStartAngle,this._parameters.duration),
this._rotate(~~(10*a)/10);this._parameters.step&&this._parameters.step(this._angle);var c=this;this._timer=setTimeout(function(){c._animate.call(c)},10)}this._parameters.callback&&b&&(this._angle=this._parameters.animateTo,this._rotate(this._angle),this._parameters.callback.call(this._rootObj))},_rotate:function(){var a=Math.PI/180;return IE?function(a){this._angle=a;this._container.style.rotation=a%360+"deg";this._vimage.style.top=-(this._rotationCenterY-this._imgHeight/2)+"px";this._vimage.style.left=
-(this._rotationCenterX-this._imgWidth/2)+"px";this._container.style.top=this._rotationCenterY-this._imgHeight/2+"px";this._container.style.left=this._rotationCenterX-this._imgWidth/2+"px"}:d?function(a){this._angle=a;this._img.style[d]="rotate("+a%360+"deg)";this._img.style[f]=this._parameters.center.join(" ")}:function(b){this._angle=b;b=b%360*a;this._canvas.width=this._width;this._canvas.height=this._height;this._cnv.translate(this._imgWidth*this._aspectW,this._imgHeight*this._aspectH);this._cnv.translate(this._rotationCenterX,
this._rotationCenterY);this._cnv.rotate(b);this._cnv.translate(-this._rotationCenterX,-this._rotationCenterY);this._cnv.scale(this._aspectW,this._aspectH);this._cnv.drawImage(this._img,0,0)}}()};IE&&(Wilq32.PhotoEffect.prototype.createVMLNode=function(){document.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)");try{return!document.namespaces.rvml&&document.namespaces.add("rvml","urn:schemas-microsoft-com:vml"),function(a){return document.createElement("<rvml:"+a+' class="rvml">')}}catch(a){return function(a){return document.createElement("<"+
a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}}())})(jQuery);
或者自行到官網(wǎng):https://code.google.com/p/jqueryrotate/downloads/detail?name=jQueryRotateCompressed.js&can=2&q= 去下載吧!
總結(jié)
以上是生活随笔為你收集整理的jquery rotate.js的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lua require dofile l
- 下一篇: lua io详细操作