Олег программист | Фронтендер

@big_proger


Frontend разработка
HTML CSS JavaScript
Программирование

По рекламе и всем вопросам @olegboomer

Олег программист | Фронтендер

22 Oct, 08:59


Как использовать инстументы DevTools на максимум

Подробная статья

Олег программист | Фронтендер

21 Oct, 15:00


Коротко про слоты в Vue.js

Когда ты разрабатываешь интерфейсы на Vue.js, рано или поздно приходит момент, когда простые пропсы уже не спасают. Допустим, нужно сделать компонент не просто гибким, а настолько гибким, чтобы его можно было адаптировать под любые сценарии. Пропсами ты тут не отделаешься. И вот тут могут помочь слоты.

Ссылка на статью

Олег программист | Фронтендер

23 May, 08:44


Что такое IntersectionObserver в JavaScript

IntersectionObserver - это мощный браузерный API, который позволяет асинхронно наблюдать за пересечением элемента (target) с его родителем (root) или областью просмотра (viewport). Другими словами, этот API обеспечивает вызов определенной функции каждый раз при пересечении целевого элемента с root или viewport.

Для начала работы с IntersectionObserver необходимо с помощью конструктора создать объект-наблюдатель с двумя параметрами - функцией обратного вызова и настройками:

const observer = new IntersectionObserver(callback, options)


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

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

Вот простой пример использования IntersectionObserver:

const observer = new IntersectionObserver(entries => {
entries.forEach(entry => {
const intersecting = entry.isIntersecting
entry.target.style.backgroundColor = intersecting ? "blue" : "orange"
})
})

observer.observe(document.getElementById("test"))


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

Некоторые полезные примеры использования IntersectionObserver:
- Ленивая загрузка изображений и контента
- Бесконечная прокрутка (infinite scrolling)
- Анимации, срабатывающие при скролле
- Отображение прогресса просмотра страницы

IntersectionObserver значительно улучшает производительность, позволяя отказаться от "дорогих" scroll-событий. Он работает асинхронно, не блокируя основной поток выполнения.

Олег программист | Фронтендер

14 May, 17:11


👩‍💻 Smooth Liquid Background Effect

Сцена с анимированным фоном. Сделана на SVG, CSS и JavaScript.

Ссылка

Олег программист | Фронтендер

04 May, 12:43


5 нейронок, которые помогут разработчику найти нужную информацию:

1. Perplexity AI
2. Elicit AI
3. Consensus AI
4. Scite AI
5. ChatPDF

Олег программист | Фронтендер

20 Apr, 08:45


Всем привет 😄
Давно не виделись ))
Я тут с новостью.

Сижу я значить пью кофе и пишет мне моя знакомая.
Короче они ищут Фронтенд разработчика себе в команду. Ну я и сказал что напишу пост у себя в канале, помогу им с поиском 😄 Как я понял опыт не важен.

Кому интересно, пишите ей @Davtyanka

А я дальше пить кофе ☕️ 😄

Олег программист | Фронтендер

23 Feb, 06:01


Runtime в node js

Node.js - это среда выполнения, которая позволяет выполнять JavaScript-код вне браузера. Это означает, что вы можете создавать серверные приложения на JavaScript, запускать скрипты локально на вашем компьютере и многое другое.

Когда мы говорим о времени выполнения (runtime), мы обычно имеем в виду период времени, в течение которого запущенная программа выполняется на компьютере. Это может быть период времени с момента запуска программы до ее завершения, или период времени, когда программа работает в фоновом режиме.

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

Например, если мы создадим функцию в JavaScript, она не будет выполнена, пока мы не вызовем ее в нашем коде.

Пример кода JavaScript:
function multiply(a, b) {
return a * b;
}

// вызываем функцию multiply и сохраняем результат в переменную result
const result = multiply(10, 5);

// выводим результат в консоль
console.log(result);


Таким образом, время выполнения программы (runtime) в JavaScript - это период времени, в течение которого программа выполняется, включая выполнение функций и других инструкций.

Олег программист | Фронтендер

22 Feb, 08:21


Что такое примитивные типы данных в javascript ?

Попробую дать свою формулировку, на сколько это получится 😁

Итак, примитивы - это данные, которые не являются объектом и не имеют методов.

В JavaScript существует 8 основных типов данных.

Семь из них называют «примитивными» типами данных:
number
bigint
string
boolean
null
undefined
symbol


И один не является «примитивным» и стоит особняком:
object


Очень важно понять!!!
Все примитивы неизменяемы, то есть они не могут быть изменены.
Важно не путать сам примитив с переменной, которой присвоено значение примитивного типа. Переменной может быть переприсвоено новое значение, но существующее значение примитивного типа не может быть изменено подобно объектам, массивам и функциям.

Пример для понимания:
let bar = "abc"
console.log(bar) // abc

// Примитив не изменился
bar.toUpperCase()
console.log(bar) // abc

// Присваиваем новой переменной
let bar2 = bar.toUpperCase()
console.log(bar2) // ABC

// А теперь массивы
let foo = []
console.log(foo) // []
foo.push("plugh")
console.log(foo) // ["plugh"]


Примитив может быть заменён, но он не может быть напрямую изменён.

И напоследок.

За исключением null и undefined, все примитивные значения имеют объектный аналог, который оборачивает значение примитивного типа:
String для string примитива.
Number для number примитива.
BigInt для bigint примитива.
Boolean для boolean примитива.
Symbol для symbol примитива.

Олег программист | Фронтендер

03 Jan, 16:31


Задача:

Создайте функцию, принимающую положительное целое число от 1 до 3999 (оба включены) в качестве параметра и возвращающую строку, содержащую представление этого целого числа римскими цифрами.

Современные римские цифры записываются путем выражения каждой цифры отдельно, начиная с самой левой цифры и пропуская любую цифру со значением ноль. Римскими цифрами обозначается 1990 год: 1000=М, 900=СМ, 90=ХС; в результате получается MCMXC. 2008 год записывается как 2000=ММ, 8=VIII; или ММВIII. В 1666 году каждый римский символ используется в порядке убывания: MDCLXVI.

Пример:
solution(1000); // should return 'M'


Помощь:
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1,000


Делитесь в комментариях что у вас получилось

Олег программист | Фронтендер

31 Dec, 16:23


Дорогие программисты! 👨‍💻

Поздравляю вас с Новым годом! 🎄
Желаю, чтобы в этом году ваш код стал ещё более чистым и эффективным.
Пусть в новом году каждый из вас станет мастером кодинга! 🦸‍♂️

Желаю вам, чтобы все ваши баги были только смешными 😄 и забавными, а не критическими.
Пусть ваши репозитории наполняются не только кодом, но и позитивными эмоциями, а каждый merge request будет сопровождаться улыбками и хорошим настроением. 😊

Олег программист | Фронтендер

20 Oct, 09:05


Методы объекта event stopPropagation и stopImmediateProparation

Метод event.stopImmediatePropagation() используется для предотвращения распространения события вверх по DOM дереву, однако он имеет более сильный эффект, чем event.stopPropagation(). Кроме того, что он предотвращает распространение события к вышестоящим элементам, он также останавливает вызов других обработчиков событий для текущего элемента.

Пример использования event.stopImmediatePropagation():

 document.getElementById('inner').addEventListener('click', function(event) {
event.stopImmediatePropagation(); // Предотвращаем распространение события и вызов других обработчиков
console.log('Inner element clicked');
});

document.getElementById('inner').addEventListener('click', function(event) {
console.log('Additional inner element click handler');
});

document.getElementById('outer').addEventListener('click', function(event) {
console.log('Outer element clicked');
});


В этом примере, при клике на элемент с id "inner", обработчик первого события будет вызван и выведет в консоль сообщение "Inner element clicked". Однако, обработчик второго события не будет вызван из-за использования event.stopImmediatePropagation(). Таким образом, ожидаемый вывод будет только "Inner element clicked" без вывода "Additional inner element click handler" или "Outer element clicked".

Важно отметить, что порядок регистрации обработчиков событий может иметь значение при использовании event.stopImmediatePropagation(), так как это метод остановит вызов обработчиков, зарегистрированных после него для текущего элемента.

Итак, основное различие между event.stopPropagation() и event.stopImmediatePropagation() заключается в том, что первый метод предотвращает распространение события только вверх по DOM дереву, в то время как второй метод предотвращает как распространение события вверх по дереву, так и вызов других обработчиков событий для текущего элемента.

Олег программист | Фронтендер

20 Oct, 07:03


FRONTEND TRENDS

Ссылка на код

Олег программист | Фронтендер

19 Oct, 06:47


Зачем нужен конструктор Proxy?

Конструктор Proxy является мощным инструментом в JavaScript, который позволяет создавать объекты-обертки и предоставляет полный контроль над поведением этих объектов при доступе к ним и изменении их свойств.

Основная цель Proxy - обеспечить перехват и кастомизацию операций на объекте, таких как чтение (get), запись (set), удаление (deleteProperty) и других. Это позволяет нам создавать ловушки для операций и добавлять дополнительную логику в обработку объектов.

Пример:
 const obj = {
name: 'John',
age: 30
} ;

const proxy = new Proxy(obj, {
get(target, property) {
console.log(`Чтение свойства ${property}`);
return target[property];
},
set(target, property, value) {
console.log(`Запись свойства ${property} со значением ${value}`);
target[property] = value;
}
});

console.log(proxy.name); // Вывод: Чтение свойства name, Значение: John

proxy.age = 40; // Вывод: Запись свойства age со значением 40
console.log(proxy.age); // Вывод: Чтение свойства age, Значение: 40

console.log(obj.age); // Вывод: 40 (изменение значения age было отражено в оригинальном объекте)


В этом примере мы создали объект obj и создали его обертку с помощью Proxy. Затем мы определили ловушки get и set для перехвата чтения и записи свойств объекта. Когда мы обращаемся к свойствам обернутого объекта через proxy, ловушки выполняются, и мы можем добавить дополнительную логику перед выполнением операций.

Олег программист | Фронтендер

17 Oct, 06:50


Задача

Создайте функцию, которая принимает строку из букв и пробелов.
Верните букву, справа и слева от которой наибольшее число пробелов.

Примечания:
- строка может иметь начальные/конечные пробелы — их не следует считать
- строки содержат только уникальные символы от aдоz
- порядок символов в возвращаемом массиве не имеет значения

Примеры:
"a b c" --> ["b"]
"a bcs d k" --> ["d"]
" a b sc p t k" --> ["p"]
"a b c de" --> ["b", "c"]
" a b c de " --> ["b"]
"abc" --> ["a", "b", "c"]

Ответы пишите в комментах 🙂

Олег программист | Фронтендер

27 Jul, 06:02


Преобразовываем объект в массив

Есть объект:
const person = { firstName: 'John', lastName: 'Doe' }

Нужно чтобы этот объект, как то магическим образом стал массивом 🙂

Пишем функцию:
function objectToArray(obj) {
return Object.entries(obj)
}

Вызываем функцию:
const personArray = objectToArray(person)

Олег программист | Фронтендер

26 Jul, 08:50


Кто хочет решить задачку? 😁

Функция принимает строку и возвращает строку в другом виде

accum("abcd") -> "A-Bb-Ccc-Dddd"
accum("RqaEzty") -> "R-Qq-Aaa-Eeee-Zzzzz-Tttttt-Yyyyyyy"
accum("cwAt") -> "C-Ww-Aaa-Tttt"

Олег программист | Фронтендер

26 Jul, 07:47


Пришла в голову идея 🙂

Давайте с вами сегодня разберем три способа, для проверки, является ли переменная числом:

1 способ
function isNumber(param) {
return Number.isFinite(param);
}

2 способ
function isNumber(param) {
return !isNaN(param);
}

3 способ
function isNumber(param) {
return typeof param === "number";
}