jquery.gallary.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. (function ($) {
  2. 'use strict';
  3. $.fn.gallery = function(option) {
  4. var $leftArrow;
  5. var $rightArrow;
  6. var $item = $('<div>'); // small gallary
  7. var $gallery = $('#gallary');
  8. var $galleryitems = $gallery.children();
  9. var defaults = {
  10. current: 0,
  11. place: '.container', // указываем куда добавить стрелки
  12. key: false, // флаг на использование клавиатуры
  13. preview: false
  14. };
  15. var options = $.extend(defaults, option); // переопределяем настройки по дефолту
  16. var maxH = $($galleryitems[0]).height();
  17. for (var i=0; i < $galleryitems.length; i++) {
  18. if($($galleryitems[i]).height() < maxH ) maxH = $($galleryitems[i]).height();
  19. } // тут определяем наибольшую высоту из набора наших итемов
  20. $gallery.height(maxH + 'px'); // задаем высоту в пикселях
  21. return this.each(function(){
  22. var $gallery = $(this);
  23. $gallery.addClass('gallary');
  24. $galleryitems.addClass('gallary-item thumbnail');
  25. $galleryitems.eq(options.current).addClass('current'); // берет элемент в наборе и показывает его
  26. $gallery.attr('tabindex', 0);
  27. function changeImgDecrease() {
  28. var $currentItem = $('.current', $gallery);
  29. var next = $currentItem.index() - 1;
  30. if (next === $galleryitems.length) next = 0;
  31. $galleryitems.removeClass('current').eq(next).addClass('current');
  32. $('#small-gallary').remove(); //удаление малой галереи
  33. if(options.preview == true) { // разрешение на превью
  34. smallGallary(options.place); // вызов функции малой галереи
  35. }
  36. } // функция которая идет в лево (в обратном порядке)
  37. function changeImgIncrease() {
  38. var $currentItem = $('.current', $gallery);
  39. var next = $currentItem.index() + 1;
  40. if (next === $galleryitems.length) next = 0;
  41. $galleryitems.removeClass('current').eq(next).addClass('current');
  42. $('#small-gallary').remove(); //удаление малой галереи
  43. if(options.preview == true) { // разрешение на превью
  44. smallGallary(options.place); // вызов функции малой галереи
  45. }
  46. } // функция которая идет в право (в обычном порядке порядке)
  47. function boxArrow(place, maxH, id) { //делаем стрелочки
  48. var $box = $('<div>')
  49. .css('top', maxH/2 )
  50. .attr('id', id);
  51. $leftArrow = $('<a>')
  52. .append('<span class="glyphicon glyphicon-chevron-left">')
  53. .css('font-size', 30 +'px')
  54. .appendTo($box)
  55. .on('click', function(){ //обработчик событий на стрелке
  56. changeImgDecrease();
  57. });
  58. $rightArrow = $('<a>')
  59. .addClass('pull-right')
  60. .append('<span class="glyphicon glyphicon-chevron-right">')
  61. .css('font-size', 30 +'px')
  62. .appendTo($box)
  63. .on('click', function(){
  64. changeImgIncrease(); //обработчик событий на стрелке
  65. });
  66. return $box.appendTo(place);
  67. }
  68. function smallGallary(place) { // small gallary
  69. var $item = $('<div>')
  70. .attr('id', 'small-gallary')
  71. .addClass('row');
  72. var $currentItem = $('.current', $gallery);
  73. // определяем предыдущую картинку
  74. var last = $currentItem.index() - 1;
  75. if (last === $galleryitems.length) last = 0;
  76. var $lastPicture = $galleryitems.clone().removeClass('current').eq(last).addClass('current');
  77. // определяем следующую картинку
  78. var next = $currentItem.index() + 1;
  79. if (next === $galleryitems.length) next = 0;
  80. var $nextPicture = $galleryitems.clone().removeClass('current').eq(next).addClass('current');
  81. var $itemChild1 = $('<div>')
  82. .addClass('col-md-4 first')
  83. .append( $lastPicture )
  84. .appendTo($item)
  85. .on('click', function(event){
  86. changeImgDecrease(); //обработчик событий на превью
  87. });
  88. var $itemChild2 = $('<div>')
  89. .addClass('col-md-4 ')
  90. .append($galleryitems.clone() )
  91. .appendTo($item);
  92. var $itemChild3 = $('<div>')
  93. .addClass('col-md-4 ')
  94. .append( $nextPicture )
  95. .appendTo($item)
  96. .on('click', function(event){
  97. changeImgIncrease(); //обработчик событий на превью
  98. });
  99. $item.appendTo(place);
  100. }
  101. boxArrow(options.place, maxH, 'arrow'); // вызываю свою функцию
  102. if(options.preview == true) { // разрешение на превью
  103. smallGallary(options.place);
  104. }
  105. if (options.key == true) { // разрешение на клавиши
  106. $gallery.on('keyup', function(event) {
  107. if (event.which === 39) {
  108. changeImgIncrease();
  109. }else if(event.which === 37) {
  110. changeImgDecrease();
  111. }
  112. })
  113. }
  114. });
  115. }
  116. })(jQuery);