2010-10-20 5 views
1

J'ai plusieurs images:changement conditionnel (si/alors) basée sur la propriété css dans jquery

<img class="photo" src="{{ img.url_small }} /> 
<img class="photo" src="{{ img.url_small }} /> 
<img class="photo" src="{{ img.url_small }} /> 

Je suis en train de changer la couleur de la bordure lorsque l'utilisateur passe sur l'image ou clique dessus:

$(".photo").click(function() { 
    $(".photo").css({"background":"white"}); 
    $(this).css({"background":"blue"}); 
}); 

$(".photo").mouseenter(function() { 
    $(this).css({"background":"green"}); 
}).mouseleave(function() { 
    $(this).css({"background":"white"}); 
}); 

(il y a une marge blanche autour de chaque image ainsi qu'un changement de fond change la frontière)

le problème est quand un utilisateur clique sur une image, il devient bleu, mais lorsque la souris est bouger de l'image, la bordure devient blanche.

J'ai essayé quelques conditionals:

$(".photo").mouseenter(function() { 
    if($(this).css("background") != "blue") { 
     $(this).css({"background":"green"}); 
    } 
}).mouseleave(function() { 
    if($(this).css("background") != "blue") { 
     $(this).css({"background":"white"}); 
    } 
}); 

mais les frontières sont encore tourné dos blanc du bleu. Comment puis-je garder la bordure bleue? Y a-t-il un moyen plus efficace de le faire?

+0

essayer d'enlever les gestionnaires d'événements de souris à partir de l'image lorsque l'on clique dessus. – akonsu

Répondre

1

N'utilisez pas javascript pour ce que vous pouvez faire en CSS. CSS prendra en charge le changement de style simple hover, puis il suffit d'ajouter une classe pour le click.

Si vous avez besoin de supporter IE6 pour le pointeur, j'envelopperais le <img> dans une balise <a>, et donnerais cela à l'arrière-plan.

Un exemple concret:http://jsbin.com/ogasa3

.photo { 
    background:white; 
} 
.photo:hover { 
    background:green; 
} 
.selected { 
    background:blue; 
} 
.selected:hover { 
    background:blue; 
} 

jQuery

$(".photo").click(function() { 
    $(".photo.selected").removeClass('selected'); 
    $(this).addClass('selected'); 
}); 
0

.hover est la façon la plus efficace de faire mouseenter, mouseleave.

Ce que vous avez vraiment besoin de faire est quand une image est cliqué ajouter une nouvelle classe à elle, comme si:

$(".photo").click(function() { 
    $(".photo").removeClass('currentImage'); 
    $(this).addClass('currentImage'); 
}); 

$(".photo").hover(function() { 
    jQuery(this).addClass('hoverImage'); 
}, function() { 
    jQuery(this).removeClass('hoverImage'); 
}); 

assurez-vous que currentImage est de style comme vous voulez:

.currentImage { 
background:blue; 
} 
.hoverImage { 
background:green; 
} 
+0

Cela fonctionne plutôt bien. C'est une bien meilleure mise en œuvre. Je n'ai pas non plus réalisé que vous pouviez assigner deux classes au même élément. Une question, pourquoi avons-nous besoin de la partie "jQuery" au lieu de simplement "$ (this)"? –

+0

J'utilise jQuery pour une raison quelconque. Je ne sais vraiment pas pourquoi. Je pense que c'était parce qu'à un certain moment j'avais une bibliothèque qui utilisait $ aussi, et j'étais paresseux, mais ça traînait :( –

+0

aussi, OUI, vous pouvez avoir autant de classes que vous voulez. Il est plus facile de gérer les DOM, WAY. –

Questions connexes