Avatar billede dr_nielsen Nybegynder
15. april 2003 - 20:57 Der er 16 kommentarer og
1 løsning

flytte element diagonalt

Jeg ønsker en funktionalitet, der kan flytte et element til en koordinat i hvilken som helst retning og gerne på tid.

somebody have that package?

/Nielsen
Avatar billede olebole Juniormester
16. april 2003 - 14:58 #1
<ole>

Sparsomme info, men princippet er som følger:

<script type="text/JavaScript">
var speed = 10;
function pI(s) {
    return parseInt(s);
}
function anim(x,y) {
    var o = document.getElementById("ib");
    o.style.left = (pI(o.style.left)<(x-speed))? pI(o.style.left) + speed + "px" : x + "px";
    o.style.top = (pI(o.style.top)<(y-speed))? pI(o.style.top) + speed + "px" : y + "px";
    if (pI(o.style.left)!=x || pI(o.style.top)!=y) setTimeout("anim("+x+","+y+")",40);
}
</script>

<div id="ib" style="position:absolute;left:30px;top:50px;border:1px solid red">blabla</div>

/mvh
</bole>
Avatar billede dr_nielsen Nybegynder
16. april 2003 - 15:07 #2
super, Men den laver først et diagonalt ryk og derefter et vertikalt.
jeg brugte funktionen således:
<a href="#" onclick="anim(100,200)">asasa</a>   

Er der en chance for at rykket kan ske uden det sidste vertikale ryk

/Nielsen
Avatar billede dr_nielsen Nybegynder
16. april 2003 - 15:09 #3
OK, got it udskiftede || med && i denne:
if (pI(o.style.left)!=x || pI(o.style.top)!=y) setTimeout("anim("+x+","+y+")",40);

Thanks alot, det er nøjagtig hvad jeg skulle bruge
/Nielsen
Avatar billede olebole Juniormester
16. april 2003 - 15:31 #4
Det går helt galt, hvis du udskifter || med &&. Så stopper animationen jo, når blot én af koordinaterne opfylder kravet  :)
Avatar billede dr_nielsen Nybegynder
16. april 2003 - 15:41 #5
Ja, det har du ret i, har du et forslag
/Nielsen
Avatar billede olebole Juniormester
16. april 2003 - 15:46 #6
Ja, at du ikke retter det  :)
Avatar billede dr_nielsen Nybegynder
16. april 2003 - 15:48 #7
LOL, Men så opstår problemet som jeg beskriver i denne kommentar:
16/04-2003 15:07:26
Avatar billede olebole Juniormester
16. april 2003 - 20:06 #8
Oooops ..... den havde jeg overset  :D
Prøv det her:

<script type="text/JavaScript">
var dX, dY, iX, iY, steps, numSteps = 100;
function pI(s) {
    return parseInt(s);
}
function anim(x,y) {
    var o = document.getElementById("ib");
    if (x && y) {
        iX = pI(o.style.left);
        iY = pI(o.style.top);
        dX = (x-iX)/numSteps;
        dY = (y-iY)/numSteps;
        steps = 0;
    }
    steps++;
    o.style.left = (dX*steps) + iX + "px";
    o.style.top = (dY*steps) + iY + "px";
    if (steps<numSteps) window.timer = setTimeout("anim()",20);
}
</script>

<div id="ib" style="position:absolute;left:30px;top:50px;border:1px solid red">blabla</div>

<button onclick="anim(500,300)">TEST</button>
Avatar billede olebole Juniormester
16. april 2003 - 20:13 #9
... og selvfølgelig er der ingen grund til at blive ved med at kalde elementet:

var o, dX, dY, iX, iY, steps, numSteps = 100;

og:

function anim(x,y) {
    if (x && y) {
    o = document.getElementById("ib");
    iX = pI(o.style.left);
    iY = pI(o.style.top);
    dX = (x-iX)/numSteps;
    dY = (y-iY)/numSteps;
    steps = 0;
    }
    steps++;
    o.style.left = (dX*steps) + iX + "px";
    o.style.top = (dY*steps) + iY + "px";
    if (steps<numSteps) window.timer = setTimeout("anim()",20);
}
Avatar billede olebole Juniormester
16. april 2003 - 20:14 #10
hov ... hvad skete der med indrykningen .... ?!??!!  :D
Avatar billede dr_nielsen Nybegynder
21. april 2003 - 18:29 #11
Exactly ;) thanks, answer please
Avatar billede dr_nielsen Nybegynder
22. april 2003 - 06:49 #12
lige et bonus spm..
Hvis jeg samtidig vil scalere elementet fra feks 200 til 20px i samme forløb som animationen sker, har du så endnu et bud.
:)
Avatar billede dr_nielsen Nybegynder
22. april 2003 - 09:22 #13
fik den løst simpelt:
o.style.width = parseInt(o.offsetWidth) - 4 + 'px';
o.style.height = parseInt(o.offsetHeight) - 4 + 'px';

:)
Avatar billede olebole Juniormester
22. april 2003 - 14:24 #14
yups .... og da vi i forvejen har lavet et alias for parseInt(), kan du skrive:
  o.style.width = pI(o.offsetWidth) - 4 + 'px';
  o.style.height = pI(o.offsetHeight) - 4 + 'px';
/mvh
Avatar billede dr_nielsen Nybegynder
22. april 2003 - 17:15 #15
u right, men skal du aldrig ha points :)
Avatar billede olebole Juniormester
22. april 2003 - 17:52 #16
Jamen, jeg har allerede fået, tak  ;o)
Udfor min post (16/04-2003 14:58:21) står der da i hvert fald, at jeg er blevet begavet med et passende antal points  :)
/mvh
Avatar billede dr_nielsen Nybegynder
23. april 2003 - 06:35 #17
ok jeg sover videre så...
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