Skip to content

Instantly share code, notes, and snippets.

@iamchristough
Created November 13, 2017 11:47
Show Gist options
  • Save iamchristough/771a5ce0652b4fb3842c4144eaec8986 to your computer and use it in GitHub Desktop.
Save iamchristough/771a5ce0652b4fb3842c4144eaec8986 to your computer and use it in GitHub Desktop.
var letters = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","i","u","v","w","x","y","z","~","&","|","^","ç","@","]","[","{","}","ù","*","µ","¤","$","£","€","°",")","(","+","-","/","<",">","²","`","é","è","1","2","3","4","5","6","7","8","9","0"];
var activeClass = 'is-active';
var wrapperClass = '.js-text-animate-wrapper';
var stringClass = '.js-text-animate';
var charClass = 'char';
var $string = $(wrapperClass);
$string.each(textScramble);
function characterWrap($el) {
var text = $el.text();
var chars = text.split('');
var charsWrap = chars.map(function(char) {
return '<span class="' + charClass + '" data-char="' + char + '">' + char + '</span>';
});
var newText = charsWrap.join('');
$el.html(newText);
$el.find('.' + charClass).each(function(index, letter) {
var $letter = $(letter);
var letterWidth = $letter.width();
$letter.css({
'width': letterWidth,
'display': 'inline-block',
});
});
}
function setRandomChar($el) {
var randomIndex = parseInt(Math.random() * letters.length - 1);
$el.text(letters[randomIndex]);
}
function stringAnimate($el) {
$el.find('.' + charClass).each(function (index, letter) {
var $letter = $(letter);
var finalChar = $letter.data('char');
var animationIndex = 0;
var speedMin = 100;
var speedRange = 50;
var speed = speedMin + (Math.random() * speedRange);
var interval = requestInterval(function() {
if (animationIndex <= 4) {
setRandomChar($letter);
animationIndex++;
} else {
$letter.text(finalChar);
$letter.attr('style', '');
clearRequestInterval(interval);
}
}, speed);
});
}
function textScramble(index, wrapper) {
var $wrapper = $(wrapper);
var waypoint = new Waypoint({
element: $wrapper[0],
handler: function() {
$wrapper.addClass(activeClass);
$wrapper.find(stringClass).each(function(index, text) {
var $text = $(text);
characterWrap($text);
$text.find('.' + charClass).each(function (index, letter) {
var $letter = $(letter);
setRandomChar($letter);
});
stringAnimate($text);
});
waypoint.destroy();
},
offset: '75%',
});
}
@iamchristough
Copy link
Author

iamchristough commented Dec 6, 2017

Beware uses jQuery. Need to rewrite into vanilla.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment