Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[FF] onmousemove en event.button

Pagina: 1
Acties:
  • 130 views sinds 30-01-2008
  • Reageer

  • Mephix
  • Registratie: Augustus 2001
  • Laatst online: 25-11 20:41
Ik ben op het moment bezig met een soort slider control en moet daarom onmousemove bepalen of de left mouse button ingedrukt is of niet.

De volgende code werkt in IE, maar niet in FF (v2.0.0.11).

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>test</title>
    <script type="text/javascript">
    function mousemove(e) {
        document.getElementById('div2').innerHTML = e.button;
    }
    </script>
</head>
<body>
<div id="div1" style="border: 1px solid #000000; width: 100px; height: 100px;" onmousemove="mousemove(event);"></div>
<div id="div2"></div>
</body>
</html>


Toch zijn er verschillende voorbeelden op het internet te vinden, die op dezelfde manier werken. Kan iemand bovenstaande testen op FF of weet iemand waarom dit niet werkt ?

  • Setragasj
  • Registratie: Augustus 2001
  • Laatst online: 18-11 20:30

Setragasj

is using radars to communicate

Wat is e.button?

<Typ een persoonlijk bericht>


Verwijderd

button: http://www.w3.org/TR/DOM-...ventgroupings-mouseevents

maf idd, nooit mee te maken gehad. Hij komt wel door onmousedown, dus wellicht kan je die opvangen en opslaan en clearen onmouseup
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>test</title>
    <script type="text/javascript">
    function mouseaction(e) {
        document.getElementById('div2').innerHTML = e.button;
    }
    </script>
</head>
<body>
<div id="div1" style="border: 1px solid #000000; width: 100px; height: 100px;" onmousedown="mouseaction(event);"></div>
<div id="div2"></div>
</body>
</html>

[ Voor 55% gewijzigd door Verwijderd op 21-12-2007 11:55 ]


  • Mephix
  • Registratie: Augustus 2001
  • Laatst online: 25-11 20:41
Verwijderd schreef op vrijdag 21 december 2007 @ 11:53:
button: http://www.w3.org/TR/DOM-...ventgroupings-mouseevents

maf idd, nooit mee te maken gehad. Hij komt wel door onmousedown, dus wellicht kan je die opvangen en opslaan en clearen onmouseup
Dat is geen goede oplossing, omdat ik niet zeker weet of ik wel een mousedown of mouseup event krijg. Stel ik handle een mousedown op die div... ik zet mouseIsDown op true ofso en verschuif de div tijdens het onmouseover event.

Nu hou ik de muisknop ingedrukt en ik ga met mn muis van de div af.. mouseIsDown blijft dus true. Buiten de div laat ik mn muisknop los en ga vervolgens weer terug naar de div... aangezien mouseIsDown niet gereset is, blijf ik dus de slider verschuiven.

Alternatief: onmouseup op hele document, is deels een oplossing, aangezien ik de muisknop ook buiten de browser zou kunnen loslaten en dus geen onmouseup op de body krijg.

Alternatief2: onmouseout van de div gebruiken en daar de mouseIsDown ook resetten, geeft een minder goede userinterface, aangezien men dan de muis precies op de slider moet houden om hem te kunnen verschuiven.

Alternatief3 ???
During mouse events caused by the depression or release of a mouse button, button is used to indicate which mouse button changed state
Nu is zo dat bij een mousemove (in tegenstelling tot mouseup, mousedown, mouseclick) het indrukken of loslaten van de muisknop niet de trigger van het event is... daarom wordt waarschijnlijk ook de state van de buttons niet doorgegeven. Dit zou dus betekeken dat ik ergens op een global niveau (window ofso) de buttonstate zou moeten opvragen, of inderdaad de mousedown opslaan in een soort leftMouseButtonIsDown variabele.

[ Voor 19% gewijzigd door Mephix op 21-12-2007 14:12 ]


  • Mephix
  • Registratie: Augustus 2001
  • Laatst online: 25-11 20:41
D'r was een tijd dat hier alleen tweakers kwamen 8)7

<ontopic>

Er is dus geen manier om de button states op te vragen in FF anders dan de events die getriggered worden door een change in buttonstate (de click, mousedown, mouseup). M.a.w. er is voor zover ik kan vinden geen manier om de buttonstate in de mousemove op te vragen.

Beste alternatief tot nu toe is dan denk ik toch het opslaan van de state in een variabelen in de mousedown en mouseup, met het risico dat die variabele niet overeenkomt met de actuele button state, aangezien je op sommige manier een mousedown of mouseup event kan missen.

Enkele refs:

http://www.w3.org/TR/DOM-...ventgroupings-mouseevents
http://adamplatti.net/blo...ntbutton-for-every-event/
http://www.webreference.c...ascript/mk/column2/3.html

[ Voor 68% gewijzigd door Mephix op 21-12-2007 14:41 ]


  • Setragasj
  • Registratie: Augustus 2001
  • Laatst online: 18-11 20:30

Setragasj

is using radars to communicate

Mephix schreef op vrijdag 21 december 2007 @ 14:38:
[...]

D'r was een tijd dat hier alleen tweakers kwamen 8)7
offtopic:
Ik heb het simpelweg nog nooit gebruikt en ik ken niet alles uit mn hoofd :) Sorry :>

<Typ een persoonlijk bericht>


  • disjfa
  • Registratie: April 2001
  • Laatst online: 04-11 11:05

disjfa

be

Setragasj schreef op vrijdag 21 december 2007 @ 15:54:
[...]
offtopic:
Ik heb het simpelweg nog nooit gebruikt en ik ken niet alles uit mn hoofd :) Sorry :>
offtopic:
Dan lees je het toch even na. Er bestaan dingen als zoekmachines :)

disjfa - disj·fa (meneer)
disjfa.nl


  • dB90
  • Registratie: Oktober 2004
  • Laatst online: 04-10 00:10
JavaScript:
1
2
e = e || window.event; 
// e is je event object


Werkt zoiets niet? :?

Webberry Webdevelopment


  • Mephix
  • Registratie: Augustus 2001
  • Laatst online: 25-11 20:41
dB90 schreef op vrijdag 21 december 2007 @ 16:43:
JavaScript:
1
2
e = e || window.event; 
// e is je event object


Werkt zoiets niet? :?
Toch nog ff een antwoord.. nej, dat werkt helaas niet. Je krijgt wel keurig je event object, evenals in de code die ik gepost had, maar e.button klopt dus niet met de button van de muis die je ingedrukt hebt, simpelweg omdat e.button alleen meegestuurd wordt als het event ook daadwerkelijk door een muisklik wordt getriggerd.

Maargoed, de methode om onmousedown en onmouseup de status van de button te onthouden werkt redelijk. Enige nadeel is dus dat als iemand zijn muis indrukt en vervolgens van de div af beweegt, de status blijft hangen. Is wel enigzins op te lossen met een onmouseout, maar helemaal netjes is het niet.
Pagina: 1