4

How to show/hide big image by clicking on thumbnails?

I need like this

enter image description here

Try with JSFiddle here http://jsfiddle.net/jitendravyas/Qhdaz/

Is it possible with CSS only. if not then jQuery solution is OK.

An is it good to use <a href=#"> even it's not opening any new page in same or new tab.

Edit:

I forgot to add. it should work on iPad too

Jitendra Vyas
  • 148,487
  • 229
  • 573
  • 852
  • Try these examples: https://www.javatpoint.com/jquery-photo-gallery-with-thumbnail, https://www.jqueryscript.net/gallery/Responsive-Gallery-Thumbnail-Nav-jQuery.html – shasi kanth Mar 29 '23 at 08:12

1 Answers1

15

See this example:

No preloading

HTML:

<div id="big-image">
    <img src="http://lorempixel.com/400/200/sports/1/">
</div>

<div class="small-images">
    <a href="http://lorempixel.com/400/200/sports/1/"><img src="http://lorempixel.com/100/50/sports/1/"></a>
<a href="http://lorempixel.com/400/200/fashion/1/" class=""><img src="http://lorempixel.com/100/50/fashion/1/"></a>
<a href="http://lorempixel.com/400/200/city/1/"><img src="http://lorempixel.com/100/50/city/1/"></a>
</div>

Javascript (jQuery)

$(function(){
    $(".small-images a").click(function(e){
        var href = $(this).attr("href");
        $("#big-image img").attr("src", href);
        e.preventDefault();
        return false;
    });
});

Currently only 1 big image, when clicking on an A, the href of the A is copied as SRC of the big image.

Live example: http://jsfiddle.net/Qhdaz/1/

If you wan't to do it without the extra DOM progressing, you can add 3 big images, and load them directly. The above solution does not preload the images, the below function will.

With preloading

HTML:

<div id="big-image">
    <img src="http://lorempixel.com/400/200/sports/1/">
    <img src="http://lorempixel.com/400/200/fashion/1/">
    <img src="http://lorempixel.com/400/200/city/1/">
</div>

<div class="small-images">
    <img src="http://lorempixel.com/100/50/sports/1/">
    <img src="http://lorempixel.com/100/50/fashion/1/">
    <img src="http://lorempixel.com/100/50/city/1/">
</div>

Javascript:

$(function(){
    $("#big-image img:eq(0)").nextAll().hide();
    $(".small-images img").click(function(e){
        var index = $(this).index();
        $("#big-image img").eq(index).show().siblings().hide();
    });
});

http://jsfiddle.net/Qhdaz/2/

Niels
  • 48,601
  • 4
  • 62
  • 81
  • This adds more dom computation for build src for the `img` multiple times. Not efficiency. – steveyang Nov 14 '11 at 12:51
  • I've updated it with another function. The first function does not preload the images, the second function does load the directly. @steven.yang it has to rebuild, but on a normal PC this shouldn't be any problem, but on a iPad it can since the processing and memory is limited. – Niels Nov 14 '11 at 12:55
  • @Niels - Thanks for the answer. Could you also try for this question http://stackoverflow.com/questions/8098107/horizontal-swipe-slider-with-jquery-and-touch-devices-support – Jitendra Vyas Nov 14 '11 at 13:18
  • Currently don't got enough time to make it, I will try tonight if you don't got any response yet. – Niels Nov 14 '11 at 13:22