Avatar billede mapoulsen Nybegynder
21. marts 2006 - 11:03 Der er 3 kommentarer og
1 løsning

Forøg tal mens musen holdes nede

Hej Eksperten

Jeg har et script som forøger et tal så længe man trykker med musen på en knap.

HTML'en ser ca. således ud:

<img src="minus.gif" onMouseDown="startImageSizeChange(-1)" onMouseUp="stopSizeChange()" onMouseOut="stopSizeChange()" />
<img src="plus.gif" onMouseDown="startImageSizeChange(1)" onMouseUp="stopSizeChange()" onMouseOut="stopSizeChange()" />


og JavaScriptet ser ca. således ud:

function startImageSizeChange(step) {
    imageSizeChange(step);
    tid = setInterval('imageSizeChange('+step+')', 50);
}
function imageSizeChange(step) {
    size = size + step;
    refreshDimensions();
    refreshImageView();
}
function stopSizeChange() {
    clearInterval(tid);
}

Dette virker egentlig også fint nok. Problemet er når man klikker hurtigt på knapperne, mens man bevæger musen, så registrerer den ikke at man har stoppet med at trykke (onMouseUp) og fortsætter med at forøge tallet i det uendelige.

Hvordan kan jeg undgå dette? Alle forslag er velkomne!

PS: De 2 funktioner refreshDimensions() og refreshImageView() laver blot en masse udregninger og viser dem på skærmen.
Avatar billede mclemens Nybegynder
21. marts 2006 - 18:11 #1
hmm, det med at den laver problemer med onmouseup og down forstår jeg heller ikke lige :/ ... hvis du har mod på det så prøv det script her:
... hvis det også giver probs med det du nævner kan du prøve at skifte <body>
til en <body onMouseUp="stepvalue(0);">

<html><head><script type="text/javascript">

size="";
window.onload=imageSizeChange;

function stepvalue(step){
document.getElementById("scriptstate").className="scriptstate"+step;
}

function imageSizeChange(){
step=(document.getElementById("scriptstate").className.replace("scriptstate","")*1);
size=size+step;
if(step!=0){
  refreshDimensions();
  refreshImageView();}
setTimeout("imageSizeChange();",50);
}

</script></head>

<body>

<div id="scriptstate" class="scriptstate0" style="display:none;"></div>

<img src="minus.gif" onMouseDown="stepvalue(-1);" onMouseUp="stepvalue(0);" onMouseOut="stepvalue(0);" />

<img src="plus.gif" onMouseDown="stepvalue(1)" onMouseUp="stepvalue(0);" onMouseOut="stepvalue(0);" />

</body></html>
Avatar billede mapoulsen Nybegynder
21. marts 2006 - 19:45 #2
Tak for svaret. Det løste dog ikke problemet. Det er blot en anden måde at gøre det på.

Til gengæld fandt jeg selv en løsning. Problemet er at det hele styres ved onmousedown, -up og out for et billede. Man kan dog med musen tage fat i billedet og trække det (drag & drop). Så snart man har fat i billedet og trækker det bliver det ikke registreret som mousedown eller mouseup (af en eller anden mærkelig grund?).

Jeg har løst dette ved at indsætte et div-element med billedet som baggrund. Det giver samme resultat:

<div id="imageSizeMinus" style="width:110px;height:44px;background:url(gfx/minus_l.gif);display:block;float:left;" onMouseDown="startImageSizeChange(-1)" onMouseUp="stopSizeChange()" onMouseOut="stopSizeChange()"></div>
Avatar billede mclemens Nybegynder
21. marts 2006 - 19:51 #3
Så snart man har fat i billedet og trækker det bliver det ikke registreret som mousedown eller mouseup (af en eller anden mærkelig grund?).>
- Dejligt så lærte jeg også noget :)
Avatar billede mapoulsen Nybegynder
14. april 2006 - 12:00 #4
Lukker lige spørgsmålet.
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