1jQuery.widget('gc.animatedBlock', { 2 // минималÑное вÑÐµÐ¼Ñ Ð¼ÐµÐ¶Ð´Ñ Ð¾Ð±ÑабоÑками ÑобÑÑÐ¸Ñ scroll 3 SCROLL_HANDLE_TIMEOUT: 400, 4 // Ðанное знаÑение ÑменÑÑÐ°ÐµÑ ÐºÐ¾Ð¾ÑдинаÑÑ Ð½Ð¸Ð¶Ð½ÐµÐ¹ гÑаниÑÑ screen Ð·Ð¾Ð½Ñ (еÑли в зоне, Ñо запÑÑкаеÑÑÑ Ð°Ð½Ð¸Ð¼Ð°ÑиÑ) 5 SCREEN_BOTTOM_GAP: 50, 6 // ÐадеÑжка Ð¼ÐµÐ¶Ð´Ñ Ð·Ð°Ð¿ÑÑком анимаÑии ÑлеменÑов пÑи поÑÑдке анимаÑии "по оÑеÑеди" (и пеÑед пеÑвÑм запÑÑком) 7 ANIMATION_DELAY: 300, 8 9 ANIMATION_ORDER_IN_TURN: 'in-turn', 10 ANIMATION_ORDER_AT_ONCE: 'at-once', 11 12 ANIMATION_MODE_APPEAR: 'appear', 13 ANIMATION_MODE_INCREASE: 'increase', 14 ANIMATION_MODE_SLIDE_FROM_LEFT: 'slide-from-left', 15 ANIMATION_MODE_SLIDE_FROM_RIGHT: 'slide-from-right', 16 ANIMATION_MODE_SLIDE_FROM_TOP: 'slide-from-top', 17 ANIMATION_MODE_SLIDE_FROM_BOTTOM: 'slide-from-bottom', 18 19 // Ð¢Ð°Ð¹Ð¼ÐµÑ Ð´Ð»Ñ Ð±Ð»Ð¾ÐºÐ¸Ñовки обÑабоÑки ÑкÑолла, ÑÑÐ¾Ð±Ñ Ð¾Ð³ÑаниÑиÑÑ ÑаÑÑоÑÑ Ð¾Ð±ÑабоÑки 20 timerId: null, 21 // Ð¢Ð°Ð¹Ð¼ÐµÑ Ð´Ð»Ñ ÑанÑомной обÑабоÑки ÑкÑолла. Ðз-за огÑаниÑÐµÐ½Ð¸Ñ ÑаÑÑоÑÑ Ð¾Ð±ÑабоÑки Ð¼Ñ Ð¿ÑопÑÑкаем ÑобÑÑиÑ, поÑÐ¾Ð¼Ñ 22 // когда ÑобÑÑÐ¸Ñ Ð¿ÐµÑеÑÑали поÑÑÑпаÑÑ, нÑжно Ð´Ð»Ñ Ð²ÐµÑноÑÑи обÑабоÑÐºÑ Ð²ÑзваÑÑ 23 phantomTimerId: null, 24 _create: function () { 25 var self = this; 26 27 if ($(window).width() < 1024) { 28 // ÐÑли ÑиÑина менÑÑе 1024, Ñо ÑÑÐ°Ð·Ñ Ð²Ñе показаÑÑ Ð±ÐµÐ· анимаÑии 29 self.element.find('.animated-element').removeClass('animated-element'); 30 } else { 31 self.setScrollHandler(); 32 33 // ÐоÑле загÑÑзки в пеÑвÑй Ñаз ÑÑÐ°Ð·Ñ Ð¸Ð½Ð¸ÑииÑÑем ÑобÑÑие Ð´Ð»Ñ Ð¿ÐµÑеÑÑеÑа анимаÑии 34 setTimeout(function () { 35 $(window).scroll(); 36 }, self.ANIMATION_DELAY); 37 } 38 }, 39 setScrollHandler: function() { 40 var self = this; 41 42 $(window).scroll(function(event) { 43 if (!self.timerId) { 44 // СбÑаÑÑваем ÑÐ°Ð¹Ð¼ÐµÑ ÑанÑомной обÑабоÑки 45 clearTimeout(self.phantomTimerId); 46 self.phantomTimerId = null; 47 48 // ÐлокиÑÑем обÑабоÑÐºÑ ÑкÑолла на некоÑоÑое вÑемÑ, ÑÑÐ¾Ð±Ñ ÑлиÑком ÑаÑÑо не обÑабаÑÑваÑÑ ÑобÑÑие 49 self.timerId = setTimeout(function() { 50 self.timerId = null; 51 }, self.SCROLL_HANDLE_TIMEOUT); 52 53 self.recalculateAnimation(); 54 } else { 55 // СмоÑÑи ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ Ðº обÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑеменной phantomTimerId 56 if (!self.phantomTimerId) { 57 self.phantomTimerId = setTimeout(function () { 58 self.phantomTimerId = null; 59 self.recalculateAnimation(); 60 }, self.SCROLL_HANDLE_TIMEOUT); 61 } 62 } 63 }); 64 }, 65 animateElement: function($element) { 66 // Ðа, вÑе Ñак пÑоÑÑо. ÐÑе ÑеÑез css делаеÑÑÑ. 67 $element.removeClass('before-animation'); 68 69 // ТепеÑÑ ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñле оконÑÐ°Ð½Ð¸Ñ Ð°Ð½Ð¸Ð¼Ð°Ñии ÑбеÑем клаÑÑ Ñо вÑеми ÑÑилÑми Ð´Ð»Ñ Ð½ÐµÐµ, поÑÐ¾Ð¼Ñ ÑÑо ÑÑÐ¸Ð»Ñ transform 70 // Ð²ÐµÐ´ÐµÑ Ðº ÑомÑ, ÑÑо Ñлой пÑоÑвеÑÐ¸Ð²Ð°ÐµÑ ÑеÑез вÑÑележаÑие, а в ÑедакÑиÑовании блоков еÑÑÑ Ð²ÑплÑваÑка Ñ Ð¿Ð°ÑамеÑÑами 71 var animationDuration = parseFloat($element.css('transition-duration')) * 1000; 72 setTimeout(function() { 73 $element.removeClass('animated-element'); 74 }, animationDuration); 75 }, 76 recalculateAnimation: function() { 77 var self = this; 78 var screenTop = $(window).scrollTop(); 79 var screenBottom = screenTop + $(window).height() - self.SCREEN_BOTTOM_GAP; 80 var animationOrder = self.element.data('animation-order'); 81 82 var nextElementTimeout = 0; 83 // ÐÑбиÑаем ÑлеменÑÑ, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ ÐµÑе не ÑÑабоÑала анимаÑиÑ. ÐÑклÑÑаем Ñе, на коÑоÑÑе Ñже повеÑен ÑÐ°Ð¹Ð¼ÐµÑ Ð½Ð° запÑÑк анимаÑии 84 self.element.find('.animated-element.before-animation').not('.animation-will-start-soon').each(function() { 85 var $el = $(this); 86 if (self.isOnScreen($el, screenTop, screenBottom)) { 87 if (animationOrder === self.ANIMATION_ORDER_AT_ONCE) { 88 self.animateElement($el); 89 } else { 90 $el.addClass('animation-will-start-soon'); 91 setTimeout(function () { 92 $el.removeClass('animation-will-start-soon'); 93 self.animateElement($el); 94 }, nextElementTimeout); 95 nextElementTimeout += self.ANIMATION_DELAY; 96 } 97 } 98 }); 99 100 }, 101 isOnScreen: function($el, screenTop, screenBottom) { 102 var elPull = parseInt($el.css('transform').split(',')[5]); 103 if (elPull !== 0) { 104 // Ðелаем коÑÑекÑÐ¸Ñ Ð½Ð° ÑÑÑеÑÑвÑÑÑий Ñдвиг ÑлеменÑа по оÑи y (Ñделан в css в каÑеÑÑве наÑалÑной позиÑии пеÑед анимаÑией) 105 screenBottom += elPull; 106 } 107 var elTop = $el.offset().top; 108 var elBottom = elTop + $el.height(); 109 return elBottom > screenTop && elTop < screenBottom; 110 } 111});
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.