rc-web@42
|
1 <svg width="100%" height="100%"
|
rc-web@42
|
2 xmlns="http://www.w3.org/2000/svg"
|
rc-web@42
|
3 xmlns:xlink="http://www.w3.org/1999/xlink"
|
rc-web@42
|
4 onload="startUp(evt)" onmousemove="mouseMove(evt)"
|
rc-web@42
|
5 >
|
rc-web@42
|
6
|
rc-web@42
|
7 <script>
|
rc-web@42
|
8
|
rc-web@42
|
9 <![CDATA[
|
rc-web@42
|
10
|
rc-web@42
|
11 var xmlns="http://www.w3.org/2000/svg";
|
rc-web@42
|
12 var xmlnsxlink="http://www.w3.org/1999/xlink" ;
|
rc-web@42
|
13
|
rc-web@42
|
14 var numpics = 17;
|
rc-web@42
|
15 var smallW = 50;
|
rc-web@42
|
16 var smallH = 50;
|
rc-web@42
|
17 var bigW = 100;
|
rc-web@42
|
18 var bigH = 100;
|
rc-web@42
|
19 var bigLength = 100;
|
rc-web@42
|
20 var centerX = 350;
|
rc-web@42
|
21 var centerY = 350;
|
rc-web@42
|
22 var centerW = 300;
|
rc-web@42
|
23 var centerH = 300;
|
rc-web@42
|
24 var centerID = numpics - 1;
|
rc-web@42
|
25 var centerPic ;
|
rc-web@42
|
26 var radiusC = 250;
|
rc-web@42
|
27 var img = new Array();
|
rc-web@42
|
28 var angle = 2*Math.PI/(numpics-1);
|
rc-web@42
|
29
|
rc-web@42
|
30 function startUp(evt)
|
rc-web@42
|
31 {
|
rc-web@42
|
32 for (i=0; i<centerID; i++) {
|
rc-web@42
|
33 img[i] = document.createElementNS(xmlns,"image");
|
rc-web@42
|
34 img[i].setAttributeNS(null,"id",i);
|
rc-web@42
|
35 img[i].setAttributeNS(null,"width",smallW);
|
rc-web@42
|
36 img[i].setAttributeNS(null,"height",smallH);
|
rc-web@42
|
37 x = getX(i);
|
rc-web@42
|
38 y = getY(i);
|
rc-web@42
|
39 img[i].setAttributeNS(null,"x",x);
|
rc-web@42
|
40 img[i].setAttributeNS(null,"y",y);
|
rc-web@42
|
41 img[i].setAttributeNS(xmlnsxlink,"href","../images/goldengate/gg"+i+".jpg");
|
rc-web@42
|
42 img[i].addEventListener("click", mouseClick,false);
|
rc-web@42
|
43 document.getElementById("pictures").appendChild(img[i]);
|
rc-web@42
|
44 }
|
rc-web@42
|
45 i = centerID;
|
rc-web@42
|
46 img[i] = document.createElementNS(xmlns,"image");
|
rc-web@42
|
47 img[i].setAttributeNS(null,"id",i);
|
rc-web@42
|
48 img[i].setAttributeNS(null,"width",centerW);
|
rc-web@42
|
49 img[i].setAttributeNS(null,"height",centerH);
|
rc-web@42
|
50 img[i].setAttributeNS(null,"x",centerX-centerW/2);
|
rc-web@42
|
51 img[i].setAttributeNS(null,"y",centerY-centerH/2);
|
rc-web@42
|
52 img[i].setAttributeNS(xmlnsxlink,"href","../images/goldengate/gg"+i+".jpg");
|
rc-web@42
|
53 img[i].addEventListener("click", mouseClick,false);
|
rc-web@42
|
54 document.getElementById("pictures").appendChild(img[i]);
|
rc-web@42
|
55 centerPic = "../images/goldengate/gg"+i+".jpg";
|
rc-web@42
|
56 }
|
rc-web@42
|
57
|
rc-web@42
|
58 // left x
|
rc-web@42
|
59 function getX(i)
|
rc-web@42
|
60 {
|
rc-web@42
|
61 var x = centerX + radiusC*Math.cos(angle*i)-getW(i)/2
|
rc-web@42
|
62 return x;
|
rc-web@42
|
63 }
|
rc-web@42
|
64
|
rc-web@42
|
65 // top y
|
rc-web@42
|
66 function getY(i)
|
rc-web@42
|
67 {
|
rc-web@42
|
68 var y = centerY + radiusC*Math.sin(angle*i)-getH(i)/2;
|
rc-web@42
|
69 return y;
|
rc-web@42
|
70 }
|
rc-web@42
|
71
|
rc-web@42
|
72 // center x
|
rc-web@42
|
73 function getXc(i)
|
rc-web@42
|
74 {
|
rc-web@42
|
75 var xc = centerX + radiusC*Math.cos(angle*i);
|
rc-web@42
|
76 return xc;
|
rc-web@42
|
77 }
|
rc-web@42
|
78
|
rc-web@42
|
79 // center y
|
rc-web@42
|
80 function getYc(i)
|
rc-web@42
|
81 {
|
rc-web@42
|
82 var yc = centerY + radiusC*Math.sin(angle*i);
|
rc-web@42
|
83 return yc;
|
rc-web@42
|
84 }
|
rc-web@42
|
85
|
rc-web@42
|
86 // get width
|
rc-web@42
|
87 function getW(i)
|
rc-web@42
|
88 {
|
rc-web@42
|
89 return img[i].getAttributeNS(null,"width");
|
rc-web@42
|
90 }
|
rc-web@42
|
91
|
rc-web@42
|
92 // get height
|
rc-web@42
|
93 function getH(i)
|
rc-web@42
|
94 {
|
rc-web@42
|
95 return img[i].getAttributeNS(null,"height");
|
rc-web@42
|
96 }
|
rc-web@42
|
97
|
rc-web@42
|
98
|
rc-web@42
|
99 /* Swap the picked picture with the picture at the center */
|
rc-web@42
|
100
|
rc-web@42
|
101 function mouseClick(evt)
|
rc-web@42
|
102 {
|
rc-web@42
|
103 var idPicked = evt.target.getAttributeNS(null,"id");
|
rc-web@42
|
104 var imgPicked = evt.target.getAttributeNS(xmlnsxlink,"href");
|
rc-web@42
|
105
|
rc-web@42
|
106 // picked
|
rc-web@42
|
107 img[idPicked].setAttributeNS(xmlnsxlink,"href", centerPic);
|
rc-web@42
|
108
|
rc-web@42
|
109 // center
|
rc-web@42
|
110 img[centerID].setAttributeNS(xmlnsxlink,"href",imgPicked);
|
rc-web@42
|
111 centerPic = imgPicked;
|
rc-web@42
|
112 }
|
rc-web@42
|
113
|
rc-web@42
|
114
|
rc-web@42
|
115 function mouseMove(evt)
|
rc-web@42
|
116 {
|
rc-web@42
|
117 var xm = evt.clientX;
|
rc-web@42
|
118 var ym = evt.clientY;
|
rc-web@42
|
119
|
rc-web@42
|
120 var id = parseInt(evt.target.getAttributeNS(null,"id"));
|
rc-web@42
|
121
|
rc-web@42
|
122 /* If a mouse is far away from any picture,
|
rc-web@42
|
123 just return without modifying the picture. */
|
rc-web@42
|
124
|
rc-web@42
|
125 var distance = Math.sqrt(
|
rc-web@42
|
126 (xm-centerX)*(xm-centerX) + (ym-centerY)*(ym-centerY) );
|
rc-web@42
|
127 if(distance < (radiusC - bigLength) ||
|
rc-web@42
|
128 distance > (radiusC + bigLength ) ) {
|
rc-web@42
|
129 return;
|
rc-web@42
|
130 }
|
rc-web@42
|
131
|
rc-web@42
|
132 /* Calculate the distance of each picture from a mouse
|
rc-web@42
|
133 and set the size of pictures depending on the distance. */
|
rc-web@42
|
134
|
rc-web@42
|
135 var distMin;
|
rc-web@42
|
136 var distMax = radiusC * 2;
|
rc-web@42
|
137 var x,y,xc,yc,h,w;
|
rc-web@42
|
138 var wNew = new Array();
|
rc-web@42
|
139 var hNew = new Array();
|
rc-web@42
|
140
|
rc-web@42
|
141 for (i=0; i<numpics-1; i++)
|
rc-web@42
|
142 {
|
rc-web@42
|
143 xc = getXc(i);
|
rc-web@42
|
144 yc = getYc(i);
|
rc-web@42
|
145 distance= Math.sqrt(
|
rc-web@42
|
146 (xm-xc)*(xm-xc)+(ym-yc)*(ym-yc) );
|
rc-web@42
|
147 h = getH(i);
|
rc-web@42
|
148 w = getW(i);
|
rc-web@42
|
149 distMin = Math.sqrt(h*h+w*w)/2;
|
rc-web@42
|
150 wNew[i] = (smallW-bigW)/(distMax - distMin)*distance + bigW;
|
rc-web@42
|
151 hNew[i] = (smallH-bigH)/(distMax - distMin)*distance + bigH;
|
rc-web@42
|
152 }
|
rc-web@42
|
153
|
rc-web@42
|
154 for (i=0; i<numpics-1; i++)
|
rc-web@42
|
155 {
|
rc-web@42
|
156 xc = getXc(i);
|
rc-web@42
|
157 yc = getYc(i);
|
rc-web@42
|
158 x = xc - wNew[i]/2;
|
rc-web@42
|
159 y = yc - hNew[i]/2;
|
rc-web@42
|
160 img[i].setAttributeNS(null,"width", wNew[i]);
|
rc-web@42
|
161 img[i].setAttributeNS(null,"height", hNew[i]);
|
rc-web@42
|
162 img[i].setAttributeNS(null,"x", x);
|
rc-web@42
|
163 img[i].setAttributeNS(null,"y", y);
|
rc-web@42
|
164 }
|
rc-web@42
|
165 }
|
rc-web@42
|
166
|
rc-web@42
|
167
|
rc-web@42
|
168 //]]>
|
rc-web@42
|
169 </script>
|
rc-web@42
|
170
|
rc-web@42
|
171
|
rc-web@42
|
172 <rect x="0" y="0" width="100%" height="100%" fill="white" />
|
rc-web@42
|
173
|
rc-web@42
|
174 <g id="pictures" />
|
rc-web@42
|
175
|
rc-web@42
|
176 <!-- text % -->
|
rc-web@42
|
177 <text id="ggText" x="270" y="490" font-size="20" fill="#ff4f00">
|
rc-web@42
|
178 Golden Gate Bridge</text>
|
rc-web@42
|
179
|
rc-web@42
|
180 </svg>
|