Thumbnail as Placeholder Image Carousel

I have an image slider with thumbnails which works fine, but I'm having trouble making one of the thumbnails a placeholder. For example in my codepen, I have three images that correspond with their thumbnails. But in the last one, I want to have the user see a sketchfab model.

I want to have a still image as a thumbnail, but when the user clicks on the thumbnail or the arrows, the animated sketchfab model shows instead.

Any help would be appreciated.

$(document).ready(function(){
    $('#imgDetail').animate({
    opacity: '1'
    },300);
});

$(document).ready(function(){
	// get all images loaded
  var images = $(".unidoor-class");
	// thumbnails containers
  var thumbnailContainer = $("#thumbnails");
    // generate thumbnail images
  generateThumbnails(images, thumbnailContainer);
  // listeners for controls arrows
	$(".prev-next-button").on("click touchstart", function() {
  	// get the images
    var currentImageIndex = $(".unidoor-class.active").index();
		var isPrevious = $(this).hasClass("previous");
    var nextIndex;
    if (isPrevious) {
    	if (currentImageIndex === 0) {
      	nextIndex = images.length - 1;
      }
      
      if (currentImageIndex > 0) {
      	nextIndex = currentImageIndex - 1;
      }
    } else {
    	if (currentImageIndex === images.length - 1) {
      	nextIndex = 0;
      }
      
      if (currentImageIndex < images.length - 1) {
      	nextIndex = currentImageIndex + 1;
      }
    }
		
    // remove any active class from images
		images.removeClass("active");
    // get the next active image and add active class to that next current image
    $(images[nextIndex]).addClass("active");
  });
  
  $(".thumb").on("click touchstart", function(event){
	  event.preventDefault();
    var indexSelected = $(this).data("img-index");
    var currentShown = $(".unidoor-class.active").index();
    if (currentShown === indexSelected) return false;
    images.removeClass("active");
    $(images[indexSelected]).addClass('active');
  });
  
  function generateThumbnails(images, container) {
  	var ul = $("<ul>");
  	images.each(function(index, element){
    	var currentThumb = $("<img>");
      var li = $("<li>");
      var src = $(this).attr("src");
      currentThumb.attr("src", src);
      currentThumb.attr("class", "thumb");
      currentThumb.data("img-index", index);
      li.append(currentThumb);
      ul.append(li);
    });
    container.append(ul);
  }
});

window.sr = ScrollReveal({reset: true});
sr.reveal('.active', {mobile:true});
* {
  margin: 0;
  padding: 0;
}

body{
  margin: 0;
  padding:0;
  font-size: 100%;
/*   line-height: 1.6; */
/*   font-family: Arial, Helvetica, sans-serif; */
/*   height: 100% !important; */
}

.header{
  margin: 0 auto;
  width: 100%;
  background-color: #333;
  padding: 30px 0 0 0; 
}

.header h1{
  margin: 0;
  text-align: center;
  color: white;
  font-family: Arial, Helvetica, sans-serif;
}

.header ul {
  list-style-type: none;
  margin: 0;
/*   padding: 0; */
  overflow: hidden;
  padding: 20px 0px 30px 0;
  text-align: center;
}

.header li {
  display: block;
  display: inline-block;
/*   border-right: 1px solid #bbb; */
  border-right: 1px solid #bbb;
  height: 25px;
}

.header li:last-child{
  border-right: none;
}

.header li a {
  display: block;
  color: white;
  text-align: center;
  text-decoration: none;
  padding: 0px 40px;
  font-size: 1em;
}

.header li a:hover{
  color: #7bbe9a;
/*   color: #80b198; */
}

#green-room {
  background: #333 !important;
}

.slideshow-container {
  max-width: 1000px;
  position: relative;
  margin: auto;
}

#unidoor, .unidoor-class {
  position: absolute;
  width: 100%;
  margin: 0 auto;
  display: block;
  top: 0;
  left: 0;
  opacity: 0;
  transition: opacity .5s;
  height: auto;
}

.unidoor-class.active {
  position: relative;
  opacity: 1;
}

#prev {
  position: absolute;
/*   font-weight: bold; */
  color: black;
/*   background-color: #fff; */
/*   opacity: 0.5; */
  left: 0;
  top: 0;
  bottom: 0;
}

#next {
  position: absolute;
/*   font-weight: bold; */
  color: black;
/*   background-color: #fff; */
/*   opacity: 0.5; */
  right: 0;
  top: 0;
  bottom: 0;
}

#prev p, 
#next p
{
  font-size: 3em;
}


#imgDetail {
  position: relative;
  width: 90%;
  margin: 0 auto;
}

#imgDetail a {
  text-decoration: none;
  display: flex;
/*     padding: 8px 16px; */
  padding: 3% ;
  justify-content: center;
  align-items: center;
}

#imgDetail a:hover {
  background-color: #333;
  color: white;
  opacity: 0.5;
}

#imgDetail ul {
  margin: 0 auto;
  display: block;
/*   width: 50%; */
}

#thumbnails {
  max-width: 1000px;
  width: 100%;
  display: inline-block;
  text-align: center;
}

.thumb { 
  width: 21%; 
  height: auto; 
/*   margin: 15px 1% 0px 2%; */
  margin-top: 15px;
  cursor: pointer;
}

#imgDetail li { 
  display: inline; 
/*   margin-right: 10px;  */
}

#thumbnails ul{
  margin: 0 auto;
    display: block;
}

#thumbnails li{
  display: inline;
  padding-right: 2%;
}

#thumbnails li:last-child{
  padding-right: 0;
}

#green-room p {
  display: block;
  margin: 0 auto;
/*   font-size: 1em !important; */
}

#green {
  padding-top: 15px;
  padding-bottom: 30px;
  text-align: center;
  color: white;
  font-family: 'Lato', sans-serif;
  margin: 0 auto;
 /* width: 100% !important;*/
}

@media(max-width: 767px){
  #green-room p {
    margin-right: 5% !important;
    margin-left: 5% !important;
/*     font-size: .75em !important; */
  } 
  #green {
/*     font-size: .75em !important; */
  }
}

@media(min-width: 768px){
  #green-room p {
    width: 90% !important;
  }
  #green {
    width: 90% !important;
  }
}

.footer {
  padding-top: 30px;
  background-color: #333;
}
<script src="https://unpkg.com/scrollreveal/dist/scrollreveal.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Images not Owned by Me -->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Daniel Pollack</title>
    <link rel="stylesheet" type="text/css" href="css/styles.css"/>
  </head>

  <body id="green-room">
  	<div class="header">
      <div id="title"><h1>Lorem Ipsum 3D Online Portfolio</h1></div>
      <nav id="menu">
        <ul>
          <li><a href="index.html">Home</a></li>
          <li><a href="index.html#portfolio">Portfolio</a></li>
          <li><a href="#about">About</a></li>
          <li><a href="#contact">Contact</a></li>
        </ul>
      </nav>
    </div>
    
<div class="slideshow-container">
  <div id="imgDetail">
    <img src="http://www.davidwightman.net/_images_landscape/Behemot/Behemot_detail_1.jpg" class="unidoor-class active" />
    <img src="http://www.davidwightman.net/_images_landscape/Behemot/Behemot_detail_2.jpg" class="unidoor-class" />
    <img src="http://www.davidwightman.net/_images_landscape/Behemot/Behemot_detail_3.jpg" class="unidoor-class" />
    <img src="https://cmkt-image-prd.global.ssl.fastly.net/0.1.0/ps/1243679/300/200/m2/fpnw/wm0/desert_04_01-.jpg?1462519267&s=294388259919b5be6294b07e96cda0b7" class="unidoor-class" />
    
    <!--CONTROLS-->
    <a href="#" id="prev" class="prev-next-button previous"><p>&#10092;</p></a>
    <a href="#" id="next" class="prev-next-button next"><p>&#10093;</p></a>
    
    <div class="sketchfab-embed-wrapper"><iframe width="640" height="480" src="https://sketchfab.com/models/bbea52bd14c84d65b7b5512bae94ceac/embed" frameborder="0" allowvr allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" onmousewheel=""></iframe>
      
    <!--Thumbnails-->
    
  </div>
    <div id="thumbnails">
      
    </div>
</div>
    
 <p id="green">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus non iaculis magna. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>


<div class="footer">
    </div>
    
    <script src="https://unpkg.com/scrollreveal/dist/scrollreveal.min.js"></script>
    <script>
      window.sr = ScrollReveal({reset: true});
      sr.reveal('#unidoor');
    </script>
    
    </body>

</html>

1 answer

  • answered 2018-02-13 06:33 M_JS_DEV

    I've posted a potential solution here:

    https://codepen.io/anon/pen/xYrJxy

    It uses data attributes to tell if the image is active

    data-active="false/true"
    

    and

    data-iframe="sketchfab-iframe"
    

    to determine whether the image should trigger the iframe to appear.

    Let me know if you have any questions.