Avatar billede mikkelk Nybegynder
10. april 2004 - 15:59 Der er 8 kommentarer og
1 løsning

Flytbare kasser

Jeg har lavet et lille script, hvor man kan flytte nogle kasser rundt og derefter vil de, når man slipper dem, placere sig i nogle felter i en tabel - hvis feltet er tomt.

Jeg har to problemer som jeg gerne vil have lidt hjælp til at løse(er ny indenfor javascript, så lidt grundige forklaringer vil være rart).

1. Det virker som om kasserne ikke altid placerer sig som de skal, oftest hvis man placerer den ind over en anden kasse, så bliver den liggende sådan midt i det hele.

2. Det er lidt omstændigt med en ny funktion til hver kasse der skal kunne flyttes, men jeg kan simpelt hen ikke få det til at virke med en generel funktion? problemet opstår vidst ved linien:

document.onmousemove = moveMoveBox3;

Hvor jeg ikke kan få det til at virke med et id felt istedet, altså noget a'la:

document.onmousemove = moveMoveBox(id);

Her følger hele scriptet:


<html>
<head>
    <title>Nyt dokument</title>
<script>
var felt1,felt2,felt3,felt4,felt5,felt6
felt = new Array();
for(i=1;i<7;i++){
    felt[i] = 0;
}

function moveMoveBox1(){
    moveBox = document.getElementById("moveBox1")
    if(initialized==true){
        moveBox.style.pixelLeft=tempX+event.clientX-X;
        moveBox.style.pixelTop=tempY+event.clientY-Y;
        return false;
    }
}
function moveMoveBox2(){
    moveBox = document.getElementById("moveBox2")
    if(initialized==true){
        moveBox.style.pixelLeft=tempX+event.clientX-X;
        moveBox.style.pixelTop=tempY+event.clientY-Y;
        return false;
    }
}
function moveMoveBox3(){
    moveBox = document.getElementById("moveBox3")
    if(initialized==true){
        moveBox.style.pixelLeft=tempX+event.clientX-X;
        moveBox.style.pixelTop=tempY+event.clientY-Y;
        return false;
    }
}
function  initXY(id){
    moveBox = document.getElementById(id)
    X=event.clientX;
    Y=event.clientY;
        document.body.onselectstart=new Function("return false")
    tempX=moveBox.style.pixelLeft;
    tempY=moveBox.style.pixelTop;
    initialized=true;
    if(id=='moveBox1'){
        document.onmousemove = moveMoveBox1;
    }
    if(id=='moveBox2'){
        document.onmousemove = moveMoveBox2;
    }
    if(id=='moveBox3'){
        document.onmousemove = moveMoveBox3;
    }
}
function disable(id){
    for (i=1; i<7; i++) {
        if(felt[i] == id){
            felt[i] = 0;
        }
    }
    moveBox = document.getElementById(id)
    document.body.onselectstart=new Function("return true")
    initialized=false;
    tempX=moveBox.style.pixelLeft;
    if(tempX <= 320){
        tempX = 252;
    }
    if(tempX > 320){
        tempX = 403;
    }
    tempY=moveBox.style.pixelTop;
    if(tempY >= 407){
        if(tempX == 252 && felt[1] == 0){
            felt[1] = id;
            tempY = 511;
        }
        else{
            if(tempX == 403 && felt[2] == 0){
                tempY = 511;
                felt[2] = id;
            }
            else{
                tempX = 0;   
                tempY = 0;
            }
        }
    }
    if(tempY >= 202 && tempY < 407 ){
        if(tempX == 252 && felt[3] == 0){
            felt[3] = id;
            tempY = 308;
        }
        else{
            if(tempX == 403 && felt[4] == 0){
                tempY = 308;
                felt[4] = id;
            }
            else{
                tempX = 0;   
                tempY = 0;
            }
        }
    }
    if(tempY < 202){
        if(tempX == 252 && felt[5] == 0){
            felt[5] = id;
            tempY = 104;
        }
        else{
            if(tempX == 403 && felt[6] == 0){
                tempY = 104;
                felt[6] = id;
            }
            else{
                tempX = 0;
                tempY = 0;
            }
        }
    }
    moveBox.style.pixelLeft = tempX;
    moveBox.style.pixelTop = tempY;
}
document.onmouseup=disable;
</script>
</head>

<body>
<div id='moveBox1' style='position:absolute;left:0;top:0;visibility:visible;z-index:4;' OnMouseDown="initXY('moveBox1');" OnMouseUp="disable('moveBox1');">
    <table cellspacing="0" cellpadding="0" width="148">
        <tr>
            <td bgcolor="#000000" height="200">
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b><br>
            </td>
        </tr>
    </table>
</div>
<div id='moveBox2' style='position:absolute;left:0;top:210;visibility:visible;z-index:4;' OnMouseDown="initXY('moveBox2');" OnMouseUp="disable('moveBox2');">
    <table cellspacing="0" cellpadding="0" width="148">
        <tr>
            <td bgcolor="#000000" height="200">
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b><br>
            </td>
        </tr>
    </table>
</div>
<div id='moveBox3' style='position:absolute;left:0;top:420;visibility:visible;z-index:4;' OnMouseDown="initXY('moveBox3');" OnMouseUp="disable('moveBox3');">
    <table cellspacing="0" cellpadding="0" width="148">
        <tr>
            <td bgcolor="#000000" height="200">
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b><br>
            </td>
        </tr>
    </table>
</div>

<div style="position:absolute;left:250;top:100;visibility:visible">
<table width="304" border="1">
    <tr>
        <td height="202" width="152">&nbsp;</td>
        <td height="202" width="152">&nbsp;</td>
    </tr>
    <tr>
        <td height="202" width="152">&nbsp;</td>
        <td height="202" width="152">&nbsp;</td>
    </tr>
    <tr>
        <td height="202" width="152">&nbsp;</td>
        <td height="202" width="152">&nbsp;</td>
    </tr>
</table>
</div>
</body>
</html>
Avatar billede mikkelk Nybegynder
10. april 2004 - 16:00 #1
Scriptet skal på sigt bruges til et system hvor brugerne får mulighed for at opbygge deres egen forside af forskellige elementer.
Avatar billede mikkelk Nybegynder
12. april 2004 - 11:12 #2
Hmmm...det er ikke meget hjælp man kan få til det her...
Avatar billede mikkelk Nybegynder
25. april 2004 - 22:49 #3
lukker
Avatar billede olebole Juniormester
25. april 2004 - 23:26 #4
<ole>

Det skyldes nok, du selv skriver, du er ny indenfor JS - og har kastet dig ud i noget, der kræver en del kendskab til JS for at få til at lykkes. Det betyder formodentlig, at en svarer skal lave et færsigt script til dig - hvilket de færreste nok har lyst til  :)

Prøv at lære noget mere JS, der passer til dit niveau - så vil du efterhånden lære at kode mere komplekse ting  ;o)

/mvh
</bole>
Avatar billede mikkelk Nybegynder
25. april 2004 - 23:31 #5
Hmm...tja...muligvis, men har svært ved at se hvorfor der ikke er en eneste der har kastet en kommentar... men ok..

Du kunne vel ikke blot sig mig hvor jeg f.eks. kunne læse lidt mere om brugen af f.eks.

document.onmousemove
?
Avatar billede olebole Juniormester
26. april 2004 - 00:44 #6
Det er det, der er problemet - da du ikke ved så meget om JS, forstår du formodentlig ikke, at der ikke er noget, man kan kalde 'brugen af document.onmousemove'. Der er i hundredevis af måder at bruge onmousemove-event'en på. En søgning på 'onmousemove' på Google returnerer 60.500 forskellige sider  :)

Vil man gerne være automekaniker, er det en rigtig god idé at lære at finde rundt i topnøglesættet, inden man vil igang med at bygge en Ferrari  ;o)
Jeg tror stadig, du skal starte et helt andet sted.
/mvh
Avatar billede mikkelk Nybegynder
26. april 2004 - 15:03 #7
:-) Ja, ok...fair nok, det er jeg som sådan godt klar over. Men som jeg har forstået det, kald mig bare dum, så anvendes onmousemove-event'en anderledes end så mange andre events(onmouseover, onclick osv.) Og der hvor jeg vil hen, er måske lidt information om hvordan sådanne events fungerer. En henvisning til en artikel, bog, kildekode etwas. Jeg er ligeglad - er ikke interesseret i at få et færdigt script jeg kan kopiere, er skam bare interesseret i at lære lidt mere. Så kan det godt være at jeg har kastet mig over noget uoverskueligt, men det er sådan set også mest af alt for at prøve mig lidt frem, med noget jeg synes var sjovt at få til at fungere - og jeg er da nået et stykke med det script.

Men hvis du mener jeg bør starte et andet sted, hvad så med en henvisning til hvor du synes jeg skal starte? Har pløjet mig delvist igennem en enkelt begynderbog(JavaScript-bogen af Michael Moncur).
Avatar billede olebole Juniormester
26. april 2004 - 15:31 #8
I princippet fungerer den ikke anderledes. Du kan prøve denne i IE:

Musens koordinater:
<div id="ib"></div>

<script type="text/JavaScript">
function myMove() {
    document.getElementById("ib").innerHTML = event.clientX + "," + event.clientY;
}
document.onmousemove = myMove;
</script>
Avatar billede mikkelk Nybegynder
26. april 2004 - 15:36 #9
Hvordan er det så... man får problemer hvis man skriver:
document.onmousemove = myMove('ID');

Hvad skyldes det?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

Seneste spørgsmål Seneste aktivitet
I går 10:21 Ny printer, men hvilken Af mort1 i Printere
13/0819:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging