2010-06-04 11 views
12

Tengo una gran tabla con cada celda de 25x25 y un div dentro de cada uno. Cada div tiene la clase de "nodo" y se aplica un color de fondo a todos ellos. Estoy en el proceso de escribir un código jQuery que cambiará el color de cada div cuando el mouse lo sobrepase mientras el botón del mouse está presionado.mouseover while mousedown

Actualmente lo tengo así que funciona cuando muevo el mouse, pero solo quiero que funcione cuando el botón del mouse también. He intentado muchas maneras diferentes de hacerlo funcionar, pero hasta ahora no he mirado, a continuación está mi código actual.

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

Respuesta

17

intentar algo como esto:

$(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:

Es posible que desee hacer una por separado mousedown en .node para la selección de elementos individuales.

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

EDIT:

Aquí es un método alternativo utilizando bind y 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! Funciona perfectamente. – Stanni

+1

+1 - ¿Por qué no hay un método para verificar 'mousedown' (y otros estados ... los tenemos para' alt', 'ctrl', etc ... ¿por qué no mouse?) Está más allá de mí, incluso en DOM2 a menos que me haya perdido algo en la especificación. –

+0

@Stanni - Como Nick Craver había notado, si el 'mousedown' comienza sobre un elemento' .node', ese no tendrá el fondo. ¿Es adecuado para ti? – user113716

-2

Bueno, si el botón del ratón se pone, cambia el fondo, y si sube, cambia de nuevo ...

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

Es esto lo que está buscando?

Más información en http://api.jquery.com/mousedown/