PDA

View Full Version : Contain Flying Planes Script to a certain area



mtlhead
07-04-2007, 12:01 AM
1) Script Title:
Flying Planes Script

2) Script URL (on DD):
http://dynamicdrive.com/dynamicindex4/plane.htm

3) Describe problem:
I need help modifying this script so that the planes only fly within a certain area of my page. Depending on the users resolution this area can be in a different spot. Right now the area is simply a table cell but I can use <div>'s too.


I've tried changing some numbers but can't seem to narrow it down and am not confident it will work in other browsers/resolutions.

Thanks in advance

thetestingsite
07-04-2007, 12:07 AM
Try these changes in the script (changes in red):



<script language="JavaScript1.2">

//Flying planes - by John Ely
//Modified from: Autumn leaves script- by Kurt Grigg (kurt.grigg@virgin.net)
//Modified by Dynamic Drive for NS6 functionality
//visit http://www.dynamicdrive.com for this script

//Pre-load your image below!
//CHANGE 5 to the number of images listed below
grphcs=new Array(5)

//PRELOAD the involved images (extend or contract variables according to # of images used)
Image0=new Image();
Image0.src=grphcs[0]="plane0.gif"
Image1=new Image();
Image1.src=grphcs[1]="plane1.gif"
Image2=new Image();
Image2.src=grphcs[2]="plane2.gif"
Image3=new Image();
Image3.src=grphcs[3]="plane3.gif"
Image4=new Image();
Image4.src=grphcs[4]="plane4.gif"

//SPECIFY number of images to randomly display concurrently from list above. Less the more efficient
Amount=3;
Ypos=new Array();
Xpos=new Array();
Speed=new Array();
Step=new Array();
Cstep=new Array();
ns=(document.layers)?1:0;
ns6=(document.getElementById&&!document.all)?1:0;
ie=document.all

if (ns){
for (i = 0; i < Amount; i++){
var P=Math.floor(Math.random()*grphcs.length);
rndPic=grphcs[P];
document.write("<LAYER NAME='sn"+i+"' LEFT=0 TOP=0 WIDTH=150><img src="+rndPic+"></LAYER>");
}
}
else{
document.write('<div style="position:absolute;top:0px;left:0px;width:150;"><div style="position:relative">');
for (i = 0; i < Amount; i++){
var P=Math.floor(Math.random()*grphcs.length);
rndPic=grphcs[P];
document.write('<img id="si'+i+'" src="'+rndPic+'" style="position:absolute;top:0px;left:0px">');
}
document.write('</div></div>');
}
WinHeight=(ns||ns6)?window.innerHeight-70:window.document.body.clientHeight;
WinWidth=(ns||ns6)?window.innerWidth:window.document.body.clientWidth;
for (i=0; i < Amount; i++){
Ypos[i] = Math.round(Math.random()*WinHeight);
Xpos[i] = Math.round(Math.random()*WinWidth);
Speed[i]= Math.random()*5+1;
Cstep[i]=0;
Step[i]=Math.random()*0.1+0.05;
}
function fly(){
var WinHeight=(ns||ns6)?window.innerHeight:window.document.body.clientHeight;
var WinWidth=(ns||ns6)?window.innerWidth-70:window.document.body.clientWidth;
var hscrll=(ns||ns6)?window.pageYOffset:document.body.scrollTop;
var wscrll=(ns||ns6)?window.pageXOffset:document.body.scrollLeft;

for (i=0; i < Amount; i++){
sy = Speed[i]*Math.sin(Cstep[i]);
sx = Speed[i]*2;
Ypos[i]+=sy;
Xpos[i]+=sx;
if (Xpos[i] > WinWidth){
Ypos[i]=Math.round(Math.random()*WinHeight);
Xpos[i]=-60;
Speed[i]=Math.random()*5+1;
}

if (ns){
document.layers['sn'+i].left=Xpos[i]+wscrll;
document.layers['sn'+i].top=Ypos[i];
}

else if (ns6){
document.getElementById("si"+i).style.left=Xpos[i]+wscrll;
document.getElementById("si"+i).style.top=Math.min(WinHeight,Ypos[i]);
}

else{
eval("document.all.si"+i).style.left=Xpos[i]+wscrll;
eval("document.all.si"+i).style.top=Ypos[i];
}
Cstep[i]+=Step[i];
}
setTimeout('fly()',20);
}

if (ie||ns||ns6)
window.onload=fly
//-->
</script>


Hope this helps.

mtlhead
07-04-2007, 04:24 PM
Thanks, that was what I started out with and ended up with several more changes. I made it good for one image only and set it so the image moves in a straight line (no sine wave). I still don't like how it just cuts off at the edges of my layer/div and want to implement a customizable delay before it flies over again and maybe put in a variable to set the number of flyovers there will be. The layer/div code was moved inside my table.

More work and little time. Being that this is just an enhancement I am moving on with the site and will come back to this later.


<script language="JavaScript1.2">
//Flying planes - by John Ely
//Modified from: Autumn leaves script- by Kurt Grigg (kurt.grigg@virgin.net)
//Modified by Dynamic Drive for NS6 functionality
//Modified by Jason Wagner for containment & quantity
//visit http://www.dynamicdrive.com for this script

ns=(document.layers)?1:0;
ns6=(document.getElementById&&!document.all)?1:0;
ie=document.all;
delay = 3; //delay between loops in seconds
dismissafter=3;

WinHeight=1;
WinWidth=500;

Ypos = Math.round(Math.random()*WinHeight);
Xpos = Math.round(Math.random()*WinWidth);
Speed= Math.random()*2+1;
Step=Math.random()*0.1+0.05;

function fly(){
sy = Speed*Math.sin(Step);
sx = Speed*2;
Ypos+=sy;
Xpos+=sx;

//wrap the animation back to the left side
if (Xpos > WinWidth){
//setTimeout('reset()',delay*1000);
reset();
} else {
//position the image element
if (ns){
document.layers['sn'].left=Xpos;
document.layers['sn'].top=Ypos;
}
else if (ns6) {
document.getElementById("si").style.left=Xpos;
document.getElementById("si").style.top=Math.min(WinHeight,Ypos);
}
else {
eval("document.all.si").style.left=Xpos;
eval("document.all.si").style.top=Ypos;
}
Step++;
}

//keep the animation going
setTimeout('fly()',100); //execute the script after waiting 1/10 of a second
}

function reset(){
Ypos=Math.round(Math.random()*WinHeight); //reset the y-coordinate
Xpos=-10; //reset the x-coorinate, use - so it flys in
Speed=Math.random()*5+1; //reset the speed
}

//start the animation
if (ie||ns||ns6)
//window.onload=fly
//-->
</script>