webForumDet fria alternativet

låsa div efter flytt

11 svar · 258 visningar · startad av Niehls

NiehlsMedlem sedan juli 2002164 inlägg
#1

jag har fixat ett litet script som flyttar en div. mina javascriptkunskaper är ytterst begränsade, så jag är glad att jag lyckades med det här..
koden är:

function moveit(spot)
{

   var picture=document.all.small_box.style;
       if (spot>555)
      {
        picture.left= spot;
        spot-=25;
        setTimeout('moveit('+spot+')',1);
       }      
    
}

diven som åker heter small_box

sedan anropas funktionen med href="javascript:moveit(startvärdet)".
ni kan se ett exempel på
www.niehls.com/niehls_v3/

om ni klickar på länken en gång till så åker diven ytterligare en gång. jag vill att den skall stanna där... nån som vet hur jag kan lösa det här? och kom ihåg...extrem javascript-newbie

jupitersMedlem sedan sep. 2002102 inlägg
#2

Alla länkar som finns på en html-sida hamnar i en javascript-array!
links[0],links[1],links[2]...osv

Du behöver bara kolla vilket nummer länken i fråga har och lägga in nedanstående rad i moveit-funktionen.
Href-attributet ändras då från "javascript:moveit(spot)" till bara "#" efter första "klicket".
På din exempelsida fanns bara en länk. Därför nr 0.

document.links[0].href="#";

colioneMedlem sedan juni 20013 386 inlägg
#3

Mja, jag hade nog lagt en variabel som blir true om man har klickat fram rutan och skriva om skriptet så att mankör med en whileloop eller forloop istället för en if...else

typ:

function moveit(spot)
{
   var bMoved=false
   var picture=document.all.small_box.style;
       if (!bMoved)
      {
        bMoved=true
          while (spot>555 )
        {
             picture.left= spot;
             spot-=25;
         }
       }      
    
}

Den borde funka, det är dock sent och jag är trött :p så det är inte säkert.

icaaqMedlem sedan okt. 20004 910 inlägg
#4

*funkar inte i min mozilla*

mvh icaaq

NiehlsMedlem sedan juli 2002164 inlägg
#5

nej....beror väl antagligen på att mozilla är netscape-baserat och netscape pallar inte divs..orkar inte använda layer ist..sorry :)
tack för svaren...skall prova. meddelar om det funkar eller inte

icaaqMedlem sedan okt. 20004 910 inlägg
#6

Niehls skrev:

nej....beror väl antagligen på att mozilla är netscape-baserat och netscape pallar inte divs..orkar inte använda layer ist..sorry :)
tack för svaren...skall prova. meddelar om det funkar eller inte

que??
jag använder alltid "divs" och jag har inga problem att se dem i vanliga fall.....så utveckla ditt svar lite kanske, om du orkar :)

mvh icaaq

NiehlsMedlem sedan juli 2002164 inlägg
#7

hmm.njae funkade inte riktigt (använde coliones exempel).
rutan poppar bara upp.. kan ju bero på att while-loopen körs ganska snabbt.. finns det inte en liknande javascriptfunktion som php's sleep()´? då skulle jag ju kunna få while-loopen att vänta, säg 10 ms innan nästa körning.. vet inte om detta är problemet..nån som vet? (provade även att ändra till spot-=1 istället.)

edit:
du var snabb där :)
ptja..hade för mig att netscape/mozilla/opera tolkar <div> taggen lite mystiskt.. oj..nu kom jag på vad som är problemet.... i funktionen borde väl typ

  if (document.layers)
  {
   var picture=document.small_box;
       if (spot<400)
      {
        picture.left= spot;
        spot+=5;
        setTimeout('moveit('+spot+')',10);
       }      
    }

också vara inlagd för att mozilla skall förstå det.. (?)

en grej som däremot inte verkar fungera i mozilla är
overlow-y:auto;
ett exempel finns på den här sidan...

JojoxxMedlem sedan juni 20004 306 inlägg
#8

Niehls skrev:

beror väl antagligen på att mozilla är netscape-baserat

Snarare tvärt om :)

Netscape hanterar div från version 4, men exemplet är gjort för IE-dom så det är inte så konstigt att det inte funderar i något annat.

(jag har lite cross-browser funktioner här)

JojoxxMedlem sedan juni 20004 306 inlägg
#9

finns det inte en liknande javascriptfunktion som php's sleep()´?

Nej tyvärr. setTimeout eller setInterval är det närmaste bästa alternativet.

NiehlsMedlem sedan juli 2002164 inlägg
#10

hmm..jag har försökt med setInterval och setTimer nu, men jag får det inte att fungera..kollat lite i min javascriptreferens, men jag är inte sådär underbahrt begåvad med javascript..
försökt att att kalla dem utan kod som skal exekveras, utan endast med intervallet.
t.ex:
window.setInterval('','10');
har även provat setInterval('','10');
samt setTimeout på liknande vis, utan resultat...nån som vet?

JojoxxMedlem sedan juni 20004 306 inlägg
#11

Exempel:

<script language="JavaScript" type="text/javascript">
function moveLayerAbs(Id,x,y){
	if (document.all){
		document.all[Id].style.left = x; document.all[Id].style.top = y;
	} else if (document.layers){
		document.layers[Id].left = x; document.layers[Id].top = y;
	} else if (document.getElementById){
		document.getElementById(Id).style.left = x+'px'; document.getElementById(Id).style.top = y+'px';
	}
}
var left=800;
function moveit(){
	left-=5;
	moveLayerAbs("picture",left,50);
	if (left>555) setTimeout('moveit()',10);
}
</script>
<a href="#" onclick="moveit();return false">Flytta</a>
<div id="picture" style="position:absolute;top:50px;left:800px;width:100px;">Ett lager</div>
NiehlsMedlem sedan juli 2002164 inlägg
#12

hmm.fungerade nästan..
bilden fortsatte flytta sig varje gång jag klickade på länken, så jag lade in
if(left>555) under function moveit() så fungerade det fint...tack så mkt.
finns på http://www.niehls.com/niehls_v3/ om nån vill kika

Genererad på 378 ms · cache AV · v20260730165559-full.f96bc7eb