Avatar billede blod_1 Nybegynder
30. juli 2011 - 21:03 Der er 6 kommentarer og
1 løsning

Input fra keyboard med tidsbegrænsning

Jeg har en side med nogle kalmeraer på, som man kan dreje rundt.

Man kan dreje dem ved enten at trykket på nogle pile på siden, eller ved at bruge WASD på tastaturet. Mit problem er nu at når man holder knappen nede, så forsøger den jo som en gal at flytte kameraet, hvor jeg gerne vil kunne sætte noget timeout i i java scriptet som håndterer tastatur knapperne.

pt. bruger jeg prototype, som jeg slet ikke lige kan overskue at ændre i. Er der noget andet smart hvor jeg kan sætte timeout for hvor tit den skal forsøge at kalde linket som drejer kameraet, og som samtidig kan fungere med de fleste browsere?
Avatar billede olebole Juniormester
30. juli 2011 - 21:44 #1
<ole>

Hvordan ser din kode ud der, hvor du sætter event handleren på dokumentet?

/mvh
</bole>
Avatar billede blod_1 Nybegynder
30. juli 2011 - 21:47 #2
Det kan ses her http://camboy.dk/?cam=17 bruger prototype til det meste, tror jeg, men  er ikke sikker på hvor meget jeg rent faktisk bruger af det, og hvad jeg skal bruge af det...
Avatar billede olebole Juniormester
30. juli 2011 - 22:46 #3
Du kan erstatte din script blok med dette:


<script type="text/javascript">
var nKeyDelay = 1000; // 1000 msec

var setEvent = (function(){
    if (document.addEventListener) return function(elmTarg, sType, fnHndl) {
        elmTarg.addEventListener(sType, fnHndl, false);
    }
    else if (document.attachEvent) return function(elmTarg, sType, fnHndl) {
        elmTarg.attachEvent("on"+sType, fnHndl);
    }
    else return undefined;
})();
var oPausedDirs = {
    n: false,
    e: false,
    s: false,
    w: false
};
function checkKey(e) {
    var nKeyCode = (e?e:event).keyCode,
    sMoveKey = "";
    switch(nKeyCode) {
        case 119: // North
            if (oPausedDirs.n) return;
            sMoveKey = "W";
            oPausedDirs.n = true;
            setTimeout("oPausedDirs.n=false", nKeyDelay);
        break;
        case 100: // East
            if (oPausedDirs.e) return;
            sMoveKey = "D";
            oPausedDirs.e = true;
            setTimeout("oPausedDirs.e=false", nKeyDelay);
        break;
        case 115: // South
            if (oPausedDirs.s) return;
            sMoveKey = "S";
            oPausedDirs.s = true;
            setTimeout("oPausedDirs.s=false", nKeyDelay);
        break;
        case 97: // West
            if (oPausedDirs.w) return;
            sMoveKey = "A";
            oPausedDirs.w = true;
            setTimeout("oPausedDirs.w=false", nKeyDelay);
        break;
        default:
        //alert(nKeyCode)
    }
    document.getElementById("dummy").setAttribute("src", "ptz.php?cam=17&move="+sMoveKey);
}
setEvent(window, "load", function() {
    setEvent(document, "keypress", checkKey);
});
</script>


Herefter tror jeg ikke, du har noget at bruge prototype.js til
Avatar billede olebole Juniormester
30. juli 2011 - 22:52 #4
Ups =)


        default:
            //alert(nKeyCode)
            return;
    }
    document.getElementById("dummy").setAttribute("src", "ptz.php?cam=17&move="+sMoveKey);
}

Avatar billede blod_1 Nybegynder
30. juli 2011 - 22:57 #5
Fantastisk!!!! Virkede i første forsøg!

Nu, tid til at læse det igennem for at forsøge at forstå hvad der egentligt sker. :)

Smider du et svar? :)
Avatar billede olebole Juniormester
30. juli 2011 - 23:03 #6
Ellers tak, jeg samler ikke points. Læg selv et svar og accepter det, så tråden lukkes  =)
Avatar billede blod_1 Nybegynder
30. juli 2011 - 23:07 #7
Jamen så siger jeg tak for en løsning :) Tror også jeg er ved at finde ud af hvad der er hvad i det, og hvordan jeg kan ændre i det for at tilføje og fjerne ting :)

Næste projekt bliver så noget hvor jeg dynamisk kan bestemme hvor mange fps billedet skal reloade med, uden at siden skal indlæses igen. Men det er vist et andet projekt.
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