blob: 48d9e462b256ea0cf86b95c8b3b4dcace1e7bc8a [file] [log] [blame]
<svg width="100%" height="100%"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
onload="startup(evt)"
>
<script>
<![CDATA[
var svgDocument;
balloon=null;
count=0
running=true
xlow=-200
xhigh=100
x=xlow
incr=5
dir=1
xdir=1
ydir=1
xspeed=.7
yspeed=.4
xcur=50
ycur=50
ylow=-25
yhigh=100
numlines=35
rightedge=null
Hi=new Array()
Up=new Array()
bottomedge=null
svgns = 'http://www.w3.org/2000/svg';
xlinkns = 'http://www.w3.org/1999/xlink';
function startup(evt) {
O=evt.target
O.setAttribute("onclick","running=!running;animate()")
svgDocument = O.ownerDocument;
balloon = svgDocument.getElementById("balloon");
path=svgDocument.getElementById("Q")
A=getDisplaySize()
rightedge=A.width
bottomedge=A.height - 40
sky=svgDocument.getElementById("sky")
sky.setAttribute("cy",50)
sky.setAttribute("cx",rightedge/2)
sky.setAttribute("r",rightedge/1.45)
draw("peaks2",7,90,30)
draw("peaks",10,80,25)
draw("mountains",15,55,22)
draw("foothills",22,35,15)
moredraw();
}
function getDisplaySize()
{
//function due to G. Wade Johnson <svg-developers.yahoogroups.com>
//Date: Mon, 12 Dec 2005 20:57:49 -0600
//Subject: Re: [svg-developers] Screen extents
var extents = null;
try{
var view = document.documentElement.viewport;
extents = {width: view.width,height: view.height};
}
catch(e){
extents = {width: window.innerWidth, height: window.innerHeight};
}
return extents;
}
P=new Array()
offset=50
function draw(id,humps,hi,up){
IDS[IDS.length]=id
Hi[id]=hi
Up[id]=up
var peaks=3*humps
P[id]=new Array;
t=svgDocument.getElementById(id)
for (i=0;i<peaks;i++){
P[id][i]= {x: Math.floor(Math.random()*(rightedge+2*offset)-offset),
y: Math.floor(Math.random()*hi)+up};
}
P[id].sort(compare)
s=render(P[id],0)
t.setAttribute("d",s)
}
function compare(x,y){
if (x.x<y.x) return -1
else return 1
}
function render(Arr,lo){
var low=Math.floor(bottomedge*.9)
var s="M "+(-offset)+" "+(low)+" "
s+=(7-offset)+" "+(low - Arr[0].y)+" "
for (i=1;i<Arr.length;i++){
if ((i)%3==0) s+="C "+Arr[i].x+" "+(low - Arr[i].y)+" "
else
s+=Arr[i].x+" "+(low - Arr[i].y)+" "
}
s+="L "+(rightedge+offset)+" "+(low )+" Q "+(rightedge/2)+" "+(low)+" "+(-offset)+" "+(low)+" z"
return s
}
function moredraw(){
for (j=0;j<numlines;j++) another(100+j*10)
Pa = svgDocument.createElementNS(svgns,"path");
Pa.setAttribute("d", "M 194 340 C 185 360 215 360 206 340");
Pa.setAttribute("stroke", "#440")
Pa.setAttribute("stroke-width", "3")
Pa.setAttribute("fill", "#551")
balloon.appendChild(Pa);
animate()
}
var xlinkns = "http://www.w3.org/1999/xlink";
function another(x){
Pa = svgDocument.createElementNS(svgns,"path");
Pa.setAttribute("id", "P"+count); count++
Pa.setAttribute("d", "M 100 0 C 200 200 300 200 100 300");
Pa.setAttribute("stroke", color(16,16,12))
Pa.setAttribute("stroke-width", "5")
Pa.setAttribute("fill", "none")
balloon.appendChild(Pa);
}
function animate(){
if (!running) return
x+=incr*dir
if ((x<xlow+incr)||(x>xhigh+incr))dir=-dir
onestep(x)
window.setTimeout("animate()",10)
}
IDS=new Array
mea=0
function onestep(x){
mea++
balloon.setAttribute("transform","translate("+xcur+","+ycur+")")
for (i=0;i<count;i++){
Pa = svgDocument.getElementById("P"+i);
Pa.setAttribute("d", "M 200 20 C "+((i*18)+x)+" 100 "+(220- x/2)+" 250 200 340 ");
}
adj=0
for (id in IDS){
for (j=0;j<P[IDS[id]].length;j++){
P[IDS[id]][j].x-=(adj*adj/4+1)/2
}
adj++
if(P[IDS[id]][3].x<0){
st=rightedge+offset
for (k=0;k<3;k++){
newx=st+Math.ceil(80*Math.random()/P[IDS[id]].length)
Q={x: newx,
y: Math.floor(Math.random()*Hi[IDS[id]]+Up[IDS[id]])}
st=newx
P[IDS[id]].push(Q);
R=P[IDS[id]].shift()
}
}
s=render(P[IDS[id]],R.y)
t=svgDocument.getElementById(IDS[id])
t.setAttribute("d",s)
}
xcur=xcur+xspeed*xdir
ycur=ycur+yspeed*ydir
if((xcur<xlow+150)||(xcur>rightedge/1.5)) xdir=-xdir
if((ycur<ylow)||(ycur>yhigh)) ydir=-ydir
if (Math.floor(xcur)%10==0)recolorone(color(16,12,8))
if (Math.floor(xcur)%20==1)recolorone(color(16,16,0))
if (Math.floor(xcur)%30==2)recolorone("#da0")
}
first=true
function recolorone(c){
r=Math.floor(Math.random()*count)
Pa = svgDocument.getElementById("P"+r);
Pa.setAttribute("stroke",c);
}
function color(xr,xg,xb){
r=Math.floor(Math.random()*xr)
R=r.toString(16)
g=Math.floor(Math.random()*xg)
G=g.toString(16)
b=Math.floor(Math.random()*xb)
B=b.toString(16)
return "#"+R+B+G
}
//]]>
</script>
<defs>
<path id="Q" stroke="black" stroke-width="3"/>
<linearGradient id="backsky" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0" stop-color="#888"/>
<stop offset=".5" stop-color="#0ff"/>
<stop offset=".9" stop-color="#ec7"/>
</linearGradient>
<radialGradient id="sky" cx="500" cy="300" r="500" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#0ff" stop-opacity="1"/>
<stop offset=".2" stop-color="#0ff" stop-opacity=".6"/>
<stop offset=".71" stop-color="#000" stop-opacity="0"/>
<stop offset=".80" stop-color="#8ff" stop-opacity="1"/>
</radialGradient>
<linearGradient id="peak2" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0" stop-color="#eff"/>
<stop offset=".2" stop-color="#9cd"/>
<stop offset=".4" stop-color="#88b"/>
<stop offset=".9" stop-color="#9a9"/>
</linearGradient>
<linearGradient id="peak" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0" stop-color="#ddc"/>
<stop offset=".2" stop-color="#998"/>
<stop offset=".4" stop-color="#a8b"/>
<stop offset=".9" stop-color="#aa6"/>
</linearGradient>
<linearGradient id="mount" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0" stop-color="#589"/>
<stop offset=".2" stop-color="#869"/>
<stop offset=".6" stop-color="#898"/>
</linearGradient>
<linearGradient id="foot" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0" stop-color="#b87"/>
<stop offset=".1" stop-color="#b63"/>
<stop offset=".70" stop-color="#c86"/>
<stop offset=".90" stop-color="#bc7"/>
</linearGradient>
</defs>
<rect height="100%" width="100%" opacity="1" fill="url(#backsky)"/>
<path id="peaks2" d="M 0 500 400 400 800 500 z" fill="url(#peak2)" />
<path id="peaks" d="M 0 500 400 400 800 500 z" fill="url(#peak)" />
<path id="mountains" d="M 0 500 400 400 800 500 z" fill="url(#mount)" />
<path id="foothills" d="M 0 500 400 400 800 500 z" fill="url(#foot)" stroke="none"/>
<rect height="100%" width="100%" opacity="1" fill="url(#sky)"/>
<g id="balloon" opacity="0.7">
</g>
</svg>