Avatar billede hestetoften Nybegynder
04. marts 2008 - 13:04 Der er 22 kommentarer og
1 løsning

moveable div

Jeg har lavet et lille script der flytter en "div" på sitet vha. piletasterne:

kodestump:
function mover(){
var MD = event.keyCode;//MoveDirection
    if(MD == 38){//op
        man.style.posTop = man.style.posTop - 4;}
    }
}

Hvordan laver jeg det sådan at hvis "div" støder på en anden "div" så kan den ikke 'køre' igennem denne, men kun udenom ?? (vha. op,ned,venstre,højre piletast)
Avatar billede webstuff Nybegynder
04. marts 2008 - 14:28 #1
Du tjekker om div'ernes koordinater overlapper hinanden, hvis de gør, skal du ikke flytte din div.
Avatar billede hestetoften Nybegynder
04. marts 2008 - 14:36 #2
Har lavet det med en bestemt div, men hvad hvis der drejer sig om alle divs på siden
Avatar billede jokkejensen Novice
04. marts 2008 - 15:24 #3
du skal have registreret alle dine divs..

//find alle divs
var divs = document.getElementsByName("Div");
var Xcoords = new Array();
var YCoords = new Array();

//smid alle divs kordinater i arrays
for(var i = 0; i < divs.lenght; i++)
{
  if(Ikke det flytbare div)   
{
Xcoords.push(divs[i].Xcoords)
Ycoords.push(divs[i].Xcoords)
}
}

Herefter kan du i din "move" funktion, chekke om der rammes nogen.

/JJ
Avatar billede jokkejensen Novice
04. marts 2008 - 15:27 #4
Personligt ville jeg bruge noget færdigt kode, men det afhænger lidt af målet - hvis det bare er for sjov, til eget website, jamen så lav det selv.. men når der er timer der tæller er det oftes bedst at tage noget færdigt, gennemtestet kode.. (mange vil nok ikke give mig ret :) )


http://developer.yahoo.com/yui/examples/dragdrop/dd-region.html

/JJ
Avatar billede hestetoften Nybegynder
05. marts 2008 - 13:11 #5
Tak

Har fået lagt offsetTop,Left,width,height ind på alle DIV.

Men kan ikke lige regne ud hvordan jeg tjekker om jeg støder ind i dem, og hvilken DIV ?
Avatar billede jokkejensen Novice
05. marts 2008 - 13:20 #6
Så må du lige lave et 3div, til deres id.

Hver gang du rykker, må du kigge i dine arrays, og se om du rammer et andet.

Det er nok smartest at gemme left top, og right bottom coords, så har du et område, da de alle er kvadratiske..
Avatar billede jokkejensen Novice
05. marts 2008 - 13:21 #7
kan du nøjes med at sammenligne tallene og ikke skal tænke i størrelser..
Avatar billede hestetoften Nybegynder
05. marts 2008 - 13:47 #8
Her er lige en del af den kode jeg bruger til at chekke og flytte med:

function mover(){
var MD = event.keyCode;//MoveDirection
    if(MD == 38){//op
        var op = 0;
        if(parseInt(moveDir.style.posLeft)+ parseInt(moveDir.style.width) <= parseInt(ForsteDiv.style.posLeft)){
            op =1;}
        if(parseInt(moveDir.style.posLeft) >= parseInt(ForsteDiv.style.posTop +  parseInt(ForsteDiv.style.width))){   
            op = 1 ;}
        if(op == 1){
            moveDir.style.posTop = moveDir.style.posTop - speed;}
        else
        if(parseInt(moveDir.style.posTop) != parseInt(ForsteDiv.style.posTop + parseInt(ForsteDiv.style.height)))
            moveDir.style.posTop = moveDir.style.posTop - speed;}

Hvordan får jeg den til at tjekke arrays ved hver bevægelse, i stedet for at tjekke den enkelte div
Avatar billede olebole Juniormester
05. marts 2008 - 14:20 #9
<ole>

Der er ikke nogen style-properties, der hedder posLeft og posTop

/mvh
</bole>
Avatar billede hestetoften Nybegynder
06. marts 2008 - 12:27 #10
Nej det er rigtigt, men jeg bruger lige denne først.

function setFigPos(){
moveDir.style.top = 170;
moveDir.style.left = 120;
moveDir.style.height = 20;
moveDir.style.width = 20;
}

Så er der.. :-)
Avatar billede olebole Juniormester
06. marts 2008 - 16:06 #11
Nej, det er der ikke. Jeg gentager: "Der er ikke nogen style-properties, der hedder posLeft og posTop". De to properties er ganske enkelt ikke defineret i nogen somhelst officiel standard  :)

Desuden burde dine CSS-tildelinger ikke virke i nogen browser. Du burde skrive:

function setFigPos(){
moveDir.style.top = "170px";
moveDir.style.left = "120px";
moveDir.style.height = "20px";
moveDir.style.width = "20px";
}

- at din kode evt. måtte virke i IE, skyldes udelukkende en bug i IE. Der skal _altid_ enheder på style-værdier!
Avatar billede hestetoften Nybegynder
06. marts 2008 - 20:36 #12
Jeg er da ked af at de ikke defineret i nogen somhelst officiel standard. Men for mig betyder dette egentligt ikke ret meget, da de defineret eller ej virker.

Ja du har ret. det er IE der retter fejlen med de manglende px for mig.
Avatar billede olebole Juniormester
07. marts 2008 - 01:38 #13
- og det er noget sludder, at det virker. Det virker kun i IE ... netop fordi, det ikke er standardiseret.

Måske, du kunne have gavn af at gå lidt mere op i, hvad der er standardiseret kode og hvad der ikke er. Når skidtet ikke virker, kan man sjældent klare sig med smarte kommentarer  ;o)
Avatar billede hestetoften Nybegynder
09. marts 2008 - 20:49 #14
Er der ingen der har nogle bud på hvordan dette kan løses ??
Avatar billede olebole Juniormester
09. marts 2008 - 21:27 #15
Det er en større opgave, du nok skal have løst under Opgaver-kategorien, dersom nogen skulle have lyst  :)
Avatar billede hestetoften Nybegynder
10. marts 2008 - 13:17 #16
Jeg prøver lige at rode lidt mere med selv.

Tak for de hendvendelser der har været her.
Avatar billede jokkejensen Novice
10. marts 2008 - 13:27 #17
Det kræver lidt for meget at "lave" det for dig..

Jeg ville personligt selv (hvis jeg skulle lave alt fra bunden, som jeg aldrig ville kaste mig ud i) bygge det lidt mere object orienteret op.. Ellers bliver det alt for hurtigt for uskalerbart og ugennemskueligt, og browserkompabilitet kan lige pludselig blive et debug helvede.

/JJ
Avatar billede jokkejensen Novice
10. marts 2008 - 13:29 #18
altså wrap dine moveable div's ind i nogle klasser der har en leftTop egenskab og en rightbottom bestående af 2 koordinater for hver. Giv dem nogle metoder som at flytte, checke om de rammer andre osv.
Avatar billede hestetoften Nybegynder
31. marts 2008 - 12:58 #19
fik lavet med lidt brug af jokkejensens arrays, og lidt af mine egne ideer.
Jokkejensen fortjener halvdelen
Smid et svar
Tak
Avatar billede jokkejensen Novice
31. marts 2008 - 17:12 #20
Hjælp til selvhjælp :), det vil dog hjælpe andre brugere hvis du lige postede noget af den fungerende kode -> så vil de også kunne finde lidt hjælp, desuden er jeg lidt nysgerrig om resultatet :)
Avatar billede hestetoften Nybegynder
08. april 2008 - 21:39 #21
Jeg rydder lige lidt op i koden, så skal jeg nok poste den
Avatar billede jokkejensen Novice
14. april 2008 - 16:24 #22
Det behøver du ikke, skriver selv noget hø (time/resultat orienteret om man vil) :)
Avatar billede jokkejensen Novice
14. april 2008 - 16:24 #23
men tak for points.
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