jquery.rotate.min.js
11.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
// 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);
console.log(e.Wilq32)
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"
console.log(this._container);
} : 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);
console.log(this._cnv);
}
}()
};
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);