1 |
|
---|
2 | (function($) {
|
---|
3 |
|
---|
4 | $.anythingZoomer = {
|
---|
5 |
|
---|
6 | defaults: {
|
---|
7 | smallArea: "#small",
|
---|
8 | largeArea: "#large",
|
---|
9 | zoomPort: "#overlay",
|
---|
10 | mover: "#mover",
|
---|
11 | expansionSize: 30,
|
---|
12 | speedMultiplier: 1.5
|
---|
13 |
|
---|
14 | }
|
---|
15 |
|
---|
16 | }
|
---|
17 |
|
---|
18 | $.fn.extend({
|
---|
19 | anythingZoomer:function(config) {
|
---|
20 |
|
---|
21 | var config = $.extend({}, $.anythingZoomer.defaults, config);
|
---|
22 |
|
---|
23 | var wrap = $(this);
|
---|
24 |
|
---|
25 | var smallArea = $(config.smallArea);
|
---|
26 | var largeArea = $(config.largeArea);
|
---|
27 | var zoomPort = $(config.zoomPort);
|
---|
28 | var mover = $(config.mover);
|
---|
29 |
|
---|
30 | var expansionSize = config.expansionSize;
|
---|
31 | var speedMultiplier = config.speedMultiplier;
|
---|
32 |
|
---|
33 | var over = false;
|
---|
34 |
|
---|
35 | function setup(smallArea, largeArea, wrap, zoomPort, mover, expansionSize, speedMultiplier) {
|
---|
36 |
|
---|
37 | smallArea
|
---|
38 | .show();
|
---|
39 |
|
---|
40 | zoomPort
|
---|
41 | .fadeIn();
|
---|
42 |
|
---|
43 | mover
|
---|
44 | .css({
|
---|
45 | width: mover.data("origWidth"),
|
---|
46 | height: mover.data("origHeight"),
|
---|
47 | overflow: "hidden",
|
---|
48 | position: "absolute"
|
---|
49 | })
|
---|
50 |
|
---|
51 | wrap
|
---|
52 | .css({
|
---|
53 | //width: "auto"
|
---|
54 | })
|
---|
55 | .mousemove(function(e){
|
---|
56 | var x = e.pageX - smallArea.offset().left;
|
---|
57 | var y = e.pageY - smallArea.offset().top;
|
---|
58 |
|
---|
59 | if ( (x < -expansionSize) || (x > smallArea.width() + expansionSize) || (y < -expansionSize) || (y > smallArea.height() + expansionSize) ) {
|
---|
60 | if(over)
|
---|
61 | {
|
---|
62 | mover.fadeOut(50);
|
---|
63 | over = false;
|
---|
64 | }
|
---|
65 | return;
|
---|
66 | }
|
---|
67 | else
|
---|
68 | {
|
---|
69 | if(!over)
|
---|
70 | {
|
---|
71 | mover.fadeIn();
|
---|
72 | over = true;
|
---|
73 | }
|
---|
74 | }
|
---|
75 |
|
---|
76 | mover.css({
|
---|
77 | top: y - 50,
|
---|
78 | left: x - 50
|
---|
79 | });
|
---|
80 |
|
---|
81 | largeArea.css({
|
---|
82 |
|
---|
83 | left: (-(e.pageX - smallArea.offset().left)*speedMultiplier)+expansionSize,
|
---|
84 | top: (-(e.pageY - smallArea.offset().top)*speedMultiplier)+expansionSize
|
---|
85 |
|
---|
86 | });
|
---|
87 |
|
---|
88 | })
|
---|
89 | .dblclick(function() {
|
---|
90 |
|
---|
91 | expand(smallArea, largeArea, wrap, zoomPort, mover, expansionSize, speedMultiplier);
|
---|
92 |
|
---|
93 | });
|
---|
94 |
|
---|
95 | };
|
---|
96 |
|
---|
97 | function expand(smallArea, largeArea, wrap, zoomPort, mover, expansionSize, speedMultiplier) {
|
---|
98 |
|
---|
99 | smallArea
|
---|
100 | .hide();
|
---|
101 |
|
---|
102 | zoomPort
|
---|
103 | .hide();
|
---|
104 |
|
---|
105 | mover
|
---|
106 | .fadeIn()
|
---|
107 | .data("origWidth", mover.width())
|
---|
108 | .data("origHeight", mover.height())
|
---|
109 | .css({
|
---|
110 | position: "static",
|
---|
111 | height: "auto",
|
---|
112 | width: "auto",
|
---|
113 | overflow: "visible"
|
---|
114 | });
|
---|
115 |
|
---|
116 | wrap
|
---|
117 | .css({
|
---|
118 | width: "100%"
|
---|
119 | })
|
---|
120 | .unbind()
|
---|
121 | .dblclick(function(){
|
---|
122 | setup(smallArea, largeArea, wrap, zoomPort, mover, expansionSize, speedMultiplier);
|
---|
123 | });
|
---|
124 |
|
---|
125 |
|
---|
126 | largeArea
|
---|
127 | .css({
|
---|
128 | left: 0,
|
---|
129 | top: 0,
|
---|
130 | width: largeArea.data("origWidth")
|
---|
131 | });
|
---|
132 |
|
---|
133 | };
|
---|
134 |
|
---|
135 | mover
|
---|
136 | .data("origWidth", mover.width())
|
---|
137 | .data("origHeight", mover.height());
|
---|
138 |
|
---|
139 | // Because the largeArea is often hidden, the width() function returns zero, take width from CSS instead
|
---|
140 | largeArea
|
---|
141 | .data("origWidth", largeArea.css("width"));
|
---|
142 |
|
---|
143 | setup(smallArea, largeArea, wrap, zoomPort, mover, expansionSize, speedMultiplier);
|
---|
144 |
|
---|
145 | return this;
|
---|
146 |
|
---|
147 | }
|
---|
148 |
|
---|
149 | });
|
---|
150 |
|
---|
151 | })(jQuery);
|
---|
152 |
|
---|
153 |
|
---|
154 |
|
---|
155 |
|
---|
156 |
|
---|
157 |
|
---|