6 * depends on jQuery 1.4
\r
11 var placeToCenter = true; // этот параметр отвечает за размещение картинки
\r
22 var width_array = new Array();
\r
23 var height_array = new Array();
\r
25 var screenWidth = 0;
\r
26 var screenHeight = 0;
\r
27 var screenScroll = 0;
\r
34 var zoomTrash = '<div id="bigGrey"></div>\r<div class="zoomShadow"><table><tr><td class="zs1"><b></b></td><td class="zh1"><b></b></td><td class="zs2"><b></b></td></tr><tr><td class="zv1"><b></b></td><td><div class="zoomBase"></div></td><td class="zv2"><b></b></td></tr><tr><td class="zs3"><b></b></td><td class="zh2"><b></b></td><td class="zs4"><b></b></td></tr></table></div>\r';
\r
35 var zoomX = '<a href="#" class="zoomX"></a>\r';
\r
37 var firstClick = true;
\r
40 var currentZoom = 0;
\r
44 var clicked = false;
\r
45 var strashno = false;
\r
46 var allLoaded = false;
\r
49 $("a.zoom").live("click", function(event) {
\r
50 event.preventDefault();
\r
52 $("a.zoomX").remove();
\r
53 $("select").addClass("selOff");
\r
55 bpOff = $(this).offset();
\r
56 bpWidth = $(this).find("img").width();
\r
57 bpHeight = $(this).find("img").height();
\r
58 if(bpWidth === null) {
\r
59 bpWidth = $(this).width();
\r
60 bpHeight = $(this).height();
\r
62 bpcLeft = Math.round(bpOff.left + (bpWidth / 2));
\r
63 bpcTop = Math.round(bpOff.top + (bpHeight / 2));
\r
65 screenScroll = $(window).scrollTop();
\r
66 screenWidth = $("body").innerWidth();
\r
67 screenHeight = $(window).height();
\r
69 scrLeft = Math.round(screenWidth / 2);
\r
70 scrTop = Math.round(screenScroll + (screenHeight / 2));
\r
72 if(firstClick === true) {
\r
73 $("body").append(zoomTrash);
\r
74 galNum = $(".zoom").length;
\r
75 for(var i = 0; i < galNum; i++) {
\r
76 $(".zoom:eq(" + i + ")").addClass("myZoom" + i);
\r
78 $("body").append('<img id="zoomLoading" src="zoom/zoom-load.gif" />\r')
\r
79 $("#zoomLoading").css("left", bpcLeft - 11).css("top", bpcTop - 11);
\r
81 for(var i = 0; i < galNum; i++) {
\r
82 var zoomUrl = $(".myZoom" + i).attr("href");
\r
83 $("body").append('<img class="zoomPic" src="' + zoomUrl + "?" + Math.random()*10 + '" id="zoomPic' + i + '" />\r')
\r
86 currentZoom = $(this).attr("class");
\r
87 currentZoom = currentZoom.slice(currentZoom.indexOf("myZoom"));
\r
88 currentZoom = currentZoom.slice(6);
\r
89 oldZoom = currentZoom;
\r
91 for(var i = 0; i < galNum; i++) {
\r
92 $("#zoomPic" + i).load(function() {
\r
94 var localId = $(this).attr("id").slice(7);
\r
95 width_array[localId] = $(this).width();
\r
96 height_array[localId] = $(this).height();
\r
100 var loading = setInterval(waitForPics, 50);
\r
101 firstClick = false;
\r
103 oldZoom = currentZoom;
\r
104 currentZoom = $(this).attr("class");
\r
105 currentZoom = currentZoom.slice(currentZoom.indexOf("myZoom"));
\r
106 currentZoom = currentZoom.slice(6);
\r
110 function waitForPics() {
\r
111 if(loadStatus === galNum) {
\r
112 $("#zoomLoading").remove();
\r
113 clearInterval(loading);
\r
119 function showPic() {
\r
121 zoomWidth = width_array[currentZoom];
\r
122 zoomHeight = height_array[currentZoom];
\r
124 var ratio = zoomWidth / zoomHeight;
\r
127 if(zoomHeight > screenHeight - 45) {
\r
128 zoomHeight = screenHeight - 45;
\r
129 zoomWidth = zoomHeight * ratio;
\r
130 } else if(zoomWidth > screenWidth - 50) {
\r
131 zoomWidth = screenWidth - 50;
\r
132 zoomHeight = zoomWidth / ratio;
\r
135 oldW = $(".myZoom" + oldZoom + " img").width();
\r
136 oldH = $(".myZoom" + oldZoom + " img").height();
\r
137 oldOf = $(".myZoom" + oldZoom + " img").offset();
\r
139 if(oldW === null) {
\r
140 oldW = $(".myZoom" + oldZoom).width();
\r
141 oldH = $(".myZoom" + oldZoom).height();
\r
142 oldOf = $(".myZoom" + oldZoom).offset();
\r
145 if(placeToCenter === false) {
\r
149 localTop = bpcTop - (zoomHeight / 2);
\r
150 if(localTop < screenScroll + 20) {localTop = screenScroll + 20};
\r
151 if(localTop + zoomHeight > screenScroll + screenHeight - 20) {localTop = screenScroll + screenHeight - zoomHeight - 20};
\r
152 localLeft = bpcLeft - (zoomWidth / 2);
\r
153 if(localLeft < 20) {localLeft = 20};
\r
154 if(localLeft > screenWidth - zoomWidth - 25) {localLeft = screenWidth - zoomWidth - 25};
\r
156 $("#zoomPic" + currentZoom).css("top", bpOff.top).css("left", bpOff.left).css("width", bpWidth).css("height", bpHeight);
\r
158 $("#zoomPic" + currentZoom).animate({
\r
163 }, 200, setShadow);
\r
165 if(currentZoom !== oldZoom && strashno === false) {
\r
167 $("#zoomPic" + oldZoom).animate({
\r
172 }, 200, removeOld);
\r
180 localTop = (screenHeight / 2) - (zoomHeight / 2);
\r
181 localLeft = (screenWidth / 2) - (zoomWidth / 2);
\r
183 $("#bigGrey").addClass("bigGrey").height($("body > table").innerHeight());
\r
185 $("#zoomPic" + currentZoom).css("top", bpOff.top).css("left", bpOff.left).css("width", bpWidth).css("height", bpHeight);
\r
187 $("#zoomPic" + currentZoom).animate({
\r
191 top:localTop + $(window).scrollTop()
\r
192 }, 200, setShadow);
\r
194 if(currentZoom !== oldZoom && strashno === false) {
\r
196 $("#zoomPic" + oldZoom).animate({
\r
201 }, 200, removeOld);
\r
208 function setShadow() {
\r
210 var zsLeft = localLeft - 6;
\r
211 var zsTop = localTop - 6;
\r
212 if(placeToCenter === false) {
\r
213 $("div.zoomShadow").css("left", zsLeft).css("top", zsTop);
\r
215 $("div.zoomShadow").css("left", zsLeft).css("top", zsTop).css("position", "fixed");
\r
217 $("div.zoomShadow div.zoomBase").width(zoomWidth - 8).height(zoomHeight - 8);
\r
219 for(var i = 0; i < galNum; i++) {
\r
220 if(i !== parseInt(currentZoom)) {
\r
221 $("#zoomPic" + i).css("top", -9999).css("left", -1000).css("width", width_array[i]).css("height", height_array[i]);
\r
225 $("#zoomPic" + currentZoom).click(function(event){
\r
226 $("a.zoomX").remove();
\r
230 $("body").append(zoomX);
\r
231 if(placeToCenter === false) {
\r
232 $("a.zoomX").css("left", localLeft + zoomWidth - 16).css("top", localTop - 17);
\r
234 $("a.zoomX").css("left", localLeft + zoomWidth - 16).css("position", "fixed").css("top", localTop - 17);
\r
237 $("a.zoomX").click(function(event){
\r
238 event.preventDefault();
\r
239 $("a.zoomX").css("position", "absolute").remove();
\r
242 $("select").addClass("selOff");
\r
244 if(placeToCenter === true) {
\r
245 $("#zoomPic" + currentZoom).css("position", "fixed").css("top", localTop);
\r
248 function removeShadow() {
\r
249 $("div.zoomShadow").css("top", -9999).css("left", -1000).css("position", "absolute");
\r
252 function removeOld() {
\r
253 $("#zoomPic" + oldZoom).css("top", -9999).css("left", -1000).css("width", width_array[oldZoom]).css("height", height_array[oldZoom]).css("position", "absolute");
\r
256 function hideCurrent() {
\r
257 if(clicked === false) {
\r
258 $("#bigGrey").removeClass("bigGrey").height(0);
\r
259 $("select").removeClass("selOff");
\r
260 oldZoom = currentZoom;
\r
262 oldWidth = width_array[oldZoom];
\r
263 oldHeight = height_array[oldZoom];
\r
265 oldW = $(".myZoom" + oldZoom + " img").width();
\r
266 oldH = $(".myZoom" + oldZoom + " img").height();
\r
267 oldOf = $(".myZoom" + oldZoom + " img").offset();
\r
268 if(oldW === null) {
\r
269 oldW = $(".myZoom" + oldZoom).width();
\r
270 oldH = $(".myZoom" + oldZoom).height();
\r
271 oldOf = $(".myZoom" + oldZoom).offset();
\r
276 if(placeToCenter === false) {
\r
277 $("#zoomPic" + oldZoom).animate({
\r
282 }, 200, removeOld);
\r
284 $("#zoomPic" + oldZoom).animate({
\r
288 top:oldOf.top - $(window).scrollTop()
\r
289 }, 200, removeOld);
\r
297 $("#bigGrey").click(function() {
\r
298 $("a.zoomX").remove();
\r
302 $(window).keydown(function(event) {
\r
303 if(event.keyCode == '27') {
\r
304 $("a.zoomX").remove();
\r
307 if(event.keyCode == '39' && galNum > 1) {
\r
309 $("a.zoomX").remove();
\r
310 oldZoom = currentZoom;
\r
312 if(firstClick === false) {
\r
313 if(currentZoom < galNum - 1) {
\r
320 bpOff = $(".myZoom" + currentZoom).offset()
\r
321 bpWidth = $(".myZoom" + currentZoom).find("img").width();
\r
322 bpHeight = $(".myZoom" + currentZoom).find("img").height();
\r
323 if(bpWidth === null) {
\r
324 bpWidth = $(".myZoom" + currentZoom).width();
\r
325 bpHeight = $(".myZoom" + currentZoom).height();
\r
327 bpcLeft = Math.round(bpOff.left + (bpWidth / 2));
\r
328 bpcTop = Math.round(bpOff.top + (bpHeight / 2));
\r
332 if(event.keyCode == '37' && galNum > 1) {
\r
334 $("a.zoomX").remove();
\r
335 oldZoom = currentZoom;
\r
337 if(firstClick === false) {
\r
338 if(currentZoom > 0) {
\r
341 currentZoom = galNum - 1;
\r
345 bpOff = $(".myZoom" + currentZoom).offset()
\r
346 bpWidth = $(".myZoom" + currentZoom).find("img").width();
\r
347 bpHeight = $(".myZoom" + currentZoom).find("img").height();
\r
348 if(bpWidth === null) {
\r
349 bpWidth = $(".myZoom" + currentZoom).width();
\r
350 bpHeight = $(".myZoom" + currentZoom).height();
\r
352 bpcLeft = Math.round(bpOff.left + (bpWidth / 2));
\r
353 bpcTop = Math.round(bpOff.top + (bpHeight / 2));
\r
359 function clearCache() {
\r
372 $("img.zoomPic").remove();
\r
373 $("a.zoomX").remove();
\r