Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Стреляйте в преследующих вас врагов!
Оторвитесь от погони, ваш верный АК47 в этом поможет!
Огромный выбор оружия
Миниган, Арбалет, Стационарная пушка, Пулемет
Уничтожайте мотоциклы, квадроциклы, гоночные автомобили, вертолеты
Реалистичное оружие и машины

Погоня на Дороге: Шутер Реалистичное Оружие

Экшены, Аркады, Шутер

Играть

Топ прошлой недели

  • CharlotteLink CharlotteLink 1 пост
  • Syslikagronom Syslikagronom 7 постов
  • BydniKydrashki BydniKydrashki 7 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Pikaweb

С этим тегом используют

Javascript Frontend IT Программирование Веб-разработка HTML CSS Все
86 постов сначала свежее
3
frontru
frontru
4 года назад

[Гайд] Как сделать анимацию блика на кнопку используя html и css⁠⁠

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

Поиграться можно по ссылке: https://jsfiddle.net/wc2oeapv/

Показать полностью
[моё] Frontend Javascript IT Web Программирование Веб-разработка Верстка HTML Web-программирование CSS Pikaweb Учеба Видео
6
3
frontru
frontru
4 года назад

[Гайд] Как сделать красивую анимированную загрузку используя HTML и CSS⁠⁠

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

[моё] Frontend Javascript IT Web Программирование Веб-разработка Верстка HTML Web-программирование CSS Pikaweb Учеба Видео
7
4
DELETED
4 года назад
Web-технологии

Проблема с toLocaleString в скрипте для TamperMonkey⁠⁠

Привет рыцарям вёрстки.


Зацепил меня пост Многолетняя просьба изменить дату оформления поста и признака "Прочитано" (чекбокс) к @SupportTech остаются без ответа и захотелось решить эту проблему скриптом для TamperMonkey и просто немного обновить свои навыки и умения, никак не связанные с JS в обыденной жизни.


Скрипт в консоли и в TamperMonkey работает. Строковое поле «Двадцать часов назад» на дату заменяет.


Но дата выводится в ISO формате. А мне нужна дата в российской локали, а этого никак не могу добиться.


Подскажите плиз, в чём затык.


Скрипт:

document.querySelectorAll("time").forEach(item => item.innerHTML = Date(item.getAttribute('datetime')).toLocaleString("ru-RU"));


Результат отработки скрипта (см стрелочку):

Проблема с toLocaleString в скрипте для TamperMonkey Вопрос, Javascript, Pikaweb

В консоли проверочное отрабатывает красиво и чётко:


var today = new Date();

console.log(today.toLocaleString("ru-RU"));

отдаёт 10.11.2020, 20:30:54



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

Проблема с toLocaleString в скрипте для TamperMonkey Вопрос, Javascript, Pikaweb

помогите плиз.

Показать полностью 2
Вопрос Javascript Pikaweb
10
5
Timon0596
4 года назад
Web-технологии

Тестовое задание frontend⁠⁠

добрый день, хотелось бы получить оценку и мнение по поводу тестового задания(особенно по времени выполнения) на позицию frontend джуна с зп 30к

само тестовое:

Ориентировочное время выполнения 4-8 часов

Разработать SPA приложение по заданию ниже.

В качестве фреймворка предпочтительнее использовать vue.js. Но также рассматриваем кандидатов с выполненным заданием на react или angular.

В качестве сборщика предпочтительнее использовать Webpack.

--- ПРИЛОЖЕНИЕ и ЯДРО ---

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

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

Контент дочерних блоков должен подгружаться динамически с отложенной загрузкой (отдельным бандлом).

Далее необходимо разработать мини-ядро, которое будет грузиться вместе с родительским приложенияем и иметь api для загрузки дополнительных плагинов. Ядро должно быть доступно из кода каждой страницы родительского приложения.

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

Вторым плагином ядра будет плагин, реализующий SDK для взимодействия с биржей binance (только 2 метода: получить биржевой стакан по определенному символу по REST и подписаться на обновления стакана по WS). (См. раздел Diff. Depth Stream в документации: https://github.com/binance-exchange/binance-official-api-doc...).

--- GUI КОМПОНЕНТЫ ---

В приложении на первой странице расположить компонент, который при помощи плагина ядра "SDK" забирает состояние стакана по определенному символу с биржи binance (можно применить limit=500, чтобы не тянуть стакан на всю глубину), подключается на обновления данных по ws для этого символа (по умолчанию берется по BTCUSDT) и отрисовывает стакан в подобном формате

|----------|----------|----------||----------|----------|----------|

|--Amount--|--Price---|--Total---||--Amount--|--Price---|--Total---|

|----------|----------|----------||----------|----------|----------|

| ... | ... | ... || ... | ... | ... |

Где левые три колонки относятся к ордерам тиба Bid, правые к ордерам типа Ask.

Price и Amount (Quantity) получаются из binance. Total рассчитывается на клиенте как Price * Amount.

Для верстки желательно использовать правила именования по БЭМу.

Цвета и отступы можно использовать на свой вкус.

Верстка должа быть резиновая и адаптивная для мобилки и десктопа. Breakpoint можно выбрать самостоятельно.

В мобильной версии отображать только колонки с Price и Amount.

Таблица должна помещаться по вертикали на странице (без скрола на страница) и должна содержать свой скрол-бар.

Скролл в таблице должен появляться по ховеру на таблицу, сама таблица и ее контент должны оставаться на месте при этом.

Внешний вид скроллбара не принципиален. Таблица скроллится внутри, шапка остаётся на месте.

Полоса скролл бара начинается под шапкой. При скролле значения в таблице не должны наезжать на шапку.

Компонент должен уметь:

* читать сообщение об изменении читаемого символа из плагина "шина данных". При изменении символа компонент должен очищать свое содержимое по предыдущему символу и загрузить данные по новому.

* транслировать в шину данных в виде сообщений все примененные diff-изменения.

На второй странице расположить компонент, сожержащий в себе:

* DropDown перечнем символов. Их можно зашить статически BTCUSDT, BNBBTC и ETHBTC

* Cписочный элемент

DropDown при изменении выбранного элемента отправляет в шину данных событие об изменении активного символа.

Cписочный элемент читает шину данных и отображает информацию о каждом diff-изменении в новой строке.

Дополнительное задание (если успеваете):

* Релизовать SSR для приложения

Всё, что покажется в задании непонятным или неоднозначным к трактовке, делайте на свое усмотрение, соблюдая здоровый рационализм.

Главное - это общий полученный результат. Если возникнет непреодолимое по вашему мнению препятствие, пиши свой(и) вопрос(ы) нам. По завершении нам нужна ссылка выложенного тестового на GitHub Pages и ссылка на код.

Показать полностью
Frontend Тест Javascript Работа Web Web-программирование Junior Техническое задание Pikaweb Текст
32
5
FrontendF
FrontendF
4 года назад
Web-технологии

Промежуточный отчет. React, Matherial UI, Typescript...⁠⁠

Всем привет!

У меня начался отпуск и Я 8 дней в Краснодаре у своей семьи. Перед поездкой у меня был план по продолжению изучения Typescript, внедрению его в React. Также решил углубиться в изучение Matherial UI.

Прилетел Я в Краснодар 29.08 и весь день провел с семьей, погуляли по городу.

30.08 Я так же отдыхал и ничего не делал в плане изучения, потратил время только на настройку рабочего окружения. Мне тут выделили ноутбук. Вообще Я ни разу не работал на ноутбуке с версткой и кодом, дома у меня стационарный ПК с двумя мониторами по 27 дюймов, а тут ноутбук - 15. Так же у меня phpStorm, а тут Я на VSCODE. Но привык достаточно быстро.

В понедельник и вторник Я смотрел курсы по typescript. Один курс от Lectrum, другой - интенсив от learn.javascript.ru. Оба отлично друг друга дополнили. Курс от Lectrum Я не досмотрел, когда они начали разбирать TS на react/redux Я поплыл.  Запомнил где остановился и решил, что вернусь , когда будет больше опыта. Поэтому впереди практика.

Что Я в итоге решил делать? Мне нравится сайт банка Тинькофф. Он очень большой, там много разных элементов, готовой логики и дизайна. Поэтому Я решил повторить его функционал и верстку, используя эти 3 технологии.

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

Например, мне не совсем понятно, как в MUI управлять общими стилями для всех элементов Button. Потому что там текст внутри кнопки, hover и прочие эффекты зависят от цвета самой кнопки. Я могу переопределить стили одной кнопки, а хотелось бы настроить это для всех.

И таких вещей много. Но Я уверен, что разберусь.

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

Теперь о проделанной работе

У Тинькофф мобильная и десктопная версия меняются при перезагрузке страницы. В своем проекте Я решил сделать иначе, у меня будет полностью адаптивный сайт. Это добавляет трудностей при верстке. Так же Я не буду гнаться за pixel-perfect и возможно что-то буду делать по своему (отступы, некоторые цвета, где-то контент). В общем, мой проект - мои правила :D


Начал верстку Я с мобильной версии. Пока что Я сделал header, вывел 3 строки меню и первый блок с рекламой, в котором есть изображение, заголовок, небольшое описание и кнопка. Контент в блоке меняется при перезагрузке.


На сайте Тинькофф header на декстопе в 2 строки, при уменьшении разрешения часть его прячется и вызывается через доп. кнопку меню ( в виде трех точек).


У меня весь header в виде мобильной версии в 3 строки и бургер не прячется. Это все Я буду доделывать уже на следующей неделе.

Блок на главной с меняющейся рекламой в большей части сверстан. Контент меняется там случайным образом. Есть массив данных, каждый блок - это объект, в котором есть текст, ссылки на изображения и на другие разделы.

Есть вопросы, на которые Я не знаю ответа. Например, как правильно сделать структуру проекта с компонентами? Стоит ли выносить каждый компонент в отдельный файл или мелкие можно размещать в том же самом файле? С MUI стоит ли выносить куда-то стили для отдельных компонентов или держать их в том же файле? Дробить все по папкам или держать файлы с данными/компонентами/стилями/описаниями типов в одной папке, как сейчас у меня? И т.д.

Надеюсь в процессе Я разберусь с этими вопросами.

Дальнейшие планы на следующую неделю.

Практика. Нет курсов для изучения и Я их не ищу.

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


Буду верстать, углублять свои знания по React, Typescript + Javascript в целом. Особенно интересует как правильно сделать структуру проекта, попробую на следующей неделе поискать информацию. Если кто-то подскажет полезные ресурсы - буду благодарен.

Для тех, кому интересен код - вот мой репозиторий.

Чтобы было удобно показывать Вам результат Я выложил все на хостинг firebase.

Ссылка тут

Показать полностью
[моё] Pikaweb React Typescript Текст
17
407
ZolVas
4 года назад
Web-технологии

Как просматривать закрывшиеся сайты / удалённые файлы и предотвратить их бесследное исчезновение⁠⁠

КРАТКОЕ СОДЕРЖАНИЕ (кто не хочет читать):

- web-страницы в Интернете исчезают бесследно;

- чтобы исчезали не бесследно, web-страницы и файлы можно сохранять в Internet Archive по ссылке https://web.archive.org/save/АДРЕС_СТРАНИЦЫ;

- какие-то web-страницы не сохраняются, поэтому сначала сохраните в https://akkela.net/copyhtml/, а потом полученный URL по ссылке https://web.archive.org/save/АДРЕС_СТРАНИЦЫ;

- какие-то файлы не сохраняются, поэтому сначала сохраните в https://leopard.hosting.pecon.us/, а потом полученный URL по ссылке https://web.archive.org/save/АДРЕС_СТРАНИЦЫ;

- ещё большие тексты можно сохранять сначала в pastebin.com, а потом полученный URL по ссылке https://web.archive.org/save/АДРЕС_СТРАНИЦЫ;

- бонусом в статье рассказывается о способе сделать копию закрытых страниц и замену peeep.us;

- если не нравятся предложенные сайты, ищите альтернативы сами. :)


Подробнее (много текста):

История

Первые страницы в Интернете были созданы ещё в 1991 году.

Но 24 года назад, лишь в 1996 году Брюстером Кейлом была организована некоммерческая организация Internet Arсhive, собирающая копии веб-сайтов, с 2001 года предоставившая публичный доступ к своей Waybackmachine (накопилось свыше 50 петабайт данных и число перевалило за полтриллиона страниц).

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


Распадаются страны (например, домен .yu — Югославия), упраздняются организации, прекращают работу сайты, следовательно сведения бесследно исчезают.

Информация — это история и культура.

Доп.почитать: Почему у нас осталось так мало раннего Интернета (Хабрахабр)

https://ru.wikipedia.org/wiki/Архив_Интернета


Например, сайт прекратившей работу компании, создавшей один из первых интернет-браузеров:

https://web.archive.org/web/20070917180729/http://www.netscape.com/

Как просматривать закрывшиеся сайты / удалённые файлы и предотвратить их бесследное исчезновение Резервное копирование, Javascript, Internet Archive, Wayback Machine, Web, Pikaweb, Длиннопост

«Существует два типа людей: 1) которые ещё не делают резервное копирование и 2) которое уже делают.»


Лучшие практики того,

как можно вручную сохранить ценную информацию [почти] навечно (на примере Пикабу).


Чтобы сохранить АДРЕС_СТРАНИЦЫ, нужно прописать:

https://web.archive.org/save/АДРЕС_СТРАНИЦЫ

Чтобы найти АДРЕС_СТРАНИЦЫ потом:

https://web.archive.org/web/*/АДРЕС_СТРАНИЦЫ

Подробнее:


1) Web-страницы публично открытых сайтов (когда waybackmachine срабатывает).

Стандартно. «Скармливать» ему лучше чистую ссылку (например, https://pikabu.ru/story/_7676787, без заголовка в URL). Чтобы потом проще было найти в архиве, если статья исчезнет.

2) Текстовая информация.

Сохранить текст, большой текст можно в pastebin.com (должно хранить вечно, но кто знает).

А потом дополнительно для спокойствия сохраняем в Waybackmachine.

Обе ссылки можно дать, например, в комментарии.

3.1) Файлы по ссылкам.

Стандартно. Упомянутый Архив Интернета сохраняет файлы, если дать на них прямую ссылку.

В комментариях можно дать ссылку на резервную копию файла.

3.2) Файлы по ссылкам, когда waybackmachine не сработал, ИЛИ же закрытые файлы.

Во-первых, применимо, когда сохранение не проходит из-за настроек сервера.

Во-вторых, применимо, когда у вас есть свой файл, который хочется опубликовать и сделать так, чтобы ссылка на него была доступна в комментариях и в будущем, навсегда.

Тогда файл стоит «перезалить», сохранить и дать на него ссылку.


Последовательность действий моя:

- загружаем файл через https://leopard.hosting.pecon.us/ (даёт прямые ссылки; утверждает, что хранит файл вечно; до 100 мегабайтов);

- дополнительно сохраняем полученную ссылку в Waybackmachine;

- в комментариях к странице даём обе ссылки;

- опционно: сохраняем в waybackmachine ещё и статью с комментариями (где будут эти ссылки).


Критерии хостинга: без регистрации, получается прямая ссылка (которая сохранится в Waybackmachine), а бонусом идёт вечное хранение (как утверждается). Но если и не вечное, то зеркало будет в Архиве Интернета.

Если у вас есть подпадающие под эти критерии хостинги — кидайте в комментарии.

4.1) Web-страницы публично открытых сайтов, когда waybackmachine не сработал, ИЛИ же закрытые страницы.

Во-первых, применимо, когда сохранение конкретной страницы не проходит опять-таки из-за настроек сервера (например, сайт подгружает информацию по нажатию мыши).

Во-вторых, применимо, когда есть информация, которая доступна после авторизации, а давать логин-пароль не рационально.


С первым примером всё ясно.

Типичный пример второго — та же Лепра, или страница с закрытого паблика соцсети, или страница с электронной почты. Сделать копию HTML, не давая доступа к учётной записи, чтобы показать, можно.

В своё время для этого использовался созданный в 2009 году сайт peeep.us, который бонусом был ещё и удобным сокращателем ссылок. Но он увы канул в Лету... Ничто не вечно.


Доступный аналог (к сожалению, в отличие от исчезнувшего сервиса ссылки не сокращает и хранит информацию у себя не вечно, хотя с первостепенной задачей справляется):

https://akkela.net/copyhtml/


Как работать:

- зайти на сайт, скопировать букмарклет себе в браузер (или быть готовым запустить скрипт, например, через консоль);

- зайти на нужную страницу;

- запустить букмарклет, чтобы осуществить копирование страницы. Учтите, она пропадёт в скором времени!

- дополнительно сохранить её с помощью в waybackmachine навечно;

- в комментарии к странице даём обе ссылки;

- опционно: сохраняем в waybackmachine ещё и статью с комментариями (где будут эти ссылки).

4.2) Страницы закрытых сайтов (исправленные).

Как и в peeep.us, разумеется, если вам дали страницу, полностью доверять содержимому на ней нельзя: перед загрузкой страницы её можно отредактировать и отправить на сервер отредактированную (подменённую) версию.


Как подменить:

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

(function() {
var send = function(url, content, type) {
if (type == null)
type = 'text/html;charset=utf-8';
else
type = type.match(/^[^;]+/)+';charset=utf-8';
var form = document.createElement('form');
form.setAttribute('method', 'post');
form.setAttribute('action', 'http://akkela.net/create.php');
form.setAttribute('enctype', 'multipart/form-data');
form.setAttribute('accept-charset', 'utf-8');
var input = document.createElement('input');
input.setAttribute('type', 'hidden');
input.setAttribute('name', 'r_content');
input.setAttribute('value', content);
form.appendChild(input);
input = input.cloneNode(false);
input.setAttribute('name', 'r_url');
input.setAttribute('value', window.location.protocol + "//" + window.location.hostname);
form.appendChild(input);
input = input.cloneNode(false);
input.setAttribute('name', 'r_type');
input.setAttribute('value', type);
form.appendChild(input);
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
};
var showLoad = function() {
if (document.getElementById('peeeppeeeppeeep') != null)
return;
var div = document.createElement('div'), img = document.createElement('img');
img.setAttribute('src', 'http://www.peeep.us/assets/load.gif');
div.appendChild(img);
div.setAttribute('style', 'position: fixed; left: 50%; top: 0; margin-left: -24px; padding: 8px; background: rgba(255,255,255,0.9);');
div.id = 'peeeppeeeppeeep';
document.body.appendChild(div);
};
try {
showLoad();
var url = location.href;
var r = new XMLHttpRequest();
r.open('GET', url, true);
//r.overrideMimeType('application/octet-stream');
r.onreadystatechange = function() {
try {
if (r.readyState == 4) {
if ((r.status >= 200 && r.status < 300) || (r.status >= 400 && r.status < 500)) {
//send(url, r.responseText, r.getResponseHeader('Content-type'));
send(url, document.documentElement.outerHTML, r.getResponseHeader('Content-type'));
} else {
throw r.statusText;
}
}
}
catch(e) { alert('Error: '+e+'\nPlease, try again'); }
};
r.send(null);
}
catch(e) { alert('Error: '+e+'\nPlease, try again'); }
})();

Пример результата:

- Хабрахабр: лучшие месяца + доп.абзац (скоро удалится).

- Зеркало, которое не удалится.

Типичные примеры спасения файлов, когда ссылка в посте больше не работает, и иное:

1. Пикабу: Векторные дома в изометри, раздаю бесплатно:) (с сайта, указанного в посте, не грузится, но Архив Интернета скопировал).

2. Голосовое управление офисной оргтехникой (по ссылке в посте не грузится, но файл залит на хостинг, а потом сохранён в Архив Интернета).

3. Сайт peeep.us больше не работает, пропал и их javascript, но код сохранён в 2017 году.

4. Аналогичный файл javascript сайта-аналога, не был сохранён. А был сохранён позавчера мной, и я был первым. Если что с сайтом случится, файл останется.

Показать полностью 1
[моё] Резервное копирование Javascript Internet Archive Wayback Machine Web Pikaweb Длиннопост
23
6
FrontendF
FrontendF
4 года назад
Web-технологии

Небольшой отчет по работе за предыдущую неделю⁠⁠

Всем привет. Решил отписаться чем удалось заняться за предыдущую неделю. В планах было почитать/посмотреть/попробовать react matherial-ui.

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

Первое, что Я сделал - это открывающееся меню и иконки. Выглядело это так. Меню намного плавнее, чем на gif).

Небольшой отчет по работе за предыдущую неделю Pikaweb, Frontend, React, Гифка, Длиннопост

Так же попробовал реализовать функционал с категориями как в личном кабинете банка Тинькофф. Реализовывал не логику, а больше визуальную часть. Я сделал по своему только часть, в которой ты проваливаешься в категорию и у тебя отображаются операции. У меня они сохранялись в state, а у Тинькофф формируется get-запрос. Повторить подобное в будущем планирую, так как много сложных и интересных элементов: сортировка (дата, суммы, категории), графики, история операций.

Небольшой отчет по работе за предыдущую неделю Pikaweb, Frontend, React, Гифка, Длиннопост

Что из сложного было в matherial-ui? Писать стили в JS. А так же понять, какие стили писать в css. Например, анимацию Я писал в CSS, а большую часть стилей задавал внутри JS с помощью хука. Так и не смог понять, как мне анимацию добавить в фреймворк.

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


Что понравилось? Готовые стили, готовые анимации. Подключается быстро, понятная документация. Быстро понял, как сделать сетку, добавить календарь, меню, настроить тему, кнопки, иконки.

Так же на этой неделе меня выбили из колеи 2 вещи: удаление зуба и день рождения друга, который проходил в  Королёве.

На ближайшую неделю планирую досмотреть курс по TS, потом начинать внедрять TS для React и продолжу учить React. Так же на работе делаю подобие квиза (вообще подобное делаю впервые), пока все очень сыро, как закончу - обязательно опишу этот опыт.

Показать полностью 1
[моё] Pikaweb Frontend React Гифка Длиннопост
5
18
FrontendF
FrontendF
4 года назад
Web-технологии

Как Я писал простой timer⁠⁠

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

Как Я писал простой timer Typescript, Frontend, Javascript, Работа, Pikaweb, Гифка, Длиннопост

Какие так же были пожелания:
1. Чтобы клиент мог сам установить таймер, не копаясь в JS.

2. Чтобы таймеров могло быть несколько на странице.

Быстро погуглив решения или библиотеки Я понял, что лучше мне написать его самому. Хотя честно признаюсь 1 функцию Я скопировал в целях экономии времени.

Так как Я учу typescript, решил в рамках практики написать на нем. Решение Я видел такое: добавляем в верстку 1 контейнер с классом и дата-атрибутом, в котором у нас будет конечная дата. Класс Я назвал js-timer, а атрибут data-deadline.

Как Я писал простой timer Typescript, Frontend, Javascript, Работа, Pikaweb, Гифка, Длиннопост

Основой всего будет класс Timer. В конструктор он принимает HTMLElement (т.е. заранее найденный блок по классу), а так же там есть переменная total - это кол-во оставшегося времени.
У класса есть методы: init,  calculateTime, getTimeRemaining, createString, render, destroy.

Метод init запускается в конструкторе. Он ничего не возвращает, в нем осуществляются проверки на наличие переданного элемента и наличие нужного data-атрибута. Если проверки не пройдены, то функция завершает работу. Если проверки пройдены, тогда срабатывает счетчик, который будет раз в секунду запускать функцию calculateTime. Тут же идет проверка на кол-во оставшегося времени, если его не осталось, счетчик останавливается, а таймер исчезает со страницы

Как Я писал простой timer Typescript, Frontend, Javascript, Работа, Pikaweb, Гифка, Длиннопост

Метод calculateTime принимает полученное значение deadline из дата-атрибута и передает его в функцию getTimeRemaining. В этом методе мы парсим нашу дату и вычитаем из дедлайна текущий момент времени. Получаем n-кол-во секунд до нашей даты. Далее мы делим это число в разных пропорциях, чтобы найти день/часы/минуты/секунды. Так же обновляем нашу переменную total. На выходе имеем объект, с которым дальше будет удобнее работать

Этот объект мы передаем в функцию createString. Несмотря на то, что у нас тут формируется HTML код, функция возвращает его в виде строки. Так же тут Я с помощью тернарного оператора задаю правильные концовки для слов секунд(а/ы)/минут(а/ы)  и так далее.

Как Я писал простой timer Typescript, Frontend, Javascript, Работа, Pikaweb, Гифка, Длиннопост

Результат выполнения этой функции мы передаем в метод render, который вставляет полученную строку в наш HTML. Ну а как только время истекает, срабатывает метод destroy.

Как Я писал простой timer Typescript, Frontend, Javascript, Работа, Pikaweb, Гифка, Длиннопост

А вот конечный результат

Как Я писал простой timer Typescript, Frontend, Javascript, Работа, Pikaweb, Гифка, Длиннопост

Вот в целом и все, такой микрокейс получился. Я понимаю, что код написан не идеально, не везде прописано, что возвращает функция или методам Я не прописал public|private, но тут все ограничивается одним классом, никакой сложной логики.

Возможно кому-то это будет интересно или даже пригодиться. Код получился небольшим: с полифиллом на IE 11 + комментариями  на 140 строк.
Код легко редактировать под себя,  ссылка на репозиторий тут.

Мне хочется спросить, стоит ли вообще выкладывать подобное? Я понимаю, что есть опытные программисты, для которых это - детсад. Но мне кажется, что тут есть люди с небольшим опытом, которые рады чему-либо научиться, плюс есть люди, которым будет интересно, чем же эти разработчики у себя там занимаются? 

А что вы думаете?

Показать полностью 4
[моё] Typescript Frontend Javascript Работа Pikaweb Гифка Длиннопост
15
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии