2016-01-07 23 views
5

Próbuję utworzyć niestandardową karuzelę obrazu pionowego , ponieważ nie mogę używać żadnych wtyczek z powodu zdarzeń js dołączonych do obrazów, które muszę zachować i jedyny sposób, dla mnie praca polega na stworzeniu niestandardowej karuzeli.Utwórz pionową karuzelę obrazów

Funkcjonalności

  • karuzela Obraz ma 3 jednakowe rozmiary w rzutni.
  • Karuzela obrazów ma przycisk następny/poprzedni, który umożliwia przeglądanie/wybór większej liczby obrazów.
  • Następny/poprzedni przycisk umożliwia tylko jeden krok na raz, co oznacza, że ​​nie wybierze następnego zestawu obrazów i nie wyświetli go w okienku ekranu.

enter image description here

  • Karuzela oferuje wybrać dowolny obraz w rzutni i będzie synchronizować gdy obok przycisku/prev kliknięciu

enter image description here

Wszystkie funkcje wymienione powyżej jest już wdrożony.

PROBLEM

ostatni obraz nie będzie przystawki/stop przed kolejnym przycisku, jak stworzy spację pomiędzy.

enter image description hereenter image description here

kod JS

$(function(){ 
     var image_height = 0; 
     var gallery_offset = 0; 
     var image_count = $('img.thumbnail').length; 
     var click_count = 0; 
     var image_height = 0; 
     var last_images_count = 0; 

     $('.gallery-container a').click(function(){ 
      $('.gallery-container a').removeClass('active') 
      $(this).addClass('active'); 

     }); 

     jQuery('.thumbnail').each(function(){ 
      $(this).on('load', function(){ image_height = $(this).parent().outerHeight(); }); 
      image_height = $(this).parent().outerHeight(); 
     }) 

     // Disable arrows if the images count is 3 below 
     if(image_count <= 3) { 
      $('.product-more-pictures .up, .product-more-pictures .down').addClass('disabled') 
      click_count = 0; 
     } 

     // Set the first image as active 
     jQuery('.gallery-container img.thumbnail').first().click(); 
     var thumb_active = jQuery('.gallery-container .active'); 

     $('.gallery-container a').on('click', function() { 
      thumb_active = jQuery('.gallery-container .active'); 
     }); 

     $('.product-more-pictures .down').on('click', function (e) { 
      $('.product-more-pictures .up').removeClass('disabled') 
      if(thumb_active.nextAll(':lt(1)').length) { 
       thumb_active.nextAll(':lt(1)').children().click() 
       thumb_active = jQuery('.gallery-container .active'); 

      } 

      if(! thumb_active.next().length) { 
       $(this).addClass('disabled') 
      } else { 
       $(this).removeClass('disabled'); 
      } 

      if (click_count < image_count) { 
       click_count = click_count + 1; 

       update_gallery('down'); 
      } 



     }); 

     $('.product-more-pictures .up').on('click', function() { 
      $('.product-more-pictures .down').removeClass('disabled') 
      if(thumb_active.prevAll(':lt(1)').length) { 
       thumb_active.prevAll(':lt(1)').children().click() 
       thumb_active = jQuery('.gallery-container .active'); 
      } 

      if(! thumb_active.prev().length) { 
       $(this).addClass('disabled') 
      } else { 
       $(this).removeClass('disabled'); 
      } 

      if (click_count > 0) { 
       click_count = click_count - 1; 

       update_gallery('up'); 

      } 
     }); 

     function update_gallery(direction) {   
      gallery_offset = click_count * image_height; 
      last_images_count = thumb_active.nextAll().length; 

      $(".gallery-container").animate({ 
       'top': '-' + gallery_offset + 'px' 
      }, 800); 

     } 

}); 

Fiddle: https://jsfiddle.net/qrvrdjch/6/

Każda pomoc będzie bardzo mile widziane :)

Odpowiedz

5

Spróbuj tego .. . musisz zainicjować liczbę kliknięć jako -1 i zmienić wartość if (click_count < image_count) na tę wartość "if (click_count < image_count - 3)", ponieważ na domyślnym obciążeniu wybrany obraz jest pierwszy, więc ten będzie służyć twojej potrzebie Chyba NB: nie jest wymagane w CSS i HTML

$(function(){ 
    var image_height = 0; 
    var gallery_offset = 0; 
    var image_count = $('img.thumbnail').length; 
    var click_count = -1; 
    var image_height = 0; 
    var last_images_count = 0; 

    $('.gallery-container a').click(function(){ 
     $('.gallery-container a').removeClass('active') 
     $(this).addClass('active'); 

    }); 

    jQuery('.thumbnail').each(function(){ 
     $(this).on('load', function(){ image_height = $(this).parent().outerHeight(); }); 
     image_height = $(this).parent().outerHeight(); 
    }) 

    // Disable arrows if the images count is 3 below 
    if(image_count <= 3) { 
     $('.product-more-pictures .up, .product-more-pictures .down').addClass('disabled') 
     click_count = 0; 
    } 

    // Set the first image as active 
    jQuery('.gallery-container img.thumbnail').first().click(); 
    var thumb_active = jQuery('.gallery-container .active'); 

    $('.gallery-container a').on('click', function() { 
     thumb_active = jQuery('.gallery-container .active'); 
    }); 

    $('.product-more-pictures .down').on('click', function (e) { 
     $('.product-more-pictures .up').removeClass('disabled') 
     if(thumb_active.nextAll(':lt(1)').length) { 
      thumb_active.nextAll(':lt(1)').children().click() 
      thumb_active = jQuery('.gallery-container .active'); 

     } 

     if(! thumb_active.next().length) { 
      $(this).addClass('disabled') 
     } else { 
      $(this).removeClass('disabled'); 
     } 
     if (click_count < image_count - 3) { 
      console.log(image_count) 
      console.log(click_count) 
      click_count = click_count + 1; 

      update_gallery('down'); 
     } 



    }); 

    $('.product-more-pictures .up').on('click', function() { 
     $('.product-more-pictures .down').removeClass('disabled') 
     if(thumb_active.prevAll(':lt(1)').length) { 
      thumb_active.prevAll(':lt(1)').children().click() 
      thumb_active = jQuery('.gallery-container .active'); 
     } 

     if(! thumb_active.prev().length) { 
      $(this).addClass('disabled') 
     } else { 
      $(this).removeClass('disabled'); 
     } 

     if (click_count > 0) { 
      click_count = click_count - 1; 

      update_gallery('up'); 

     } 
    }); 

    function update_gallery(direction) {   
     gallery_offset = click_count * image_height; 
     last_images_count = thumb_active.nextAll().length; 

     $(".gallery-container").animate({ 
      'top': '-' + gallery_offset + 'px' 
     }, 800); 

    } 

}); 
+0

Awesome! dzięki Manu! – Vincent

4

Jesteś prawie tam. Musisz tylko edytować jeden warunek. Change "if (click_count < IMAGE_COUNT)" pod zdarzenie kliknięcia przycisku w dół (linia 48 w JSFiddle) do "if (click_count < IMAGE_COUNT-3)"

$(function(){ 
 
     var image_height = 0; 
 
     var gallery_offset = 0; 
 
     var image_count = $('img.thumbnail').length; 
 
     var click_count = 0; 
 
     \t var image_height = 0; 
 
     var last_images_count = 0; 
 
     
 
     $('.gallery-container a').click(function(){ 
 
      $('.gallery-container a').removeClass('active') 
 
     \t $(this).addClass('active'); 
 
      
 
     }); 
 
     
 
     \t jQuery('.thumbnail').each(function(){ 
 
      $(this).on('load', function(){ image_height = $(this).parent().outerHeight(); }); 
 
      image_height = $(this).parent().outerHeight(); 
 
     }) 
 
     
 
     // Disable arrows if the images count is 3 below 
 
     if(image_count <= 3) { 
 
     \t $('.product-more-pictures .up, .product-more-pictures .down').addClass('disabled') 
 
      click_count = 0; 
 
     } 
 
     
 
     // Set the first image as active 
 
     jQuery('.gallery-container img.thumbnail').first().click(); 
 
     \t var thumb_active = jQuery('.gallery-container .active'); 
 
     
 
     $('.gallery-container a').on('click', function() { 
 
     \t thumb_active = jQuery('.gallery-container .active'); 
 
     }); 
 

 
     $('.product-more-pictures .down').on('click', function (e) { 
 
      \t $('.product-more-pictures .up').removeClass('disabled') 
 
      \t if(thumb_active.nextAll(':lt(1)').length) { 
 
       thumb_active.nextAll(':lt(1)').children().click() 
 
       thumb_active = jQuery('.gallery-container .active'); 
 

 
      } 
 
      
 
      if(! thumb_active.next().length) { 
 
       $(this).addClass('disabled') 
 
      } else { 
 
       $(this).removeClass('disabled'); 
 
      } 
 
      
 
      if (click_count < image_count-3) { 
 
       click_count = click_count + 1; 
 
       
 
       update_gallery('down'); 
 
      } 
 
      
 
      
 
      \t 
 
     }); 
 

 
     $('.product-more-pictures .up').on('click', function() { 
 
      \t $('.product-more-pictures .down').removeClass('disabled') 
 
      \t if(thumb_active.prevAll(':lt(1)').length) { 
 
       thumb_active.prevAll(':lt(1)').children().click() 
 
       thumb_active = jQuery('.gallery-container .active'); 
 
      } 
 
      
 
      \t if(! thumb_active.prev().length) { 
 
       $(this).addClass('disabled') 
 
      } else { 
 
       $(this).removeClass('disabled'); 
 
      } 
 
      
 
      if (click_count > 0) { 
 
       click_count = click_count - 1; 
 
       
 
       update_gallery('up'); 
 
       
 
      } 
 
     }); 
 
     
 
     function update_gallery(direction) {   
 
      gallery_offset = click_count * image_height; 
 
      last_images_count = thumb_active.nextAll().length; 
 
      
 
      $(".gallery-container").animate({ 
 
       'top': '-' + gallery_offset + 'px' 
 
      }, 800); 
 
     
 
     } 
 
     
 
});
.product-more-pictures a { 
 
    display: block; 
 
    text-align: center; 
 
} 
 

 
.product-more-pictures a.disabled { 
 
    pointer-events: none !important; 
 
    cursor: default; 
 
    visibility: visible !important; 
 
    background: #C3C3C3; 
 
} 
 

 
.product-more-pictures a.down.disabled:before, 
 
.product-more-pictures a.up.disabled:before{ 
 
\t content: ' '; 
 
    background: rgba(255, 255, 255, 0.42); 
 
    position: absolute; 
 
    height: 100%; 
 
    width: 100%; 
 
    left: 0px; 
 
    bottom: 0px; 
 
} 
 

 
.product-more-pictures { 
 
    text-align: right; 
 
    height: 549px; 
 
    width: 111px; 
 
    overflow: hidden; 
 
    position: relative; 
 

 
} 
 

 
.gallery-container { 
 
    position: relative; 
 
    padding: 30px 0px; 
 
} 
 

 
.gallery-container img { 
 
    margin-bottom: 0px; 
 
} 
 

 
#product-photos .product-more-pictures { 
 
    width: 18.516667%; 
 
} 
 

 
.product-more-pictures .up, 
 
.product-more-pictures .down { 
 
    position: absolute; 
 
    background: #999; 
 
    padding: 0px; 
 
    width: 100%; 
 
    text-align: center; 
 
    z-index: 80; 
 
    color: #fff; 
 
    padding: 5px 10px; 
 
} 
 

 
.product-more-pictures .up { top: 0px; } 
 
.product-more-pictures .down { 
 
    bottom: 0px; 
 
} 
 

 
.product-more-pictures a.active img { 
 
    border: solid 1px rgba(95, 95, 95,0.75) !important; 
 
} 
 

 
.product-more-pictures .icon-chevron-up, 
 
.product-more-pictures .icon-chevron-down { 
 
    color: #fff !important; 
 
    font-size: 21px; 
 
    position: relative; 
 
} 
 

 
.product-more-pictures .icon-chevron-up { 
 
    top: 0px; 
 
} 
 

 
.zoomContainer { z-index: 999; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="product-more-pictures desktop-3"> 
 
     <a href="#" class="up">up</a> 
 
     <div class="gallery-container"> 
 
     
 
      <a href="#"> 
 
      <img class="thumbnail" src="//cdn.shopify.com/s/files/1/0190/3782/products/Name_it_to_Win_It_11-27_027_compact.jpg?v=1451925772" alt="Sheer Perfection Tunic"> 
 
      </a> 
 
    
 
      <a href="#"> 
 
      <img class="thumbnail" src="//cdn.shopify.com/s/files/1/0190/3782/products/Name_it_to_Win_It_11-27_111_compact.jpg?v=1451925773"alt="Sheer Perfection Tunic"> 
 
      </a> 
 
     
 
      <a href="#"> 
 
      <img class="thumbnail" src="//cdn.shopify.com/s/files/1/0190/3782/products/Name_it_to_Win_It_11-27_194_compact.jpg?v=1451925774" alt="Sheer Perfection Tunic"> 
 
      </a> 
 
    
 
      <a href="#" > 
 
      <img class="thumbnail" src="//cdn.shopify.com/s/files/1/0190/3782/products/Name_it_to_Win_It_11-27_029_compact.jpg?v=1451925774" alt="Sheer Perfection Tunic"> 
 
      </a> 
 
    
 
      <a href="#"> 
 
      <img class="thumbnail" src="//cdn.shopify.com/s/files/1/0190/3782/products/Name_it_to_Win_It_11-27_095_compact.jpg?v=1451925775" data-image-id="8200864135" alt="Sheer Perfection Tunic"> 
 
      </a> 
 
    
 
      <a href="#"> 
 
      <img class="thumbnail" src="//cdn.shopify.com/s/files/1/0190/3782/products/Name_it_to_Win_It_11-27_135_compact.jpg?v=1451925776" data-image-id="8200864327" alt="Sheer Perfection Tunic"> 
 
      </a> 
 
    
 
      <a href="#" > 
 
      <img class="thumbnail" src="//cdn.shopify.com/s/files/1/0190/3782/products/Name_it_to_Win_It_11-27_149_compact.jpg?v=1451925776" data-image-id="8200864775" alt="Sheer Perfection Tunic"> 
 
      </a> 
 
    
 
      <a href="#" > 
 
      <img class="thumbnail" src="//cdn.shopify.com/s/files/1/0190/3782/products/Name_it_to_Win_It_11-27_152_compact.jpg?v=1451925777" data-image-id="8200865671" alt="Sheer Perfection Tunic"> 
 
      </a> 
 
    
 
      <a href="#"> 
 
      <img class="thumbnail" src="//cdn.shopify.com/s/files/1/0190/3782/products/Name_it_to_Win_It_11-27_159_compact.jpg?v=1451925778" data-image-id="8200866183" alt="Sheer Perfection Tunic"> 
 
      </a> 
 
     
 
     </div> 
 
     <a href="#" class="down">down</a> 
 
    </div>

+0

up-voted to, ponieważ rozwiązuje problem przyciągania – Vincent

0

$(function(){ 
 
     var image_height = 0; 
 
     var gallery_offset = 0; 
 
     var image_count = $('img.thumbnail').length; 
 
     var image_show = 3; 
 
     var click_count = 0; 
 
     \t var image_height = 0; 
 
     var last_images_count = 0; 
 
     
 
     $('.gallery-container a').click(function(){ 
 
      $('.gallery-container a').removeClass('active') 
 
     \t $(this).addClass('active'); 
 
      
 
     }); 
 
     
 
     \t jQuery('.thumbnail').each(function(){ 
 
      $(this).on('load', function(){ image_height = $(this).parent().outerHeight(); }); 
 
      image_height = $(this).parent().outerHeight(); 
 
     }) 
 
     
 
     // Disable arrows if the images count is 3 below 
 
     if(image_count <= 3) { 
 
     \t $('.product-more-pictures .up, .product-more-pictures .down').addClass('disabled') 
 
      click_count = 0; 
 
     } 
 
     
 
     // Set the first image as active 
 
     jQuery('.gallery-container img.thumbnail').first().click(); 
 
     \t var thumb_active = jQuery('.gallery-container .active'); 
 
     
 
     $('.gallery-container a').on('click', function() { 
 
     \t thumb_active = jQuery('.gallery-container .active'); 
 
     }); 
 

 
     $('.product-more-pictures .down').on('click', function (e) { 
 
      \t $('.product-more-pictures .up').removeClass('disabled') 
 
      \t if(thumb_active.nextAll(':lt(1)').length) { 
 
       thumb_active.nextAll(':lt(1)').children().click() 
 
       thumb_active = jQuery('.gallery-container .active'); 
 

 
      } 
 
      
 
      if(! thumb_active.next().length || click_count > (image_count-image_show)) { 
 
       $(this).addClass('disabled') 
 
      } else { 
 
       $(this).removeClass('disabled'); 
 
      } 
 
      
 
      if (click_count < (image_count-image_show)) { 
 
       click_count = click_count+1; 
 
       update_gallery('down'); 
 
      } 
 
      
 
      
 
      \t 
 
     }); 
 

 
     $('.product-more-pictures .up').on('click', function() { 
 
      \t $('.product-more-pictures .down').removeClass('disabled') 
 
      \t if(thumb_active.prevAll(':lt(1)').length) { 
 
       thumb_active.prevAll(':lt(1)').children().click() 
 
       thumb_active = jQuery('.gallery-container .active'); 
 
      } 
 
      
 
      \t if(! thumb_active.prev().length) { 
 
       $(this).addClass('disabled') 
 
      } else { 
 
       $(this).removeClass('disabled'); 
 
      } 
 
      
 
      if (click_count > 0) { 
 
       click_count = click_count - 1; 
 
       
 
       update_gallery('up'); 
 
       
 
      } 
 
     }); 
 
     
 
     function update_gallery(direction) { 
 
      gallery_offset = click_count * image_height; 
 
      last_images_count = thumb_active.nextAll().length; 
 
      
 
      $(".gallery-container").animate({ 
 
       'top': '-' + gallery_offset + 'px' 
 
      }, 800); 
 
     
 
     } 
 
     
 
});

Hi zmiany,

ja hav Dodaliśmy jeszcze jeden wiarygodny image_show = 3 dla liczby obrazów uchwytów.