2010-06-04 16 views
12

J'ai une grande table avec chaque cellule étant 25x25 et un div à l'intérieur de chacun. Chaque div a la classe "node" et une couleur de fond leur est appliquée. Je suis en train d'écrire du code jQuery qui va changer la couleur de chaque div quand la souris le survole alors que le bouton de la souris est enfoncé. Je l'ai actuellement pour que ça fonctionne quand je passe la souris, mais je veux seulement que ça marche quand le bouton de la souris est enfoncé. J'ai essayé beaucoup de manières différentes de l'obtenir pour fonctionner mais jusqu'ici je n'ai eu aucun regard, ci-dessous est mon code actuel.mouseover while mousedown

$(document).ready(function(){ 
    $(".node").mouseover(function(){ 
    $(this).css({background:"#333333"}); 
}); 
}); 

Répondre

17

Essayez quelque chose comme ceci:

$(document).ready(function(){ 

    var isDown = false; // Tracks status of mouse button 

    $(document).mousedown(function() { 
    isDown = true;  // When mouse goes down, set isDown to true 
    }) 
    .mouseup(function() { 
    isDown = false; // When mouse goes up, set isDown to false 
    }); 

    $(".node").mouseover(function(){ 
    if(isDown) {  // Only change css if mouse is down 
     $(this).css({background:"#333333"}); 
    } 
    }); 
}); 

EDIT:

Vous pouvez faire un mousedown distinct sur .node pour les sélections individuelles d'article.

$('.node').mousedown(function() { 
    $(this).css({background:"#333333"}); 
    }); 

EDIT:

est ici une méthode alternative à l'aide bind et unbind.

$(document).mousedown(function() { 
     $(".node").bind('mouseover',function(){ 
      $(this).css({background:"#333333"}); 
     }); 
    }) 
    .mouseup(function() { 
    $(".node").unbind('mouseover'); 
    }); 

    $('.node').mousedown(function() { 
    $(this).css({background:"#333333"}); 
    }); 
+0

Thank-you Patrick! Fonctionne parfaitement. – Stanni

+1

+1 - Pourquoi il n'y a pas de méthode pour vérifier 'mousedown' (et d'autres états ... nous les avons pour' alt', 'ctrl', etc ... pourquoi pas la souris?) Me dépasse, même dans DOM2 sauf si j'ai manqué quelque chose dans la spécification. –

+0

@Stanni - Comme Nick Craver l'a noté, si le 'mousedown' commence par un élément' .node', celui-ci n'obtiendra pas l'arrière-plan. Est-ce que cela vous convient? – user113716

-2

Eh bien, si le bouton de la souris diminue, change le fond, et si monte, change de nouveau ...

$(".node").mouseup(function(){ 
    $(this).css({background:'#cccccc'}); 
}).mousedown(function(){ 
    $(this).css({background:'#333333'}); 
}); 

Est-ce que vous cherchez?

En savoir plus dans http://api.jquery.com/mousedown/