2017-09-27 114 views
0

我正在製作一個圖像滑塊,它具有縮略圖和上一個和下一個按鈕。當您點擊與主圖像不同的縮略圖時,我希望它淡入新圖像。上一個和下一個按鈕也一樣。淡入淡出圖像滑塊點擊prev next button

我有一個淡入淡出的web-kit動畫,但它不起作用。這是codepen

$('#imgDetail li img').click(function(){ 
 
    $('#unidoor').attr('src',$(this).attr('src')); 
 
}); 
 
$('#next').on('click',function(){ 
 
var imgSrc = $('#unidoor').attr('src'); 
 
    var nextSrc = $('ul img[src="'+imgSrc+'"]').closest('li').next().find('img').attr('src'); 
 
    console.log(nextSrc); 
 
    nextSrc ==undefined?$('#unidoor').attr('src',$('ul img:first').attr('src')): $('#unidoor').attr('src',nextSrc); 
 
}); 
 
$('#prev').on('click',function(){ 
 
var imgSrc = $('#unidoor').attr('src'); 
 
    var nextSrc = $('ul img[src="'+imgSrc+'"]').closest('li').prev().find('img').attr('src'); 
 
    console.log(nextSrc); 
 
    nextSrc ==undefined?$('#unidoor').attr('src',$('ul img:last').attr('src')): $('#unidoor').attr('src',nextSrc); 
 
});
* { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

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

 
.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 { 
 
/* position: relative; */ 
 
    width: 90%; 
 
    margin: 0 auto; 
 
    display: block; 
 
} 
 

 
#prev { 
 
    position: absolute; 
 
    float: left; 
 
    bottom: 55%; 
 
    left: 5%; 
 
    cursor: pointer; 
 
    font-weight: bold; 
 
} 
 

 
#next { 
 
    position: absolute; 
 
    float: right; 
 
    bottom: 55%; 
 
    right: 5%; 
 
    cursor: pointer; 
 
    font-weight: bold; 
 
    width: auto; 
 
} 
 

 
.previous { 
 
    background-color: #fff; 
 
    opacity: 0.5; 
 
    color: black; 
 
    width: auto; 
 
} 
 

 
.next { 
 
    background-color: #fff; 
 
    opacity: 0.5; 
 
    color: black; 
 
} 
 

 
#imgDetail a { 
 
    text-decoration: none; 
 
    display: inline-block; 
 
    padding: 8px 16px; 
 
} 
 

 
#imgDetail a:hover { 
 
    background-color: #7bbe9a; 
 
    color: white; 
 
    opacity: 1; 
 
} 
 

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

 
/* fade animation */ 
 

 
#fade { 
 
    -webkit-animation-name: fade; 
 
    -webkit-animation-duration: 1.5s; 
 
    animation-name: fade; 
 
    animation-duration: 1.5s; 
 
} 
 

 
@-webkit-keyframes fade { 
 
    from {opacity: .4} 
 
    to {opacity: 1} 
 
} 
 

 
@keyframes fade { 
 
    from {opacity: .4} 
 
    to {opacity: 1} 
 
} 
 

 
.thumb { 
 
    width: 25%; 
 
    height: auto; 
 
    margin: 15px 5px 0 5px; 
 
} 
 

 
#imgDetail li { 
 
    display: inline; margin-right: 10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<!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"> 
 
    \t <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"> 
 
    <br> 
 
    <img src="http://www.davidwightman.net/_images_landscape/Behemot/Behemot_detail_1.jpg" alt="" id="unidoor" /> 
 
    <a href="#" id="prev" class="prev-next-button previous">&#8249;</a> 
 
<a href="#" id="next" class="prev-next-button next">&#8250;</a> 
 
    
 
    <ul> 
 
     <li><img src="http://www.davidwightman.net/_images_landscape/Behemot/Behemot_detail_1.jpg" id="fade" class="thumb" /></li> 
 
     <li><img src="http://www.davidwightman.net/_images_landscape/Behemot/Behemot_detail_2.jpg" id="fade" class="thumb" /></li> 
 
     <li><img src="http://www.davidwightman.net/_images_landscape/Behemot/Behemot_detail_3.jpg" id="fade" class="thumb" /></li> 
 
    </ul> 
 
</div> 
 
    </div> 
 
    
 
    <script src="https://unpkg.com/scrollreveal/dist/scrollreveal.min.js"></script> 
 
    <script> 
 
     window.sr = ScrollReveal({reset: true}); 
 
     sr.reveal('#unidoor'); 
 
    </script> 
 
    
 
    </body> 
 

 
</html>

回答

0

在你的方法,你需要執行一些代碼,我做在你的代碼的一些變化,你可以看到它的代碼示例。

首先,您需要根據您需要滑動的圖像創建縮略圖。其次,您不應將每個圖像的src屬性設置爲下一個src(圖像URL),因爲每次您要下載圖像時,都應將所有圖像保存在緩存中並下載一次。第三,你應該只在一個函數中監聽previousnext的onclick事件,也許最好將它們分成兩個函數來爲下一個和上一個按鈕分配單一響應。

第四,你應該只使用CSS類,使每張幻燈片的淡入淡出效果,沒有那麼複雜吳丹動畫中,我創建了active類,使其作爲一個淡入淡出效果

我希望工作的演示代碼你可以找到它有幫助。

$(document).ready(function(){ 
 
\t // get all images loaded 
 
    var images = $(".unidoor-class"); 
 
\t // thumbnails containers 
 
    var thumbnailContainer = $("#thumbnails"); 
 
    // generate thumbnail images 
 
    generateThumbnails(images, thumbnailContainer); 
 
    // listeners for controls arrows 
 
\t $(".prev-next-button").on("click", function() { 
 
    \t // get the images 
 
    var currentImageIndex = $(".unidoor-class.active").index(); 
 
\t \t var isPrevious = $(this).hasClass("previous"); 
 
    var nextIndex; 
 
    if (isPrevious) { 
 
    \t if (currentImageIndex === 0) { 
 
     \t nextIndex = images.length - 1; 
 
     } 
 
     
 
     if (currentImageIndex > 0) { 
 
     \t nextIndex = currentImageIndex - 1; 
 
     } 
 
    } else { 
 
    \t if (currentImageIndex === images.length - 1) { 
 
     \t nextIndex = 0; 
 
     } 
 
     
 
     if (currentImageIndex < images.length - 1) { 
 
     \t nextIndex = currentImageIndex + 1; 
 
     } 
 
    } 
 
\t \t 
 
    // remove any active class from images 
 
\t \t images.removeClass("active"); 
 
    // get the next active image and add active class to that next current image 
 
    $(images[nextIndex]).addClass("active"); 
 
    }); 
 
    
 
    $(".thumb").on("click", function(event){ 
 
\t 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) { 
 
    \t var ul = $("<ul>"); 
 
    \t images.each(function(index, element){ 
 
    \t 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); 
 
    } 
 
});
* { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

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

 
.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; 
 
} 
 

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

 
#prev { 
 
    position: absolute; 
 
    float: left; 
 
    bottom: 55%; 
 
    left: 5%; 
 
    cursor: pointer; 
 
    font-weight: bold; 
 
} 
 

 
#next { 
 
    position: absolute; 
 
    float: right; 
 
    bottom: 55%; 
 
    right: 5%; 
 
    cursor: pointer; 
 
    font-weight: bold; 
 
    width: auto; 
 
} 
 

 
.previous { 
 
    background-color: #fff; 
 
    opacity: 0.5; 
 
    color: black; 
 
    width: auto; 
 
} 
 

 
.next { 
 
    background-color: #fff; 
 
    opacity: 0.5; 
 
    color: black; 
 
} 
 

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

 
#imgDetail a { 
 
    text-decoration: none; 
 
    display: inline-block; 
 
    padding: 8px 16px; 
 
} 
 

 
#imgDetail a:hover { 
 
    background-color: #7bbe9a; 
 
    color: white; 
 
    opacity: 1; 
 
} 
 

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

 
/* fade animation */ 
 

 
#fade { 
 
    -webkit-animation-name: fade; 
 
    -webkit-animation-duration: 1.5s; 
 
    animation-name: fade; 
 
    animation-duration: 1.5s; 
 
} 
 

 
@-webkit-keyframes fade { 
 
    from {opacity: .4} 
 
    to {opacity: 1} 
 
} 
 

 
@keyframes fade { 
 
    from {opacity: .4} 
 
    to {opacity: 1} 
 
} 
 

 
.thumb { 
 
    width: 25%; 
 
    height: auto; 
 
    margin: 15px 5px 0 5px; 
 
} 
 

 
#imgDetail li { 
 
    display: inline; margin-right: 10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<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" /> 
 
    <!--CONTROLS--> 
 
    <a href="#" id="prev" class="prev-next-button previous">&#8249;</a> 
 
    <a href="#" id="next" class="prev-next-button next">&#8250;</a> 
 
    <!--Thumbnails--> 
 
    <div id="thumbnails"> 
 
    </div> 
 
    </div> 
 
</div>

+0

謝謝,這幫助了很多。 – user7311741

+0

我很高興看到,歡迎您:D –