| (function($){ |
| $(function(){ |
| |
| $('.button-collapse').sideNav(); |
| $('.scrollspy').scrollSpy(); |
| |
| /*** Animate word ***/ |
| |
| //set animation timing |
| var animationDelay = 2500, |
| //loading bar effect |
| barAnimationDelay = 3800, |
| barWaiting = barAnimationDelay - 3000, //3000 is the duration of the transition on the loading bar - set in the scss/css file |
| //letters effect |
| lettersDelay = 50, |
| //type effect |
| typeLettersDelay = 150, |
| selectionDuration = 500, |
| typeAnimationDelay = selectionDuration + 800, |
| //clip effect |
| revealDuration = 600, |
| revealAnimationDelay = 1500; |
| |
| initHeadline(); |
| |
| |
| function initHeadline() { |
| singleLetters($('.cd-headline.letters').find('b')); |
| animateHeadline($('.cd-headline')); |
| } |
| |
| function singleLetters($words) { |
| $words.each(function(){ |
| var word = $(this), |
| letters = word.text().split(''), |
| selected = word.hasClass('is-visible'); |
| for (i in letters) { |
| if(word.parents('.rotate-2').length > 0) letters[i] = '<em>' + letters[i] + '</em>'; |
| letters[i] = (selected) ? '<i class="in">' + letters[i] + '</i>': '<i>' + letters[i] + '</i>'; |
| } |
| var newLetters = letters.join(''); |
| word.html(newLetters).css('opacity', 1); |
| }); |
| } |
| |
| function animateHeadline($headlines) { |
| var duration = animationDelay; |
| $headlines.each(function(){ |
| var headline = $(this); |
| |
| if(headline.hasClass('loading-bar')) { |
| duration = barAnimationDelay; |
| setTimeout(function(){ headline.find('.cd-words-wrapper').addClass('is-loading') }, barWaiting); |
| } else if (headline.hasClass('clip')){ |
| var spanWrapper = headline.find('.cd-words-wrapper'), |
| newWidth = spanWrapper.width() + 10 |
| spanWrapper.css('width', newWidth); |
| } else if (!headline.hasClass('type') ) { |
| //assign to .cd-words-wrapper the width of its longest word |
| var words = headline.find('.cd-words-wrapper b'), |
| width = 0; |
| words.each(function(){ |
| var wordWidth = $(this).width(); |
| if (wordWidth > width) width = wordWidth; |
| }); |
| headline.find('.cd-words-wrapper').css('width', width); |
| }; |
| |
| //trigger animation |
| setTimeout(function(){ hideWord( headline.find('.is-visible').eq(0) ) }, duration); |
| }); |
| } |
| |
| function hideWord($word) { |
| var nextWord = takeNext($word); |
| |
| if($word.parents('.cd-headline').hasClass('type')) { |
| var parentSpan = $word.parent('.cd-words-wrapper'); |
| parentSpan.addClass('selected').removeClass('waiting'); |
| setTimeout(function(){ |
| parentSpan.removeClass('selected'); |
| $word.removeClass('is-visible').addClass('is-hidden').children('i').removeClass('in').addClass('out'); |
| }, selectionDuration); |
| setTimeout(function(){ showWord(nextWord, typeLettersDelay) }, typeAnimationDelay); |
| |
| } else if($word.parents('.cd-headline').hasClass('letters')) { |
| var bool = ($word.children('i').length >= nextWord.children('i').length) ? true : false; |
| hideLetter($word.find('i').eq(0), $word, bool, lettersDelay); |
| showLetter(nextWord.find('i').eq(0), nextWord, bool, lettersDelay); |
| |
| } else if($word.parents('.cd-headline').hasClass('clip')) { |
| $word.parents('.cd-words-wrapper').animate({ width : '2px' }, revealDuration, function(){ |
| switchWord($word, nextWord); |
| showWord(nextWord); |
| }); |
| |
| } else if ($word.parents('.cd-headline').hasClass('loading-bar')){ |
| $word.parents('.cd-words-wrapper').removeClass('is-loading'); |
| switchWord($word, nextWord); |
| setTimeout(function(){ hideWord(nextWord) }, barAnimationDelay); |
| setTimeout(function(){ $word.parents('.cd-words-wrapper').addClass('is-loading') }, barWaiting); |
| |
| } else { |
| switchWord($word, nextWord); |
| setTimeout(function(){ hideWord(nextWord) }, animationDelay); |
| } |
| } |
| |
| function showWord($word, $duration) { |
| if($word.parents('.cd-headline').hasClass('type')) { |
| showLetter($word.find('i').eq(0), $word, false, $duration); |
| $word.addClass('is-visible').removeClass('is-hidden'); |
| |
| } else if($word.parents('.cd-headline').hasClass('clip')) { |
| $word.parents('.cd-words-wrapper').animate({ 'width' : $word.width() + 10 }, revealDuration, function(){ |
| setTimeout(function(){ hideWord($word) }, revealAnimationDelay); |
| }); |
| } |
| } |
| |
| function hideLetter($letter, $word, $bool, $duration) { |
| $letter.removeClass('in').addClass('out'); |
| |
| if(!$letter.is(':last-child')) { |
| setTimeout(function(){ hideLetter($letter.next(), $word, $bool, $duration); }, $duration); |
| } else if($bool) { |
| setTimeout(function(){ hideWord(takeNext($word)) }, animationDelay); |
| } |
| |
| if($letter.is(':last-child') && $('html').hasClass('no-csstransitions')) { |
| var nextWord = takeNext($word); |
| switchWord($word, nextWord); |
| } |
| } |
| |
| function showLetter($letter, $word, $bool, $duration) { |
| $letter.addClass('in').removeClass('out'); |
| |
| if(!$letter.is(':last-child')) { |
| setTimeout(function(){ showLetter($letter.next(), $word, $bool, $duration); }, $duration); |
| } else { |
| if($word.parents('.cd-headline').hasClass('type')) { setTimeout(function(){ $word.parents('.cd-words-wrapper').addClass('waiting'); }, 200);} |
| if(!$bool) { setTimeout(function(){ hideWord($word) }, animationDelay) } |
| } |
| } |
| |
| function takeNext($word) { |
| return (!$word.is(':last-child')) ? $word.next() : $word.parent().children().eq(0); |
| } |
| |
| function takePrev($word) { |
| return (!$word.is(':first-child')) ? $word.prev() : $word.parent().children().last(); |
| } |
| |
| function switchWord($oldWord, $newWord) { |
| $oldWord.removeClass('is-visible').addClass('is-hidden'); |
| $newWord.removeClass('is-hidden').addClass('is-visible'); |
| } |
| |
| $('.button-collapse').sideNav({ |
| menuWidth: 240, // Default is 240 |
| closeOnClick: true // Closes side-nav on <a> clicks, useful for Angular/Meteor |
| }); |
| |
| $('.parallax').parallax(); |
| |
| var card = document.querySelectorAll('.card-work'); |
| var transEndEventNames = { |
| 'WebkitTransition' : 'webkitTransitionEnd', |
| 'MozTransition' : 'transitionend', |
| 'transition' : 'transitionend' |
| }, |
| transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ]; |
| |
| function addDashes(name) { |
| return name.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }); |
| } |
| |
| function getPopup(id) { |
| return document.querySelector('.popup[data-popup="' + id + '"]'); |
| } |
| |
| function getDimensions(el) { |
| return el.getBoundingClientRect(); |
| } |
| |
| function getDifference(card, popup) { |
| var cardDimensions = getDimensions(card), |
| popupDimensions = getDimensions(popup); |
| |
| return { |
| height: popupDimensions.height / cardDimensions.height, |
| width: popupDimensions.width / cardDimensions.width, |
| left: popupDimensions.left - cardDimensions.left, |
| top: popupDimensions.top - cardDimensions.top |
| } |
| } |
| |
| function transformCard(card, size) { |
| return card.style[Modernizr.prefixed('transform')] = 'translate(' + size.left + 'px,' + size.top + 'px)' + ' scale(' + size.width + ',' + size.height + ')'; |
| } |
| |
| function hasClass(elem, cls) { |
| var str = " " + elem.className + " "; |
| var testCls = " " + cls + " "; |
| return(str.indexOf(testCls) != -1) ; |
| } |
| |
| function closest(e) { |
| var el = e.target || e.srcElement; |
| if (el = el.parentNode) do { //its an inverse loop |
| var cls = el.className; |
| if (cls) { |
| cls = cls.split(" "); |
| if (-1 !== cls.indexOf("card-work")) { |
| return el; |
| break; |
| } |
| } |
| } while (el = el.parentNode); |
| } |
| |
| function scaleCard(e) { |
| var el = closest(e); |
| var target = el, |
| id = target.getAttribute('data-popup-id'), |
| popup = getPopup(id); |
| |
| var size = getDifference(target, popup); |
| |
| target.style[Modernizr.prefixed('transitionDuration')] = '0.5s'; |
| target.style[Modernizr.prefixed('transitionTimingFunction')] = 'cubic-bezier(0.4, 0, 0.2, 1)'; |
| target.style[Modernizr.prefixed('transitionProperty')] = addDashes(Modernizr.prefixed('transform')); |
| target.style['borderRadius'] = 0; |
| |
| transformCard(target, size); |
| onAnimated(target, popup); |
| onPopupClick(target, popup); |
| } |
| |
| function onAnimated(card, popup) { |
| card.addEventListener(transEndEventName, function transitionEnded() { |
| card.style['opacity'] = 0; |
| popup.style['visibility'] = 'visible'; |
| popup.style['zIndex'] = 9999; |
| card.removeEventListener(transEndEventName, transitionEnded); |
| }); |
| } |
| |
| function onPopupClick(card, popup) { |
| popup.addEventListener('click', function toggleVisibility(e) { |
| var size = getDifference(popup, card); |
| |
| card.style['opacity'] = 1; |
| card.style['borderRadius'] = '6px'; |
| hidePopup(e); |
| transformCard(card, size); |
| }, false); |
| } |
| |
| |
| function hidePopup(e) { |
| e.target.style['visibility'] = 'hidden'; |
| e.target.style['zIndex'] = 2; |
| } |
| |
| // [].forEach.call(card, function(card) { |
| // card.addEventListener('click', scaleCard, false); |
| // }); |
| |
| }); // end of document ready |
| })(jQuery); // end of jQuery name space |