webForumDet fria alternativet

Flytta lager funktion

2 svar · 183 visningar · startad av Erik Juhlin

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#1

Jag skulle vilja ha en funktion som man skickar med id, left, top och hastighet. Funktionen ska då flytta lagret man angett till punkterna man angett i hastigheten man angett.

Någon som har en sådan funktion eller har lust att hjälpa mig med detta? :)

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

JojoxxMedlem sedan juni 20004 308 inlägg
#2

Eftersom detta script använder generella funktioner går det säkert att optimera koden, men jag gillar generella funktioner :) Here goes;

<div id="foo" style="position:absolute;top:200px;left:200px;width:50px;height:50px;background:blue;"></div>
<script language="JavaScript">
function moveLayerAbs(Id,x,y){
	if (document.all){
		if (x) document.all[Id].style.left = x;
		if (y) document.all[Id].style.top = y;
	} else if (document.layers){
		if (x) document.layers[Id].left = x;
		if (y) document.layers[Id].top = y;
	} else if (document.getElementById){
		if (x) document.getElementById(Id).style.left = x+'px';
		if (y) document.getElementById(Id).style.top = y+'px';
	}
}	
function getLayerX(Id){
	if (document.all){
		return parseInt(document.all[Id].style.left);
	} else if (document.layers){
		return parseInt(document.layers[Id].left);
	} else if (document.getElementById){
		return parseInt(document.getElementById(Id).style.left);
	}
}
function getLayerY(Id){
	if (document.all){
		return parseInt(document.all[Id].style.top);
	} else if (document.layers){
		return parseInt(document.layers[Id].top);
	} else if (document.getElementById){
		return parseInt(document.getElementById(Id).style.top);
	}
}
function scrollLayerTo(Id,x,y,speed){
	difx=Math.abs(getLayerX(Id)-x);
	dify=Math.abs(getLayerY(Id)-y);
	if(difx<speed&&dify<speed){
		moveLayerAbs(Id,x,y);
	} else {
		if(dify>difx){
			movy=speed;
			movx=parseInt((difx/dify)*speed);
		} else {
			movx=speed;
			movy=parseInt((dify/difx)*speed);
		}
		if(getLayerX(Id)>x) movx=-movx;
		if(getLayerY(Id)>y) movy=-movy;
		moveLayerAbs(Id,getLayerX(Id)+movx,getLayerY(Id)+movy);
		eval("setTimeout('scrollLayerTo(\""+Id+"\","+x+","+y+","+speed+")',5);");
	}
}
scrollLayerTo('foo',10,150,5);
</script>

---Tillägg---
Kanske bör förklara funktionen. Det intressanta är anropet scrollLayerTo('foo',10,150,5) Den använder samma parameterföljd som du skrev. Id, x-destination, y-destination, hastighet (i.e. maximalt antal pixel att flytta / steg).

------------------
/ J

[Redigerat av Jojoxx den 05 sep 2001]

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#3

Tack Jojoxx! :)
Nu har jag lite kod att jobba med. :)

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

129 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)