1 | /*
|
---|
2 | * jQuery UI Effects Scale 1.8.15
|
---|
3 | *
|
---|
4 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
---|
5 | * Dual licensed under the MIT or GPL Version 2 licenses.
|
---|
6 | * http://jquery.org/license
|
---|
7 | *
|
---|
8 | * http://docs.jquery.com/UI/Effects/Scale
|
---|
9 | *
|
---|
10 | * Depends:
|
---|
11 | * jquery.effects.core.js
|
---|
12 | */
|
---|
13 | (function( $, undefined ) {
|
---|
14 |
|
---|
15 | $.effects.puff = function(o) {
|
---|
16 | return this.queue(function() {
|
---|
17 | var elem = $(this),
|
---|
18 | mode = $.effects.setMode(elem, o.options.mode || 'hide'),
|
---|
19 | percent = parseInt(o.options.percent, 10) || 150,
|
---|
20 | factor = percent / 100,
|
---|
21 | original = { height: elem.height(), width: elem.width() };
|
---|
22 |
|
---|
23 | $.extend(o.options, {
|
---|
24 | fade: true,
|
---|
25 | mode: mode,
|
---|
26 | percent: mode == 'hide' ? percent : 100,
|
---|
27 | from: mode == 'hide'
|
---|
28 | ? original
|
---|
29 | : {
|
---|
30 | height: original.height * factor,
|
---|
31 | width: original.width * factor
|
---|
32 | }
|
---|
33 | });
|
---|
34 |
|
---|
35 | elem.effect('scale', o.options, o.duration, o.callback);
|
---|
36 | elem.dequeue();
|
---|
37 | });
|
---|
38 | };
|
---|
39 |
|
---|
40 | $.effects.scale = function(o) {
|
---|
41 |
|
---|
42 | return this.queue(function() {
|
---|
43 |
|
---|
44 | // Create element
|
---|
45 | var el = $(this);
|
---|
46 |
|
---|
47 | // Set options
|
---|
48 | var options = $.extend(true, {}, o.options);
|
---|
49 | var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
|
---|
50 | var percent = parseInt(o.options.percent,10) || (parseInt(o.options.percent,10) == 0 ? 0 : (mode == 'hide' ? 0 : 100)); // Set default scaling percent
|
---|
51 | var direction = o.options.direction || 'both'; // Set default axis
|
---|
52 | var origin = o.options.origin; // The origin of the scaling
|
---|
53 | if (mode != 'effect') { // Set default origin and restore for show/hide
|
---|
54 | options.origin = origin || ['middle','center'];
|
---|
55 | options.restore = true;
|
---|
56 | }
|
---|
57 | var original = {height: el.height(), width: el.width()}; // Save original
|
---|
58 | el.from = o.options.from || (mode == 'show' ? {height: 0, width: 0} : original); // Default from state
|
---|
59 |
|
---|
60 | // Adjust
|
---|
61 | var factor = { // Set scaling factor
|
---|
62 | y: direction != 'horizontal' ? (percent / 100) : 1,
|
---|
63 | x: direction != 'vertical' ? (percent / 100) : 1
|
---|
64 | };
|
---|
65 | el.to = {height: original.height * factor.y, width: original.width * factor.x}; // Set to state
|
---|
66 |
|
---|
67 | if (o.options.fade) { // Fade option to support puff
|
---|
68 | if (mode == 'show') {el.from.opacity = 0; el.to.opacity = 1;};
|
---|
69 | if (mode == 'hide') {el.from.opacity = 1; el.to.opacity = 0;};
|
---|
70 | };
|
---|
71 |
|
---|
72 | // Animation
|
---|
73 | options.from = el.from; options.to = el.to; options.mode = mode;
|
---|
74 |
|
---|
75 | // Animate
|
---|
76 | el.effect('size', options, o.duration, o.callback);
|
---|
77 | el.dequeue();
|
---|
78 | });
|
---|
79 |
|
---|
80 | };
|
---|
81 |
|
---|
82 | $.effects.size = function(o) {
|
---|
83 |
|
---|
84 | return this.queue(function() {
|
---|
85 |
|
---|
86 | // Create element
|
---|
87 | var el = $(this), props = ['position','top','bottom','left','right','width','height','overflow','opacity'];
|
---|
88 | var props1 = ['position','top','bottom','left','right','overflow','opacity']; // Always restore
|
---|
89 | var props2 = ['width','height','overflow']; // Copy for children
|
---|
90 | var cProps = ['fontSize'];
|
---|
91 | var vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom'];
|
---|
92 | var hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight'];
|
---|
93 |
|
---|
94 | // Set options
|
---|
95 | var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
|
---|
96 | var restore = o.options.restore || false; // Default restore
|
---|
97 | var scale = o.options.scale || 'both'; // Default scale mode
|
---|
98 | var origin = o.options.origin; // The origin of the sizing
|
---|
99 | var original = {height: el.height(), width: el.width()}; // Save original
|
---|
100 | el.from = o.options.from || original; // Default from state
|
---|
101 | el.to = o.options.to || original; // Default to state
|
---|
102 | // Adjust
|
---|
103 | if (origin) { // Calculate baseline shifts
|
---|
104 | var baseline = $.effects.getBaseline(origin, original);
|
---|
105 | el.from.top = (original.height - el.from.height) * baseline.y;
|
---|
106 | el.from.left = (original.width - el.from.width) * baseline.x;
|
---|
107 | el.to.top = (original.height - el.to.height) * baseline.y;
|
---|
108 | el.to.left = (original.width - el.to.width) * baseline.x;
|
---|
109 | };
|
---|
110 | var factor = { // Set scaling factor
|
---|
111 | from: {y: el.from.height / original.height, x: el.from.width / original.width},
|
---|
112 | to: {y: el.to.height / original.height, x: el.to.width / original.width}
|
---|
113 | };
|
---|
114 | if (scale == 'box' || scale == 'both') { // Scale the css box
|
---|
115 | if (factor.from.y != factor.to.y) { // Vertical props scaling
|
---|
116 | props = props.concat(vProps);
|
---|
117 | el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from);
|
---|
118 | el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to);
|
---|
119 | };
|
---|
120 | if (factor.from.x != factor.to.x) { // Horizontal props scaling
|
---|
121 | props = props.concat(hProps);
|
---|
122 | el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from);
|
---|
123 | el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to);
|
---|
124 | };
|
---|
125 | };
|
---|
126 | if (scale == 'content' || scale == 'both') { // Scale the content
|
---|
127 | if (factor.from.y != factor.to.y) { // Vertical props scaling
|
---|
128 | props = props.concat(cProps);
|
---|
129 | el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from);
|
---|
130 | el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to);
|
---|
131 | };
|
---|
132 | };
|
---|
133 | $.effects.save(el, restore ? props : props1); el.show(); // Save & Show
|
---|
134 | $.effects.createWrapper(el); // Create Wrapper
|
---|
135 | el.css('overflow','hidden').css(el.from); // Shift
|
---|
136 |
|
---|
137 | // Animate
|
---|
138 | if (scale == 'content' || scale == 'both') { // Scale the children
|
---|
139 | vProps = vProps.concat(['marginTop','marginBottom']).concat(cProps); // Add margins/font-size
|
---|
140 | hProps = hProps.concat(['marginLeft','marginRight']); // Add margins
|
---|
141 | props2 = props.concat(vProps).concat(hProps); // Concat
|
---|
142 | el.find("*[width]").each(function(){
|
---|
143 | child = $(this);
|
---|
144 | if (restore) $.effects.save(child, props2);
|
---|
145 | var c_original = {height: child.height(), width: child.width()}; // Save original
|
---|
146 | child.from = {height: c_original.height * factor.from.y, width: c_original.width * factor.from.x};
|
---|
147 | child.to = {height: c_original.height * factor.to.y, width: c_original.width * factor.to.x};
|
---|
148 | if (factor.from.y != factor.to.y) { // Vertical props scaling
|
---|
149 | child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from);
|
---|
150 | child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to);
|
---|
151 | };
|
---|
152 | if (factor.from.x != factor.to.x) { // Horizontal props scaling
|
---|
153 | child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from);
|
---|
154 | child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to);
|
---|
155 | };
|
---|
156 | child.css(child.from); // Shift children
|
---|
157 | child.animate(child.to, o.duration, o.options.easing, function(){
|
---|
158 | if (restore) $.effects.restore(child, props2); // Restore children
|
---|
159 | }); // Animate children
|
---|
160 | });
|
---|
161 | };
|
---|
162 |
|
---|
163 | // Animate
|
---|
164 | el.animate(el.to, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
|
---|
165 | if (el.to.opacity === 0) {
|
---|
166 | el.css('opacity', el.from.opacity);
|
---|
167 | }
|
---|
168 | if(mode == 'hide') el.hide(); // Hide
|
---|
169 | $.effects.restore(el, restore ? props : props1); $.effects.removeWrapper(el); // Restore
|
---|
170 | if(o.callback) o.callback.apply(this, arguments); // Callback
|
---|
171 | el.dequeue();
|
---|
172 | }});
|
---|
173 |
|
---|
174 | });
|
---|
175 |
|
---|
176 | };
|
---|
177 |
|
---|
178 | })(jQuery);
|
---|