1(function($, undefined) { 2 jQuery.fn.maxCarousel = function(options) { 3 4 var defaults = { 5 animation: { 6 animationMargins: false, //вид анимаÑии: анимиÑованнÑе margins 7 animationVisibility: false //анимиÑованнÑе пеÑÐµÑ Ð¾Ð´Ñ Ð¿Ñи пÑокÑÑÑке 8 }, 9 rolledElements: 1 10 }; 11 12 options = $.extend({}, defaults, options);//пеÑвÑй пÑÑÑой обÑÐµÐºÑ Ð½Ñжен Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð³ вÑзваÑÑ 13 //меÑод Ñ Ð´ÐµÑолÑнÑми наÑÑÑойками, поÑле Ñого, как Ñказал какие-Ñо опÑии. 14 15 /*опÑеделÑÑ Ð¾Ð±ÑÐµÐºÑ Ðº коÑоÑÐ¾Ð¼Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ пÑикÑепиÑÑ ÐºÐ°ÑÑÑелÑ*/ 16 var $this = $(this); 17 18 return $this.each(function() { 19 /*Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ Ð´Ð»Ñ Ð¸Ð½Ð¸ÑиализаÑии каждой каÑÑÑели*/ 20 var $this = $(this); 21 var $list, 22 $item, 23 $itemWidth, 24 $listLength, 25 $leftArrow, 26 $rightArrow, 27 $mainParent, 28 $visibleElements = 0,//колиÑеÑÑво видимÑÑ ÑлеменÑов 29 currentPosition = 0, // ÑекÑÑÐ°Ñ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ ÐºÐ°ÑÑÑели 30 currentItem = 0,//ÑÑеÑÑик ÑекÑÑей позиÑии, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾ÑоÑого опÑеделÑÑ Ð¿Ð°ÑамеÑÑÑ Ð´Ð»Ñ Ð¿ÑокÑÑÑки 31 listPositionX = 0, //позиÑÐ¸Ñ ÐºÐ°ÑÑÑели по Ñ (нÑжно Ð´Ð»Ñ Ð¿ÐµÑеÑаÑкиваниÑ) 32 listCurrentPosition = 0, //позиÑÐ¸Ñ ÐºÐ°ÑÑÑели по Ñ (нÑжно Ð´Ð»Ñ Ð¿ÐµÑеÑаÑкиваниÑ) Ð´Ð»Ñ offset 33 listPositionDiff = 0,//ÑазниÑа Ð¼ÐµÐ¶Ð´Ñ ÐºÐ¾Ð¾ÑдинаÑами мÑÑи, нÑжна ÑÑÐ¾Ð±Ñ ÑзнаÑÑ Ð² какÑÑ ÑÑоÑÐ¾Ð½Ñ ÐºÑÑÑиÑÑ ÐºÐ°ÑÑÑÐµÐ»Ñ 34 listCurrentPageX = 0, //позиÑÐ¸Ñ ÐºÑÑÑоÑа на mousedown нÑжно Ð´Ð»Ñ Ð¿ÑовеÑки пеÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ 35 pullPositionUp = 0 //позиÑÐ¸Ñ ÐºÑÑÑоÑа пÑи mouseup, Ð´Ð»Ñ Ð¿ÑовеÑки двинÑли ли каÑÑÑÐµÐ»Ñ Ð¸Ð»Ð¸ пÑоÑÑо нажали 36 37if (screen.width<=550) 38{ 39 rollItems = 1 //колиÑеÑÑво пÑокÑÑÑиваемÑÑ ÑлеменÑов 40} 41else { 42 43 rollItems = 1 //колиÑеÑÑво пÑокÑÑÑиваемÑÑ ÑлеменÑов 44} 45 46 var carousel = { 47 init: function() { 48 this.updateVars(); 49 this.bindEvent(); 50 }, 51 updateVars: function() { 52 $mainParent = $this; 53 $list = $('ul', $mainParent); 54 $item = $('ul li', $mainParent); 55 $listLength = $item.length; 56 $itemWidth = $item.outerWidth(true); 57 $leftArrow = $('.maxcarousel__l-arr', $mainParent); 58 $rightArrow = $('.maxcarousel__r-arr', $mainParent); 59 }, 60 bindEvent: function() { 61 /*ÐинималÑÐ½Ð°Ñ ÑиÑина вÑей каÑÑÑели (wrapper)*/ 62 $mainParent.css({'min-width': $item.eq(0).outerWidth(true) + 63 $leftArrow.outerWidth(true) + $rightArrow.outerWidth(true)}); 64 65 /*ÐакÑималÑÐ½Ð°Ñ ÑиÑина вÑей каÑÑÑели (wrapper)*/ 66 var maxCarouselWidth = $item.eq(0).outerWidth(true)*$listLength + 67 $leftArrow.outerWidth(true) + $rightArrow.outerWidth(true); 68 69 $mainParent.css({'max-width': maxCarouselWidth}); 70 71 /*ÐÑклÑÑÐ°Ñ Ð»ÐµÐ²ÑÑ ÐºÐ½Ð¾Ð¿ÐºÑ Ð² Ñамом наÑале*/ 72 if (currentItem === 0) { 73 addDisabled($leftArrow); 74 } 75 76 this.leftClick(); 77 this.rightClick(); 78 this.scrollUser(); 79 this.resize(); 80 }, 81 leftClick: function() {
82 /*СобÑÑÐ¸Ñ Ð½Ð° левом клике*/ 83 $leftArrow.on('click touchstart', function() { 84 85 /*РпÑоÑеÑÑе анимаÑии оÑклÑÑÐ°Ñ ÐºÐ»Ð¸ÐºÐ¸*/ 86 if ($item.is(':animated')) { return false; } 87 88 /*оÑклÑÑÐ°Ñ Ð°Ð½Ð¸Ð¼Ð°ÑÐ¸Ñ Ð´Ð»Ñ Ð¼Ð°Ñгинов*/ 89 $item.stop(true, true); 90 91 /*еÑли видимÑÑ ÑлеменÑов ÑÑолÑко же ÑколÑко Ð¸Ñ Ð²Ñего*/ 92 if ($visibleElements >= $listLength) { 93 addDisabled($leftArrow); 94 addDisabled($rightArrow); 95 return false; 96 } 97 98 removeDisabled($rightArrow); 99 100 /*ÐÑли ÑпиÑок в Ñамом наÑале или Ñ Ð»ÐµÐ²Ð¾Ð¹ кнопки клаÑÑ disabled, 101 или Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð²Ñе ÑлеменÑÑ Ð¾ÑклÑÑÐ°Ñ Ð»ÐµÐ²ÑÑ ÐºÐ½Ð¾Ð¿ÐºÑ*/ 102 if ( $(this).hasClass('disabled') || currentItem <= 0 || $visibleElements >= $listLength) { 103 addDisabled($leftArrow); 104 return false; 105 } 106 107 /*Ð¡Ð»ÐµÐ¶Ñ Ð·Ð° номеÑом ÑлеменÑа пÑи Ñдвиге влево*/ 108 currentItem -= rollItems; 109 110 /*ÐÑÑÑиÑÑÐ²Ð°Ñ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ ÑлеменÑа пÑи клике на левÑÑ ÑÑÑелкÑ*/ 111 currentPosition += $itemWidth*rollItems; 112 $list.stop(); 113 $list.animate({ left: currentPosition }, function() { 114 if(currentItem <= 0) { 115 currentItem = 0; 116 currentPosition = 0; 117 addDisabled($leftArrow); 118 $list.animate({ left: currentPosition }); 119 } 120 }); 121 122 /*ÐапÑÑк каÑÑомной анимаÑии*/ 123 if (options.animationMargins) { 124 animateMargin($item, 'margin-left', 20); 125 } 126 127 if (options.animationVisibility) { 128 animateVisiability($item); 129 } 130 131 }); 132 }, 133 rightClick: function() { 134 /*СобÑÑÐ¸Ñ Ð½Ð° пÑавом клике*/ 135 $rightArrow.on('click touchstart', function() { 136 /*РпÑоÑеÑÑе анимаÑии оÑклÑÑÐ°Ñ ÐºÐ»Ð¸ÐºÐ¸*/ 137 if ($item.is(':animated')) { return false; } 138 139 /*оÑклÑÑÐ°Ñ Ð°Ð½Ð¸Ð¼Ð°ÑÐ¸Ñ Ð´Ð»Ñ Ð¼Ð°Ñгинов*/ 140 $item.stop(true, true); 141 142 removeDisabled($leftArrow); 143 144 /*еÑли видимÑÑ ÑлеменÑов ÑÑолÑко же ÑколÑко Ð¸Ñ Ð²Ñего*/ 145 if ($visibleElements >= $listLength) { 146 addDisabled($leftArrow); 147 addDisabled($rightArrow); 148 return false; 149 } 150 151 /*ÐÑовеÑка на конеÑнÑй ÑлеменÑ*/ 152 if ( ($listLength - $visibleElements) <= currentItem ) { 153 addDisabled($rightArrow); 154 removeDisabled($leftArrow); 155 return false; 156 } else { 157 /*Ð¡Ð»ÐµÐ¶Ñ Ð·Ð° номеÑом ÑлеменÑа пÑи Ñдвиге впÑаво*/ 158 currentItem += rollItems; 159 /*ÐÑÑÑиÑÑÐ²Ð°Ñ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ ÑлеменÑа пÑи клике на пÑавÑÑ ÑÑÑелкÑ*/ 160 currentPosition -= $itemWidth*rollItems; 161 $list.stop(); 162 $list.animate({ left: currentPosition }, function() { 163 if(($listLength - $visibleElements) <= currentItem) { 164 currentItem = $listLength - $visibleElements; 165 addDisabled($rightArrow); 166 currentPosition = -(currentItem)*$itemWidth; 167 $list.animate({ left: currentPosition }); 168 } 169 }); 170 } 171 172 /*ÐÑклÑÑÐ°Ñ Ð¿ÑавÑÑ ÐºÐ½Ð¾Ð¿ÐºÑ Ð½Ð° конеÑном ÑелеменÑе*/ 173 if ( ($listLength - $visibleElements) <= currentItem ) { 174 addDisabled($rightArrow); 175 } 176 177 /*ÐапÑÑк каÑÑомной анимаÑии*/ 178 if (options.animationMargins) { 179 animateMargin($item, 'margin-right', 30); 180 } 181 182 if (options.animationVisibility) { 183 animateVisiability($item); 184 } 185 186 }); 187 }, 188 189 scrollUser: function() { 190 191 }, 192 193 194 resize: function() { 195 $(window).on('resize', function() { 196 197 /*РаÑÑÑиÑÑÐ²Ð°Ñ ÑиÑÐ¸Ð½Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ ÑодиÑÐµÐ»Ñ Ð±ÐµÐ· ÑÑÑелок*/ 198 var $parentWidthNoArrows = $mainParent.outerWidth(true) - 199 $leftArrow.outerWidth(true) - $rightArrow.outerWidth(true); 200 201 /*РаÑÑÑиÑÑÐ²Ð°Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑво видимÑÑ ÑлеменÑов*/ 202 $visibleElements = Math.floor($parentWidthNoArrows / $item.eq(0).outerWidth(true)); 203 204 /*ÑÑловие Ð´Ð»Ñ ÑменÑÑение каÑÑÑели, но до 1 ÑлеменÑа и огÑаниÑение на ÑвелиÑение видимÑÑ ÑлеменÑов болÑÑе 205 Ñем ÑелеменÑов ÑпиÑка*/ 206 if ($visibleElements === 0) { 207 $visibleElements = 1; 208 } else if ($visibleElements > $listLength) { 209 $visibleElements = $listLength; 210 } 211 212 /*РаÑcÑиÑÑÐ²Ð°Ñ ÑиÑÐ¸Ð½Ñ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенного ÑодиÑелÑ*/ 213 var $parentWidth = $visibleElements * $item.eq(0).outerWidth(true); 214 $list.parent().css({ 215 'width': $parentWidth, 216 'min-width': $item.eq(0).outerWidth(true), 217 'max-width': $item.eq(0).outerWidth(true)*$visibleElements 218 }); 219 220 /*оÑклÑÑÐ°Ñ Ð¿ÑавÑÑ Ð¸ левÑÑ ÐºÐ½Ð¾Ð¿ÐºÑ, когда колиÑеÑÑво ÑлеменÑов в ÑпиÑке = колиÑеÑÑÐ²Ñ Ð²Ð¸Ð´Ð¸Ð¼ÑÑ ÑлеменÑов*/ 221 if ($visibleElements >= $listLength) { 222 addDisabled($rightArrow); 223 addDisabled($leftArrow); 224 } else { 225 removeDisabled($rightArrow); 226 } 227 228 /*пÑи ÑвелиÑении/ÑменÑÑении каÑÑÑели ÑбÑаÑÑÐ²Ð°Ñ Ð²Ñе паÑамеÑÑÑ*/ 229 currentItem = 0; 230 currentPosition = 0; 231 $list.css({'left': 0}); 232 addDisabled($leftArrow); 233 }); 234 235 /*ÐÑменÑÑ Ð²Ñделение*/ 236 $mainParent.attr('unselectable','on') 237 .css({
238 '-moz-user-select':'none', 239 '-o-user-select':'none', 240 '-khtml-user-select':'none', 241 '-webkit-user-select':'none', 242 '-ms-user-select':'none', 243 'user-select':'none' 244 }).on('selectstart', function(){ return false; }); 245 246 $(window).resize(); 247 } 248 }; 249 250 /*helpers functions*/ 251 function addDisabled(item) { 252 item.addClass('is-disabled'); 253 } 254 255 function removeDisabled(item) { 256 item.removeClass('is-disabled'); 257 } 258 259 function animateMargin(items, side, value) { 260 items.stop(true, true); //оÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°Ñ Ð°Ð½Ð¸Ð¼Ð°ÑÐ¸Ñ 261 var w = items.eq(0).outerWidth(), //ÑÐ·Ð½Ð°Ñ Ð¼Ð°Ñгин Ð´Ð»Ñ ÑлеменÑа 262 w1 = items.eq(0).outerWidth(true), 263 dif = (w1-w)/2; 264 var anim = {}; 265 var anim1 = {}; 266 anim1[side] = dif; 267 anim[side] = dif + value; 268 269 items.animate(anim, 300).animate(anim1, 300); 270 } 271 272 function animateVisiability(items) { 273 items.stop(true, true); //оÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°Ñ Ð°Ð½Ð¸Ð¼Ð°ÑÐ¸Ñ 274 items.animate({'opacity': 0}, 200).delay(200).animate({'opacity': 1}, 100); 275 } 276 277 carousel.init(); 278 279 }); 280 281 };//end of maxCarousel 282 283})(jQuery); 284 285$('.maxcarousel').maxCarousel({rolledElements: 1}); 286
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.