Mon DOM ressemble à ceci:
<div id="d1">
<div class="c1">
<a href="#"><img src="img1_on.gif"></a>
<a href="#"><img src="img2_on.gif"></a>
</div>
</div>
Lorsque quelqu'un clique sur une image, je souhaite que l'image src devienne <img src="imgx_off.gif">
où x
représente le numéro d'image 1 ou 2.
Est-ce possible ou dois-je utiliser CSS pour changer les images?
Vous pouvez utiliser la fonction attr () de jQuery. Par exemple, si votre balise img
a un attribut id
de 'mon_image', procédez comme suit:
<img id="my_image" src="first.jpg"/>
Ensuite, vous pouvez changer la src
de votre image avec jQuery comme ceci:
$("#my_image").attr("src","second.jpg");
Pour attacher ceci à un événement click
, vous pouvez écrire:
$('#my_image').on({
'click': function(){
$('#my_image').attr('src','second.jpg');
}
});
Pour faire pivoter l'image, vous pouvez faire ceci:
$('img').on({
'click': function() {
var src = ($(this).attr('src') === 'img1_on.jpg')
? 'img2_on.jpg'
: 'img1_on.jpg';
$(this).attr('src', src);
}
});
Pour plus d'informations. J'essaie de définir l'attribut src avec la méthode attr dans jQuery pour une image d'annonce en utilisant la syntaxe par exemple: $("#myid").attr('src', '/images/sample.gif');
Cette solution est utile et fonctionne, mais si vous modifiez le chemin, changez également le chemin de l'image et ne fonctionne pas.
J'ai cherché à résoudre ce problème mais je n'ai rien trouvé.
La solution met le '\' au début du chemin: $("#myid").attr('src', '\images/sample.gif');
Cette astuce est très utile pour moi et j'espère que c'est utile pour les autres.
Je vais vous montrer comment changer l'image src
, de sorte que lorsque vous cliquez sur une image, celle-ci pivote sur toutes les images figurant dans votre code HTML (dans votre d1
id et c1
class. spécifiquement) ... si vous avez 2 ou plusieurs images dans votre code HTML.
Je vais également vous montrer comment nettoyer la page une fois le document prêt, afin qu'une seule image soit affichée au départ.
Le code complet
$(function() {
var $images = $("#d1 > .c1 > a").clone();
var $length = $images.length;
var $imgShow = 0;
$("#d1 > .c1").html( $("#d1 > .c1 > a:first") );
$("#d1 > .c1 > a").click(function(event) {
$(this).children().attr("src",
$("img", $images).eq(++$imgShow % $length).attr("src") );
event.preventDefault();
});
});
La ventilation
Créez une copie des liens contenant les images (remarque: vous pouvez également utiliser l'attribut href des liens pour ajouter des fonctionnalités ... par exemple affiche le lien de travail ci-dessous chaque image):
var $images = $("#d1 > .c1 > a").clone(); ;
Vérifiez le nombre d'images contenues dans le code HTML et créez une variable pour déterminer quelle image est affichée:
var $length = $images.length;
var $imgShow = 0;
Modifiez le code HTML du document de sorte que uniquement la première image soit affichée. Supprimer toutes les autres images.
$("#d1 > .c1").html( $("#d1 > .c1 > a:first") );
Lier une fonction à manipuler lorsque l'utilisateur clique sur le lien de l'image.
$("#d1 > .c1 > a").click(function(event) {
$(this).children().attr("src", $("img", $images).eq(++$imgShow % $length).attr("src") );
event.preventDefault();
});
Le cœur du code ci-dessus utilise ++$imgShow % $length
pour faire défiler l'objet jQuery contenant les images. ++$imgShow % $length
augmente d'abord notre compteur de un, puis modifie ce nombre avec combien d'images il y a. Ceci maintiendra l'index résultant cyclant de 0
à length-1
, qui sont les index de l'objet $images
. Cela signifie que ce code fonctionnera avec 2, 3, 5, 10 ou 100 images ... en parcourant chaque image dans l'ordre et en redémarrant à la première image lorsque la dernière image est atteinte.
De plus, .attr()
est utilisé pour obtenir et définir l'attribut "src" des images. Pour choisir des éléments parmi l’objet $images
, je règle $images
comme contexte jQuery en utilisant la forme $(selector, context)
. Ensuite, j'utilise .eq()
pour sélectionner uniquement l'élément avec l'index spécifique qui m'intéresse.
Vous pouvez également stocker les src
s dans un tableau.
exemple avec jsFiddle avec 3 images
Et voici comment incorporer les hrefs des balises d'ancrage autour des images:
exemple de jsFiddle
SI il n’ya pas que jQuery ou d’autres frameworks destructeurs de ressources - beaucoup de ko à télécharger à chaque fois par chaque utilisateur pour une simple astuce - mais aussi du JavaScript natif (!):
<img src="img1_on.jpg"
onclick="this.src=this.src.match(/_on/)?'img1_off.jpg':'img1_on.jpg';">
<img src="img2_on.jpg"
onclick="this.src=this.src.match(/_on/)?'img2_off.jpg':'img2_on.jpg';">
Cela peut être écrit en général et plus élégant:
<html>
<head>
<script>
function switchImg(img){
img.src = img.src.match(/_on/) ?
img.src.replace(/_on/, "_off") :
img.src.replace(/_off/, "_on");
}
</script>
</head>
<body>
<img src="img1_on.jpg" onclick="switchImg(this)">
<img src="img2_on.jpg" onclick="switchImg(this)">
</body>
</html>
J'espère que cela peut fonctionner
<img id="dummyimage" src="http://dummyimage.com/450x255/" alt="" />
<button id="changeSize">Change Size</button>
$(document).ready(function() {
var flag = 0;
$("button#changeSize").click(function() {
if (flag == 0) {
$("#dummyimage").attr("src", "http://dummyimage.com/250x155/");
flag = 1;
} else if (flag == 1) {
$("#dummyimage").attr("src", "http://dummyimage.com/450x255/");
flag = 0;
}
});
});
Vous pouvez également faire cela avec jQuery de cette façon:
$(".c1 img").click(function(){
$(this).attr('src','/new/image/src.jpg');
});
Vous pouvez avoir une condition s'il existe plusieurs états pour la source d'image.
J'ai eu le même problème en essayant d'appeler le bouton re captcha. Après quelques recherches, la fonction ci-dessous fonctionne maintenant dans la plupart des navigateurs célèbres (chrome, Firefox, IE, Edge, ...):
function recaptcha(theUrl) {
$.get(theUrl, function(data, status){});
$("#captcha-img").attr('src', "");
setTimeout(function(){
$("#captcha-img").attr('src', "captcha?"+new Date().getTime());
}, 0);
}
'theUrl' est utilisé pour rendre une nouvelle image captcha et peut être ignoré dans votre cas. Le point le plus important est de générer une nouvelle URL qui oblige FF et IE à restituer l'image.
Changer la source de l'image avec jQuery click()
élément:
<img class="letstalk btn" src="images/chatbuble.png" />
code:
$(".letstalk").click(function(){
var newsrc;
if($(this).attr("src")=="/images/chatbuble.png")
{
newsrc="/images/closechat.png";
$(this).attr("src", newsrc);
}
else
{
newsrc="/images/chatbuble.png";
$(this).attr("src", newsrc);
}
});
Vous devriez ajouter l'attribut id à votre balise d'image, comme ceci:
<div id="d1">
<div class="c1">
<a href="#"><img id="img1" src="img1_on.gif"></a>
<a href="#"><img id="img2" src="img2_on.gif"></a>
</div>
</div>
alors vous pouvez utiliser ce code pour changer la source des images:
$(document).ready(function () {
doSomething();
$("#img1").attr({ "src": "logo-ex-7.png" });
$("#img2").attr({ "src": "logo-ex-8.png" });
});
C'est un moyen garanti de le faire en vanille (ou simplement pur) JavaScript:
var picurl = 'pictures/Apple.png';
document.getElementById("image_id").src=picurl;
J'ai le même émerveillement aujourd'hui, je l'ai fait de cette façon:
//<img src="actual.png" alt="myImage" class=myClass>
$('.myClass').attr('src','').promise().done(function() {
$(this).attr('src','img/new.png');
});
Juste un ajout, pour le rendre encore plus petit:
$('#imgId').click(function(){
$(this).attr("src",$(this).attr('src') == 'img1_on.gif' ? 'img1_off.gif':'img1_on.gif');
});
Il n'y a aucun moyen de changer la source de l'image avec CSS.
La seule façon possible est d'utiliser Javascript ou n'importe quelle bibliothèque Javascript comme jQuery .
Les images sont à l'intérieur d'une div et il n'y a pas de class
ou id
avec cette image.
Donc, la logique sera sélectionner les éléments à l'intérieur de la div
où les images sont situées.
Sélectionnez ensuite tous les éléments d’image avec boucle et modifiez l’image src avec Javascript / jQuery .
$(document).ready(function()
{
$("button").click(function()
{
$("#d1 .c1 a").each(function()
{
$(this).children('img').attr('src', 'https://www.gravatar.com/avatar/e56672acdbce5d9eda58a178ade59ffe');
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<div id="d1">
<div class="c1">
<a href="#"><img src="img1_on.gif"></a>
<a href="#"><img src="img2_on.gif"></a>
</div>
</div>
<button>Change The Images</button>