Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I toggle between 2 images

Tags:

jquery

Im trying to use this code to toggle between a play and pause button but it doesn't seem to be working. How can I get it toggle between the 2 images when the are clicked

http://jsfiddle.net/aFzG9/1/

$("#infoToggler").click(function()
{
    if($(this).html() == "<img src="http://tympanus.net/PausePlay/images/play.png" width="60px" height="60px"/>")
    {
        $(this).html("<img src="http://maraa.in/wp-content/uploads/2011/09/pause-in-times-of-conflict.png width="60px" height="60px"/>");
    }
    else
    {
        $(this).html("<img src="http://tympanus.net/PausePlay/images/play.png" width="60px" height="60px"/>");
    }
});

Thanks

like image 536
Dan Farrell Avatar asked May 05 '12 13:05

Dan Farrell


People also ask

How do I toggle between two images in jquery?

You can use the . toggle() function.


2 Answers

Pure HTML/CSS

label.tog > input {
  display: none; /* Hide the checkbox */
}

label.tog > input + span {
  text-indent: -9000px; /* Make text Accessible but not visible */
  display: inline-block;
  width: 24px;
  height: 24px;
  background: center / contain no-repeat url("//i.stack.imgur.com/gmP6V.png"); /*Play*/
}

label.tog > input:checked + span {
  background-image: url("//i.stack.imgur.com/ciXLl.png"); /*Pause*/
}
<label class="tog">
	  <input type="checkbox" checked>
	  <span>Button Play Pause</span>
</label>

Toggle inner span's images using jQuery

Useful cause there's no new request to the server to load images:

<span class="tog">
   <img src="play.png">
   <img src="pause.png" style="display:none;">
</span>

$(".tog").click(function(){
  $('img',this).toggle();
});

Or, let's say we have this HTML and the .tog image selector:

<img class="tog" src="play.png"/>

Using Array.prototype.reverse()

var togSrc = [ "play.png", "pause.png" ];

$(".tog").click(function() {
   this.src =  togSrc.reverse()[0];
});

Using the current src value and String.prototype.match()

Useful if you don't know the initial state (play? pause?)

var togSrc = [ "play.png", "pause.png" ];

$(".tog").click(function() {
  this.src = togSrc[ this.src.match('play') ? 1 : 0 ];
});

NOTE: for the last two examples you need to pre-load your images, to prevent the time-gap the browsers makes to request and load a new image from the server.

like image 167
Roko C. Buljan Avatar answered Sep 20 '22 18:09

Roko C. Buljan


A different maybe easier way to handle it:

http://jsfiddle.net/M9QBb/1/

$("#infoToggler").click(function() {
    $(this).find('img').toggle();
});​

<div id="infoToggler">
  <img src="image1.png" width="60px" height="60px"/>
  <img src="image2.png" width="60px" height="60px" style="display:none"/>
</div>
like image 45
lucuma Avatar answered Sep 20 '22 18:09

lucuma