Паттерны
Сортировка с помощью таймаута
var numbers = [5,100,14,62,11,0,45,37], result = [], t = 0; numbers.forEach(function(num){ if (num > t) t = num; setTimeout(function(){ result.push(num); }, num); }); setTimeout(function(){ console.log(result) }, t+1);
Правильные окончания числительных
Правильные окончания русского языка у разных групп чисел:1, 21, 31…;2, 3, 4,…22, 23, 24…;остальные. if (count == 1 || (count > 20 && ((count/10 - Math.round(count/10)).toFixed(1) == 0.1))) { count = "сертификат"; } else if (count > 1 && count < 5 || (count > 20 && ((count/10 - Math.round(count/10)).toFixed(1) > 0.1 && (count/10 - Math.round(count/10)).toFixed(1) < 0.5))) { count = "сертификата"; } else { count = "сертификатов"; }
Angular: конвертация строки в число
Директива для преобразования строки в число: .directive("convertToNumber", function() { return { require: "ngModel", link: function(scope, element, attrs, ngModel) { ngModel.$parsers.push(function(val) { return val != null ? parseInt(val, 10) : null; }); ngModel.$formatters.push(function(val) { return val != null ? "" + val : null; }); } }; });
Разбиение чисел на разряды
Требуется разбить произвольное число, если оно более 999, на разряды при помощи точки. В общем случае функция такая:
Приведение случайного массива в порядок
Дан массив чисел. Порядок случайный, есть повторяющиеся числа. Нужно привести в сортированный вид без повторений.Решение: array = array.sort(); for (var i = 0; i < array.length; i++) { for (var j = i + 1; j < array.length;) { if (array[i] == array[j]) { array.splice(j, 1); } else { j++; } } }
Случайное целое число в пределах
var num = Math.floor(Math.random() * (max - min + 1)) + min;
Закрыть хэш
Контекст: открываем всплывающее окно с хэшем, закрываем окно, остаётся чистый url, без ‘#’ history.pushState("", document.title, window.location.pathname);
Запрет ввода буквенных и специальных символов
$('input').on('keydown', function(event){ var x = event.keyCode; if ((event.keyCode > 64 && event.keyCode < 91) || (event.keyCode > 185 && event.keyCode < 193) || (event.keyCode > 218 && event.keyCode < 223) || (event.keyCode == 61) || (event.keyCode == 123) || (event.keyCode == 173) || (event.keyCode == 59) || (event.keyCode == 106) || (event.keyCode == 107) || (event.keyCode == 109) || (event.keyCode == 111)) return false; });
Кнопки “Поделиться” для соцсетей
Facebook: $('.fb-button').click(function(){ myWin = open("http://www.facebook.com/sharer.php?u=http://maksimslepov.ru", "displayWindow","width=520,height=300,left=400,top=300,status=no,toolbar=no,menubar=no"); return false; }); Twitter: $('.twitter-button').click(function(){ myWin = open("http://twitter.com/share?text=@webdesign&url=http://maksimslepov.ru", "displayWindow","width=520,height=300,left=400,top=300,status=no,toolbar=no,menubar=no"); return false; }); Вконтакте: $('.vk-button').click(function(){ myWin = open("http://vkontakte.ru/share.php?url=http://maksimslepov.ru", "displayWindow","width=520,height=300,left=400,top=300,status=no,toolbar=no,menubar=no"); return false; });
Паттерн для валидации email
Валидация email. Допускаем, что в имя ящика содержит латинские буквы, цифры, точку, подчёркивание или дефис, имя хоста русскими или латинским буквами, цифрами или с дефисом, имя зоны русскими или латинскими, от 2 до 6 знаков var patt = /^[.a-z0-9_-]+@[а-яА-Яa-z0-9-]+\.[а-яА-Яa-zA-Z]{2,6}$/i;
Дата в подписи сайта
Простой скрипт, чтобы выводить текущий год в подписи сайта внизу <script type=«text/javascript»> var d = new Date(); document.write(d.getFullYear() + « г.»); </script>
Получение координатов мыши
$('.someelement').on('click', function(element) { var x = element.pageX, y = element.pageY; });
Запуск функции при повороте экрана
$(window).on('orientationchange', function(){ clearTimeout(oc_timer); oc_timer = setTimeout(function () { // здесь функции, которые должны запускаться }, 200); change_counter ++; });