Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: galeria miniatury
Forum PHP.pl > Forum > Po stronie przeglądarki
john_doe
Witam,

chciałbym stworzyć galerie w taki sposób:

1. tworze div id="gallery"
2. wewnątrz tworzę div ( generowane z bazy ), class="mini" wewnątrz z miniaturą obrazu
3. napisałem przykładowy kod, który miniatury ustawia w pasku i po kliknięciu dostaniemy normalny obraz w stałych divie

  1. <!DOCTYPE HTML>
  2. <title>krystian gallery js</title>
  3. <script language="JavaScript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
  4.  
  5. <style type="text/css">
  6. #gallery{ border: 2px solid green; overflow: hidden; width: 840px; height: 120px; }
  7. .mini{ float: left; border: 1px solid red; }
  8. #normal-pic-size{ width: 584px; height: 422px; border: 2px solid pink; }
  9. </style>
  10.  
  11. <script type="text/javascript">
  12.  
  13. $(document).ready(function(){
  14.  
  15. $('.mini').click(function(){
  16.  
  17. var fileName = $(this).children('img').attr('src');
  18.  
  19. $("#normal-pic-size").html('<img src="' + fileName.replace("mini_", "") + '" />');
  20.  
  21. });
  22.  
  23. });
  24.  
  25. </script>
  26.  
  27. </head>
  28.  
  29.  
  30. <div id="normal-pic-size"></div>
  31.  
  32. <div id="gallery">
  33.  
  34. <div class="mini">
  35. <img src="mini_zaraz.jpg" alt="" />
  36. </div>
  37. <div class="mini">
  38. <img src="mini_zaraz.jpg" alt="" />
  39. </div>
  40. <div class="mini">
  41. <img src="mini_zaraz.jpg" alt="" />
  42. </div>
  43. <div class="mini">
  44. <img src="mini_zaraz.jpg" alt="" />
  45. </div>
  46. <div class="mini">
  47. <img src="mini_zaraz.jpg" alt="" />
  48. </div>
  49. <div class="mini">
  50. <img src="mini_zaraz.jpg" alt="" />
  51. </div>
  52. <div class="mini">
  53. <img src="mini_zaraz.jpg" alt="" />
  54. </div>
  55. <div class="mini">
  56. <img src="mini_zaraz.jpg" alt="" />
  57. </div>
  58. <div class="mini">
  59. <img src="mini_zaraz.jpg" alt="" />
  60. </div>
  61. <div class="mini">
  62. <img src="mini_zaraz.jpg" alt="" />
  63. </div>
  64.  
  65. </div>
  66.  
  67. </body>
  68.  
  69. </html>
  70.  
  71.  


gdy w css mam ustawiony overflow: hidden nie wyświetla mi wszystkich obrazów w moim poziomym pasku miniatur.
proszę o wskazówki jak zrobić przesunięcie niewidocznej częsci divów za pomocą przycisku prawo-lewo
pczeglik
Hej,

Zasada jest taka. Pozycjonujesz relatywnie kontener, który przechowuje wszystkie zdjęcia, czyli #gallery. W nim umieszczasz jakiś sub-kontener np. div.gallery-content, który pozycjonujesz relatywnie.
Później, gdy wykryjesz kliknięcie w przycisk prawo / lewo zmieniasz wartość css left div.gallery-content na odpowiednio wyliczoną.

Zerknij na poniższy kawałek kodu. Napisałem to na szybko i pewnie sporo jest tutaj rzeczy wymagających poprawienia, optymalizacji, ale chciałem Ci pokazać zasadę, a dostosujesz sobie to już wg potrzeb.
Poza tym są biblioteki, pluginy jQuery, które ułatwiają robienie takich galerii.

  1. <div class="content">
  2. <div id="normal-pic-size"></div>
  3. <div id="gallery">
  4. <div class="gallery-content">
  5. <div class="mini">
  6. <div class="img"></div>
  7. </div>
  8. <div class="mini">
  9. <div class="img"></div>
  10. </div>
  11. <div class="mini">
  12. <div class="img"></div>
  13. </div>
  14. <div class="mini">
  15. <div class="img"></div>
  16. </div>
  17. <div class="mini">
  18. <div class="img"></div>
  19. </div>
  20. <div class="mini">
  21. <div class="img"></div>
  22. </div>
  23. <div class="mini">
  24. <div class="img"></div>
  25. </div>
  26. <div class="mini">
  27. <div class="img"></div>
  28. </div>
  29. <div class="mini">
  30. <div class="img"></div>
  31. </div>
  32. <div class="mini">
  33. <div class="img"></div>
  34. </div>
  35. </div>
  36. </div>
  37. <div class="nav">
  38. <a href="#" class="back">wstecz</a> | <a href="#" class="next">dalej</a>
  39. </div>
  40. </div>
  41.  
  42. #gallery{ border: 2px solid green; overflow: hidden; width: 600px; height: 100px; position:relative; }
  43. #normal-pic-size{ width: 600px; height: 422px; border: 2px solid pink; }
  44. .content {padding:20px;font:12px/16px Tahoma, Verdana, sans-serif;width:602px;margin:auto;}
  45. .gallery-content {position:absolute;}
  46. .mini{ float:left; width:150px;height:100px; }
  47. .mini .img {width:100%;height:100px;background:#CCC;}
  48. .nav {text-align:center;margin:20px 0 0;}
  49. (function($) {
  50. "use strict";
  51.  
  52. $('.img:odd').css('background', '#FF0000');
  53.  
  54. var next = $('.next'),
  55. back = $('.back'),
  56. galleryControl = {
  57. imgWidth: 0,
  58. imgCount: 0,
  59. galleryContent: '',
  60. current: 0,
  61. maxSteps: 0,
  62. init: function(options) {
  63. this.galleryContent = options.galleryContent || '';
  64. this.imgWidth = options.imgWidth || 100;
  65. this.imgCount = this.galleryContent.find('.img').length;
  66. this.maxSteps = this.imgCount - parseInt(parseInt(this.galleryContent.css('width'), 10) / this.imgWidth, 10);
  67. },
  68. move: function(dir) {
  69. if (dir === 'next') {
  70. if (this.current < this.maxSteps) {
  71. this.current += 1;
  72. }
  73. }
  74. if (dir === 'back') {
  75. if (this.current > 0) {
  76. this.current -= 1;
  77. }
  78. }
  79. if (this.galleryContent !== '') {
  80. this.galleryContent.css({
  81. 'left': ~ (this.current * this.imgWidth)
  82. });
  83. }
  84. }
  85. };
  86. // Inicjalizacja
  87. galleryControl.init({
  88. imgWidth: parseInt($('.img').css('width'), 10),
  89. galleryContent: $('.gallery-content')
  90. });
  91.  
  92. // obsługa zdarzeń
  93. back.on('click', function() {
  94. galleryControl.move('back');
  95. });
  96. next.on('click', function() {
  97. galleryControl.move('next');
  98. });
  99. }(jQuery));


Funkcjonujący przykład możesz zobaczyć tutaj: jsFiddle - przesuwanie zdjęć
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.