1

J'essaye d'exécuter une fonction pendant que la mousedown mais pour la vie de moi je ne peux pas l'obtenir au travail tout en maintenant le bas mais tout fonctionne en cliquant juste. J'essaie de changer la couleur des pays sur une carte pendant que je la maintiens. voici mon codeWhile mousedown JS

var int; 
    var mouseStillDown = false; 

     function mousedown(geography) 
     {  console.log('mousedown '+mousedownID); 
      mouseStillDown = true; 
      int = setInterval(performWhileMouseDown(geography), 100); 
     } 



    function mouseup() 
    { 
     clearInterval(int); 
     mouseStillDown = false; 
    } 

    function mouseout() 
    { 
     clearInterval(int); 
    } 

     function performWhileMouseDown(geography) 
     { 
      if (!mouseStillDown) 
       {console.log('error');} 

      if (mouseStillDown) { 
      if(data[geography.id]) 
      { 
       data[geography.id] ++; 
      }else 
       { 
       data[geography.id] = 1; 
       } 
      var m = {};           
      m[geography.id] = color(data[geography.id]); 
      map.updateChoropleth(m); 
       } 

      /* if (mouseStillDown) 
       { setInterval(performWhileMouseDown(geography), 100); }*/ 
     } 

Répondre

1

Vous pouvez essayer d'utiliser à la place mousemove, mousedown ne fera que le feu une fois.

var mouseDown = false; 
window.addEventListener('mousedown', function() { mouseDown = true }) 
window.addEventListener('mouseup', function() { mouseDown = false }) 
window.addEventListener('mousemove', function() { 
    if (!mouseDown) { 
    return; 
    } 
    // perform while mouse is moving 
}) 
0

voici ce qui a fonctionné pour moi

var timeout ; 
function mouseDown(geography){ 

    timeout = setInterval(function(){ 


      if(data[geography.id]){ 

       data[geography.id] ++; 
      }else{ 
       data[geography.id] = 1; 
      } 
      var m = {};           
      m[geography.id] = color(data[geography.id]); 
      map.updateChoropleth(m);}, 100); 

    return false; 
} 


function mouseUp(geography){ 

clearInterval(timeout); 
    return false; 
}