TGViewer
Channel Public Channel
CodeBase | Frontend

CodeBase | Frontend

@codebase_frontend

Все самое интересное и полезное у нас 😎

Контакт: @Filgood777 (реклама, сотрудничество)

Включи монетизацию своего TG-канала или сайта через РСЯ и получай пассивный доход. Подключиться по https://ya.cc/B2UP8W
Subscribers
1.93K
Photos
470
Videos
211
Links
792
Recent Posts 20 shown
Post #1238 94
📌 Подборка полезных функций, которые пригодятся продвинутым frontend-разработчикам при работе с UI, производительностью и архитектурой


1. Throttle

Контролирует частоту вызова функции, полезно для scroll/resize-событий.

function throttle(fn: Function, delay: number) {
let last = 0;
return (...args: any[]) => {
const now = Date.now();
if (now - last >= delay) {
last = now;
fn(...args);
}
};
}

2. Debounce

Откладывает выполнение функции до окончания серии вызовов.

function debounce(fn: Function, delay: number) {
let timeout: ReturnType<typeof setTimeout>;
return (...args: any[]) => {
clearTimeout(timeout);
timeout = setTimeout(() => fn(...args), delay);
};
}

3. Deep Clone (без structuredClone)

function deepClone<T>(obj: T): T {
return JSON.parse(JSON.stringify(obj));
}

Подходит для простых объектов, не содержащих функций, дат и т.п.

4. Safe Access (Optional Chaining + Fallback)

function get<T>(obj: any, path: string, fallback?: T): T {
return path.split('.').reduce((acc, key) => acc?.[key], obj) ?? fallback;
}

5. Wait (async delay)

function wait(ms: number) {
return new Promise(resolve => setTimeout(resolve, ms));
}

6. Generate UUID v4

function uuidv4() {
return crypto.randomUUID(); // нативно в современных браузерах
}

7. Copy to Clipboard

async function copyToClipboard(text: string) {
try {
await navigator.clipboard.writeText(text);
} catch {
const textarea = document.createElement('textarea');
textarea.value = text;
document.body.appendChild(textarea);
textarea.select();
document.execCommand('copy');
document.body.removeChild(textarea);
}
}

8. Detect Outside Click (для dropdown/modals)

function onClickOutside(element: HTMLElement, callback: () => void) {
function handler(event: MouseEvent) {
if (!element.contains(event.target as Node)) {
callback();
}
}
document.addEventListener('click', handler);
return () => document.removeEventListener('click', handler); // для очистки
}

9. Download File from Blob

function downloadBlob(blob: Blob, filename: string) {
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = filename;
a.click();
URL.revokeObjectURL(url);
}

10. Dynamic Script Loader (например, для внешних SDK)

function loadScript(src: string): Promise<void> {
return new Promise((resolve, reject) => {
const script = document.createElement('script');
script.src = src;
script.async = true;
script.onload = () => resolve();
script.onerror = () => reject(new Error(Failed to load ${src}));
document.head.appendChild(script);
});
}

CodeBase | Frontend | #JS
  • ❤ 2
Post #1235 160
Бэкенд-разработчик пытается написать CSS.

CodeBase | Frontend | #meme
  • 😁 4
Post #1234 226
🔥 Трюк с :has() в CSS: "Родительская магия"

Селектор :has() наконец стабильно работает во всех современных браузерах. Это открывает мощные возможности — реакция родителя на состояние потомка без JS!

Пример: подсветить div, если внутри есть заполненный input:

div:has(input:valid) {
border: 2px solid green;
}
Или показать ошибку, если инпут невалиден:

form:has(input:invalid) .error-message {
display: block;
}

📌 Зачем это нужно:
- 💡 Упрощает логику UI без JS
- 🚫 Убирает необходимость в лишних классах и хендлерах
- 💪 Делает компоненты декларативнее и чище

Проверить поддержку: https://caniuse.com/css-has

CodeBase | Frontend | #CSS
  • 👍 2
Post #1233 260
CSS совет 💡

Возможно, ты не знал об этом новом и самом простом способе вертикально центрировать контент в блочном макете.

CodeBase | Frontend | #CSS
  • 👍 6
Post #1232 241
Прокачать навыки вёрстки и фронтенда можно в телеграм!

В этом канале опытный верстальщик делится структурированными уроками и различными материалами по HTML, CSS, JS, а также советами по заработку на фрилансе.

Канал будет полезен:
1. начинающим и опытным верстальщикам
2. программистам
3. веб-дизайнерам

Научиться и зарабатывать на верстке:
@free_html_lessons
  • 🔥 1
Post #1231 233
💡 Scroll-snap-type

Позволяет создавать плавные, контролируемые прокрутки с «привязкой» к определённым позициям.

.container {
scroll-snap-type: x mandatory;
}
.item {
scroll-snap-align: start;
}

🔘 Используется для каруселей, слайдеров и списков.

Зачем это нужно:

➡️ Сделать UX удобным и предсказуемым.

➡️ Избавиться от костылей на JS.

CodeBase | Frontend | #JS
  • 👍 1
Post #1230 280
Всплывающие скроллеры изображений с анимацией, управляемой прокруткой CSS 🤙

.pop {
view-timeline-name: --pop;
}
img {
animation: slide both;
animation-timeline: --pop;
animation-range: entry 100% cover 50%;
}
.skateboarder {
--x: 0;
--y: -45%;
}
@ keyframes slide {
to { translate: var(--x) var(--y); }
}

https://codepen.io/jh3y/pen/abPgrGR

CodeBase | Frontend | #CSS
  • 👍 2
Post #1226 281
🔥 Быстрое сравнение объектов в JS без глубоких сравнений

Иногда не нужен deep equal, а просто надо понять: два объекта точно одинаковы по содержимому?

Вот простой, но мощный трюк на базе JSON.stringify():

const isEqual = (a: object, b: object) =>
JSON.stringify(a) === JSON.stringify(b);

📌 Подходит для:

* Простых объектов без методов и undefined;
* Сравнения кеша/props в memo;
* Быстрой проверки изменений формы.

⚠️ Не подходит:

* Для вложенных объектов с разным порядком ключей ({a:1,b:2} !== {b:2,a:1});
* Когда есть Date, Map, Set, функции, undefined, symbol.

🧠 Альтернатива:
Если важен порядок и типы — используй lodash.isEqual.

👉 Пример использования:

if (!isEqual(prevForm, currentForm)) {
saveChanges();
}

⚡ Просто. Эффективно. Для 80% кейсов — 🔥

CodeBase | Frontend | #JS
  • 🔥 1
Post #1225 292
Совет по HTML 💡

Семантический способ выделить часть текста ✅

CodeBase | Frontend | #HTML
  • 👍 1
Post #1222 410
🎯 CSS tip: как избавиться от :last-child и упростить отступы

Когда нужно задать отступ между элементами, но не последнему, часто пишут:

.item:not(:last-child) {
margin-bottom: 16px;
}

Но есть современный способ без селекторов и костылей 👇

✅ Используй gap с flex или grid:

.container {
display: flex;
flex-direction: column;
gap: 16px;
}

📌 Преимущества:
– Нет нужды в :last-child
– Чище HTML и CSS
– Работает одинаково в любом направлении (row, column)
– Поддерживается во всех современных браузерах


Итог: если ты всё ещё пишешь :not(:last-child) — пришло время обновить подход.

CodeBase | Frontend | #CSS
  • ❤ 2
  • 👍 2
  • 🔥 1
Post #1221 406
🔥 Трюк с :has() в CSS — как маленький хак улучшает UX

Селектор :has() поддерживается во всех современных браузерах. Его часто называют «селектором родителя», но он куда мощнее.

Вот пример, как улучшить UX форм без JS 👇

form:has(input:invalid) button[type="submit"] {
opacity: 0.5;
pointer-events: none;
}

📌 Что делает:
Если в форме есть невалидный input, сабмит-кнопка становится неактивной.

💡 Применения :has():
- Показывать/прятать элементы в зависимости от вложенности;
- Делать UI реактивным без JS;
- Улучшать доступность форм и состояний.

✅ Минимализм, UX и современный CSS — в одном трюке. Попробуй!


CodeBase | Frontend | #CSS
  • ❤ 2
Post #1215 423
👩‍💻 Метод Array.from() в JavaScript и как он используется

Метод Array.from() создаёт настоящий массив из массивоподобных или итерируемых объектов
(например, NodeList, arguments, Set, Map).

➡️ Пример:

const buttons = document.querySelectorAll("button");

const btnArray = Array.from(buttons);
btnArray.forEach(btn => btn.classList.add("active"));


🗣️ В этом примере:

• querySelectorAll возвращает NodeList, а не массив
• Array.from() превращает его в массив
• после этого доступны map, filter, forEach и другие методы

Array.from() — это мост между «псевдомассивами» и полноценными массивами, без костылей и циклов


CodeBase | Frontend | #JS
  • 👍 3
  • ❤ 1
  • 🔥 1
Post #1212 420
Главное, чтобы ещё стул был на колёсиках

CodeBase | Frontend | #meme
  • 😁 6
  • ❤ 2
  • 🔥 1
Older posts →

About this channel

How can I read @codebase_frontend without a Telegram account?
TGViewer shows the public web preview Telegram publishes for CodeBase | Frontend: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does CodeBase | Frontend have?
CodeBase | Frontend (@codebase_frontend) has 1.93K subscribers on Telegram, refreshed roughly every 30 minutes.
Does CodeBase | Frontend know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →