True Frontender
1.01K subscribers
143 photos
7 videos
89 links
Сборная солянка про фронтенд.

JavaScript, React, TypeScript, HTML, CSS — здесь обсуждаем всё, что связано с веб-разработкой!

Связь: @pmowq
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Привет 👋
Завтра наступает один из самых теплых и романтических дней в году - День Святого Валентина! В этот день принято дарить своим любимым не только внимание и заботу, но и небольшие знаки внимания. В этом году я предлагаю вам не ограничиваться бумажными открытками. Я подготовил для вас демо валентинки, сделанной с использованием HTML, CSS.
Посмотреть можно тут - JsFiddle(тык) 🫰

#javascript #html #css
Please open Telegram to view this post
VIEW IN TELEGRAM
14🦄6👍51
Всем привет! Сегодня речь пойдет об свойстве overscroll-behavior. Это свойство позволяет контролировать поведение прокрутки за пределами документа или элемента, то есть когда пользователь достигает края страницы или элемента и продолжает прокручивать. Это особенно актуально в мобильных браузерах, где стандартное поведение может включать эффект "отскока", что не всегда желательно.

overscroll-behavior имеет три возможных значения:
auto - стандартное поведение прокрутки, когда прокрутка может передаваться родительскому элементу.
contain - предотвращает распространение прокрутки на родительский элемент, но сохраняет эффекты прокрутки.
none - полностью предотвращает прокрутку за пределами элемента, включая эффекты.

Пример использования:
body {
overscroll-behavior: none;
}


Этот код предотвратит "отскок" страницы при достижении верхнего или нижнего края в браузерах, поддерживающих это свойство.

Посмотреть и поскроллить можно тут - JsFiddle(тык)

#css
👍15👾5🔥3🤔21
Привет! Сегодня мы разберем один из самых популярных и полезных паттернов проектирования в программировани - паттерн "фабрика".

Что такое фабрика?
Фабрика относится к категории порождающих паттернов проектирования. Суть паттерна заключается в том, чтобы делегировать создание объектов, тем самым избавляя код от прямой зависимости.

Как работает фабрика?
Фабрика предлагает создать отдельный компонент, задача которого - инкапсулировать логику создания объектов. Это значит, что вместо того, чтобы вручную создавать каждый объект с помощью оператора new, вы делегируете эту задачу фабрике, которая определит, какой объект создать, исходя из предоставленных ей данных.

Пример
Допустим, у нас есть приложение, где нужно создавать разные типы уведомлений: error, info, и success. Вместо того, чтобы создавать каждый тип уведомления вручную, мы можем использовать фабрику для упрощения этого процесса.
Пример реализации в прикрепленном изображении.

Преимущества паттерна:
- Паттерн позволяет легко внести изменения в процесс создания объектов, не затрагивая код, который использует эти объекты.
- Добавление новых типов объектов не требует изменений в клиентском коде, достаточно расширить функциональность фабрики.
- Детали создания объектов скрыты от клиента, что упрощает использование и поддержку кода.

Заключение
Фабрика позволяет сделать код более модульным, гибким и легко масштабируемым. Ее использование особенно оправдано, когда в вашем приложении присутствует необходимость создавать различные объекты, следующие общему интерфейсу, но имеющие различную реализацию. Надеюсь, этот пост поможет вам понять и применить паттерн "Фабрика" в ваших проектах.

#javascript #patterns
👍10🔥5👾32
Шпаргалка по базовым типам в TypeScript

#typescript
👍17🔥64
Привет, фронтендеры! 👋

На этой неделе канал достиг первой тысячи подписчиков 🥳! Я не могу выразить всей своей радости от того, что каждый из вас нашёл что-то интересное для себя и подписался. Это по-настоящему мотивирует меня продолжать развивать этот канал.

Огромное спасибо за вашу активность! Ваши вопросы, комментарии и реакция делают этот канал живым. Я надеюсь, что будущие посты будут для вас интересными и полезными, а ваша активность будет и дальше мотивировать меня на создание новых постов)

Хочу напомнить, что под любым постом вы можете предложить тему для постов или предложить любые другие улучшения. Ваше мнение и ваши идеи крайне важны для меня, и я всегда открыт к вашим предложениям и идеям!😉

Спасибо вам за поддержку 🤗
Please open Telegram to view this post
VIEW IN TELEGRAM
34👍75🔥4
С понедельником 💻! Сегодня разберем классику собеседований – реализацию последовательности Фибоначчи.

Что такое последовательность Фибоначчи?
Последовательность Фибоначчи – это ряд чисел, где каждое последующее число является суммой двух предыдущих. Начинается с 0 и 1. То есть, первые числа последовательности выглядят так: 0, 1, 1, 2, 3, 5, 8, 13, 21, и так далее.

Задача
Необходимо реализовать функцию fibonacci, которая принимает на вход число n и возвращает n-ое число последовательности Фибоначчи.

Алгоритм решения:
1. Проверяем, является ли n меньшим или равным 1. Если да, возвращаем n, так как первые два числа последовательности Фибоначчи — это 0 для n = 0 и 1 для n = 1.
2. Инициализируем переменные prev и cur значениями 0 и 1, соответственно, которые представляют первые два числа последовательности.
3. Задаем цикл for от 2 до n включительно для вычисления каждого следующего числа последовательности Фибоначчи.
4. В каждой итерации цикла вычисляем следующее число как сумму prev и cur.
5. Обновляем prev значением cur.
6. Присваиваем только что вычисленное следующее число переменной cur.
7. После завершения цикла возвращаем cur как n-ное число последовательности Фибоначчи.

Решение
function fibonacci(n) {
if (n <= 1) return n;

let prev = 0;
let cur = 1;

for (let i = 2; i <= n; i++) {
const next = prev + cur;
prev = cur;
cur = next;
}

return cur;
}


На самом деле, у этой задачи есть разные варианты решения. Если у вас есть свой вариант решения, не стесняйтесь делиться им в комментариях!

#interview #javascript
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12👾3👨‍💻21
This media is not supported in your browser
VIEW IN TELEGRAM
В веб-разработке важен не только функционал, но и впечатление, которое оставляет сайт. Один из способов улучшить пользовательский опыт - добавить индикатор загрузки. В этом примере мы реализовали лоадер с использованием HTML и CSS, который отображает процесс загрузки с минимальным количеством стилей. Посмотреть код можно здесь - JsFiddle(тык)

#html #css
👍9🔥52👾2
Привет! Сегодня поговорим о не таком уж и часто упоминаемом методе - Array.from. Этот метод позволяет нам создавать новые массивы из различных объектов, которые можно преобразовать в массив.

Что такое Array.from?
Array.from - это статический метод класса Array, который создает новый экземпляр массива из массивоподобного или итерируемого объекта. Другими словами, если у вас есть что-то, что выглядит как массив или ведет себя как массив (например, строка или объект NodeList, полученный с помощью методов DOM, таких как document.querySelectorAll), вы можете превратить это "что-то" в настоящий массив.

Примеры использования
// Преобразование строки в массив
let str = "Привет!";
let strArray = Array.from(str);
console.log(strArray); // ["П", "р", "и", "в", "е", "т", "!"]

// Использование с объектами NodeList
let elements = document.querySelectorAll('div'); // представим, что у нас на странице есть div'ы
let elementsArray = Array.from(elements);
elementsArray.forEach(element => console.log(element)); // теперь с этим массивом можно работать как с обычным массивом


Второй аргумент функции
А вы знали, что есть еще и второй аргумент? Второй аргумент - это функция, которая вызывается для каждого элемента итерируемого объекта, позволяя не только создать массив, но и трансформировать его элементы. Он сокращает необходимость в дополнительных вызовах map, делая код более читаемым и элегантным, а так же уменьшает количество проходов по массиву, что потенциально может повысить производительность вашего кода.

const array = Array.from({length: 10}, (v, i) => i + 1);
console.log(array); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


Преимущества:
- Array.from работает с любыми итерируемыми объектами, давая нам гибкость в обработке данных.
- Преобразует данные в массивы для последующего использования всех методов массива, таких как map, filter, reduce и т.д.
- Помогает избежать мутаций. Создавая новый массив, мы не изменяем исходный объект.

Это был краткий разбор Array.from. Надеюсь, это поможет вам лучше понять, как и когда использовать этот метод.

#javascript
👍174🆒2👏1👨‍💻1
Всем привет! 👋
Сегодня узнаем как при помощи CSS превратить обычный текст в элегантный макет с колонками, как в газете. Мы разберемся, как использовать свойства columns и column-rule, чтобы организовать содержимое страницы более привлекательно и читабельно.

Про свойства
Свойство columns в CSS позволяет легко разделить текст на несколько колонок, делая чтение на длинных страницах более комфортным. Это свойство является шорткатом для column-width (ширина колонки) и column-count (количество колонок), позволяя задавать их одной строкой.

.columns {
columns: 2 200px; /* Ширина колонки 200px и количество колонок 2 */
column-gap: 40px; /* Устанавливаем промежуток между колонками */
}


Свойство column-rule добавляет разделительную линию между колонками, что придает макету дополнительную изысканность и структуру. Оно работает подобно border, но применяется между колонками.

.columns {
column-rule: 2px solid #333; /* Добавляет разделительную линию между колонками */
}


Посмотреть демо можно тут - JsFiddle(тык)

Заключение
Использование свойств columns и column-rule в CSS может значительно ускорить процесс создания адаптивных колонок.

#css
Please open Telegram to view this post
VIEW IN TELEGRAM
👍153🔥3👨‍💻1
Шпаргалка по методам массива

#javascript
👍204👨‍💻4🆒2
Привет 🤝! Сегодня мы разберем функцию compose. Возможно вам не стоит тащить ее в свой проект, так как чаще всего проще использовать готовое решение из библиотек, но будет полезно знать как она работает.

Что за функция compose?
compose - это функция высшего порядка, которая принимает на вход несколько функций и возвращает новую функцию. Эта новая функция, при вызове, запускает цепочку переданных функций так, что результат каждой функции передается как аргумент в следующую. Процесс начинается с крайней правой функции и продвигается к левой.
Это звучит сложно, но на деле все просто.

Пример реализации
function compose(...funcs) {
return function(arg) {
return funcs.reduceRight((acc, fn) => fn(acc), arg);
};
}

// Пример использования
const multiplyBy2 = x => x * 2;
const add3 = x => x + 3;
const subtract4 = x => x - 4;

const doMagic = compose(multiplyBy2, add3, subtract4);

console.log(doMagic(5)); // Результат: 8


В этом примере мы создали три простые функции: multiplyBy2, add3, subtract4. Затем мы использовали compose, чтобы создать новую функцию doMagic, которая применяет эти функции в обратном порядке: сначала вычитает 4, затем добавляет 3, и, наконец, умножает результат на 2.

Зачем использовать?
Использование compose позволяет нам строить сложные операции из простых функций, сохраняя при этом чистоту и читаемость кода. Это не только упрощает отладку и тестирование отдельных частей системы, но и способствует написанию декларативного кода, где мы описываем, что хотим сделать, а не как.

Заключение
compose - это не просто функция, это философия построения кода, где композиция и простота лежат в основе решения сложных задач. Попробуйте применить compose в своих проектах и увидите, как это может изменить ваш подход к написанию кода.

#javascript
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥5👾21🤯1
Вемс тепирв😄! Начнем неделю с разбора не самой сложной, но одной из самых популярных задач. Мы будем работать с анаграммами.

Что такое анаграммы?
Анаграммы - это слова или фразы, полученные путем перестановки букв исходного слова или фразы. Например, "привет" и "тепирв" являются анаграммами.

Задача:
Написать функцию, которая определяет, являются ли две строки анаграммами друг друга.

Алгоритм решения:
1. Сначала обе строки приводятся к нижнему регистру и из них удаляются все символы пробелы. Это делается для того, чтобы избежать различий из-за регистра или пробелов.
2. Для каждой нормализованной строки создается объект, где ключи - это символы строки, а значения - количество их вхождений в строку. Функция buildCharCountMap использует метод reduce для преобразования массива символов строки в объект подсчета символов.
3. Если длины нормализованных строк различаются, то они точно не могут быть анаграммами, и функция возвращает false.
4. Для каждого символа из первой строки проверяется, совпадает ли количество его вхождений в обеих строках, используя созданные карты подсчета символов. Если для любого символа количество вхождений не совпадает, строки не являются анаграммами, и функция возвращает false.
5. Если все предыдущие проверки пройдены успешно, строки являются анаграммами, тогда функция возвращает true.

Решение
function isAnagram(str1, str2) {
const normalize = str => str.replace(/\s+/g, "").toLowerCase();
const buildCharCountMap = str => {
return str.split('').reduce((acc, char) => {
acc[char] = acc[char] + 1 || 1;
return acc;
}, {});
};

const normalizedStr1 = normalize(str1);
const normalizedStr2 = normalize(str2);

if (normalizedStr1.length !== normalizedStr2.length) {
return false;
}

const str1CharCount = buildCharCountMap(normalizedStr1);
const str2CharCount = buildCharCountMap(normalizedStr2);

for (let char in str1CharCount) {
if (str1CharCount[char] !== str2CharCount[char]) {
return false;
}
}

return true;
}

console.log(isAnagram("Привет", "тепирв")); // true
console.log(isAnagram("Привет", "Пока")); // false


Этот пример демонстрирует базовый подход к решению задачи об анаграммах. Мы нормализуем строки, удаляем не нужные символы, сравниваем их длины и подсчитываем количество каждого символа. Если все проверки прошли успешно, строки являются анаграммами.

А у вас есть идеи о том, как можно улучшить или изменить это решение? Или, может быть, у вас есть совершенно другой подход к решению? Делитесь своими мыслями и кодом в комментариях 💻

#javascript #interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥4🆒32
This media is not supported in your browser
VIEW IN TELEGRAM
Привет! Сегодня мы рассмотрим, как с помощью JavaScript создавать плавные анимации без использования сторонних библиотек. Речь пойдет о методе animate() из Web Animations API.

Что такое animate()?
Метод animate() является частью Web Animations API и позволяет добавлять анимации к DOM-элементам напрямую через JavaScript. Этот метод принимает два основных аргумента: массив ключевых кадров (keyframes) и параметры анимации (options).

Как работает animate()?
Ключевые кадры - это объекты, которые описывают стили начального, промежуточного и конечного состояния анимации. Каждый ключевой кадр может содержать одно или несколько свойств CSS, которые вы хотите анимировать.

Параметры анимации - это объект, который может содержать длительность анимации (duration), функцию времени (easing), задержку перед началом (delay), количество повторений (iterations) и многое другое.

Пример использования
Допустим, мы хотим анимировать шар, чтобы он отскакивал. Вот как это можно сделать:
const ball = document.querySelector('.ball');

ball.animate([
{ transform: 'translateY(0)', easing: "ease-in" },
{ transform: 'translateY(40vh)', easing: 'cubic-bezier(.21,.57,.71,1)' },
{ transform: 'translateY(0)', easing: 'ease-out' }
], {
duration: 1500,
iterations: Infinity,
});


В этом примере мы создаем анимацию для элемента с классом .ball, который перемещается по оси Y, создавая эффект подпрыгивания.

Посмотреть демо можно тут - JsFiddle(тык)

Заключение
Метод animate(), предоставляя возможность работать с ключевыми кадрами и настраиваемыми параметрами анимации, без необходимости прибегать к сторонним библиотекам.

#javascript #webapi
👍16🔥62👾21
Привет! Сегодня поговорим о довольно новом, но уже достаточно популярном свойстве CSS - accent-color. Это свойство позволяет разработчикам задавать цвет акцента для элементов форм и других элементов управления. Использование accent-color обеспечивает единообразие стиля элементов.

Что такое accent-color?
accent-color - это свойство CSS, которое позволяет разработчикам устанавливать цвет акцента для элементов формы, таких как флажки (checkbox), переключатели (radio) и ползунки (range). Это свойство применяется к контейнеру элементов управления, автоматически изменяя цвет акцента для всех дочерних элементов управления.

Как работает accent-color?
Применение accent-color очень просто. Вы задаете его для элемента в вашем CSS, и все поддерживаемые элементы управления внутри этого элемента будут использовать указанный цвет акцента. Например:
form {
accent-color: dodgerblue;
}


В этом примере все элементы управления внутри <form> будут использовать dodgerblue в качестве своего цвета акцента.

Посмотреть демо можно тут - JsFiddle(тык)

Заключение
Использование accent-color в вашем CSS - это простой способ улучшить визуальную согласованность. Это свойство дает вам больше контроля над стилизацией элементов формы, позволяя легко адаптировать их под общий стиль вашего интерфейса.

#css
👍15🔥7👀21
Привет, программисты! Сегодня разберем паттерн проектирования "Стратегия". Этот паттерн полезен, когда есть несколько способов выполнения задачи и необходимость легко переключаться между этими способами во время выполнения программы.

Основные приемущества паттерна:
- Помогает скрыть детали реализации алгоритмов от их использования, предоставляя общий интерфейс для выполнения.
- Благодаря общему интерфейсу, различные реализации алгоритмов могут быть легко заменены в зависимости от контекста использования.
- Упрощает добавление новых алгоритмов и изменение существующих без влияния на код, который их использует.

Пример
Рассмотрим использование паттерна на примере сортировки массива. Мы хотим иметь возможность выбирать метод сортировки в зависимости от ситуации.

Пример использования можно посмотреть на прикрепленном изображении

Этот пример демонстрирует, как с помощью стратегии можно легко изменить алгоритм сортировки, используемый в приложении. Паттерн позволяет добавлять новые алгоритмы сортировки, не влияя на код, который их использует.

Заключение
Стратегия удобна, когда нужно изменять поведение объекта в зависимости от условий, не вдаваясь в детали реализации алгоритмов. Она делает код более модульным, упрощает тестирование и поддержку, а также способствует более чистой и организованной архитектуре программы.

#patterns #javascript
👍9🔥81
This media is not supported in your browser
VIEW IN TELEGRAM
Простой и интересный пример интерактивной карточки, которая при наведении мыши будет раскрывать дополнительную информацию с анимацией разворачивания.

Посмотреть можно тут - JsFiddle(тык)

#css #html
👍8🔥62🆒2👾1
Привет, дорогие читатели!

Хочу поделиться с вами новостью, которая, станет важным шагом в развитии канала. В скором времени вы начнете замечать появление рекламных публикаций среди контента. Это шаг, к которому я подходил с особой серьезностью, и я хочу обсудить его с вами, чтобы вы понимали мотивы и цели, которые я преследую.

Первое и самое важное - цель введения рекламы не в заработке. Моя основная задача - расширение этого канала и привлечение новых участников, которые разделяют наши интересы. Все это будет за счет дополнительных вложений полученных с рекламы.
Второе - я понимаю, как важно сохранить ваше доверие и комфорт. Мой приоритет - качество и полезность, поэтому рекламные посты будут соответствовать тематике программирования.

Надеюсь на ваше понимание 🙏
Please open Telegram to view this post
VIEW IN TELEGRAM
253🦄2