Задать вопрос
  • Рендер только новых элементов при добавлении их в массив?

    0xD34F
    @0xD34F Куратор тега React
    key={elem * Math.random()}

    при добавлении новых 20 в массив перерисовываются ещё и старые 300

    нет слов
    5ce68e39b7718977335131.jpeg
    Ответ написан
    7 комментариев
  • Как вызвать метод vue используя onClick?

    @cheeroque
    Может всё-таки v-on:click.prevent?
    Ответ написан
    Комментировать
  • Почему typescript не видит пременные окружения?

    askhat
    @askhat
    Читаем внимательно

    Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
      Type 'undefined' is not assignable to type 'string'.

    Разгадка

    process.env.DB_NAME может быть типа string или undefined, так как не факт, что переменные определены, а то место, куда DB_NAME вставляется ожидает строго строку.

    Решение

    Нужно проверять значение process.env.DB_NAME до того как оно будет передано конструктору:
    export const DB_NAME = process.env.DB_NAME ?? "default_database";

    Ответ написан
    2 комментария
  • Как вызвать действие, если ответ API больше X секунд?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Вам нужно параллельно запустить таймер и ваш запрос.
    Если запрос завершится раньше - очистите таймер и лоадер не покажется.

    let timerId = setTimeout(() => {
      // show loader
    }, 1000);
    
    fetch('API url').then((data) => {
      // prevent loader show
      clearTimeout(timerId);
    
      // show result
    });
    Ответ написан
    1 комментарий
  • Как создать коллекцию файлов FileList?

    zkrvndm
    @zkrvndm Автор вопроса
    Архитектор решений
    Лайфхак для создания коллекции файлов FileList:
    // Создадим простой текстовый файл:
    var data = 'Здесь текст для файла или положите в переменную Blob';
    var file = new File([data], 'primer.txt', {type: 'text/plain'});
    
    // Создаем коллекцию файлов:
    var dt = new DataTransfer();
    dt.items.add(file);
    var file_list = dt.files;
    
    console.log('Коллекция файлов создана:');
    console.dir(file_list);
    
    // Вставим созданную коллекцию в реальное поле:
    document.querySelector('input[type="file"]').files = file_list;

    В переменную data вместо текста, можно положить в том числе и Blob - это особенность функции new File() которая первым параметром может принять как массив из текстов, так и массив из Blob.

    Фактически лайфхак выше позволяет нам JavaScript-ом скачать любой какой угодно файл со своего сайта и вставить его абсолютно в любое поле <input type="file"> - что просто архиполезно для браузерных ботов.

    Также способ выше можно применить для редактирования уже выбранных пользователем файлов. Например, если надо из поля выбора файлов убрать какие-то определенные файлы и при этом не фиктивно, а реально.

    Огромное спасибо пользователю Mmx Symfony, который нарыл это решение где-то в недрах иностранных сайтов. Сам я в свое время сколько не искал везде был ответ, что это невозможно, а оказалось, что нихрена подобного =)
    Ответ написан
    8 комментариев
  • Как сверстать такой блок?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer
    Как вариант:
    Ответ написан
    Комментировать
  • Почему в Safari долго подгружается видео?

    dyuriev
    @dyuriev
    A posteriori
    про кодеки для веба:
    https://habr.com/ru/post/442020/
    если прочтете статью полностью, то вопрос "какие видеокодеки лучше использовать" отвалится сам по себе, более того варианты кодеков для веба и как их применять в теге актуальны на сегодняшний день, разве что поддержка AV1 значительно расширилась (но вот аппаратная в зачаточном состоянии)

    по части почему долго - предполагаю, потому что сначала грузит видео, а только потом его начинает воспроизводить, то с данной вводной инфой гадать остается, вероятно у вас mp4/H.264 и так-называемый moov-атом находится в конце контейнера, а не в начале, и сафари начинает воспроизводить файл только когда до него доберется. Но это голая теория в ответ на достаточно размытый вопрос

    принудительно перетащить moov-атом в начало mp4/H.264 файла можно с помощью ffmpeg:
    ffmpeg -i input_video_file.mp4 -vcodec copy -acodec copy -movflags faststart output_video_file.mp4
    Ответ написан
    Комментировать
  • Какие цвета не будут резать глаз?

    HanaK
    @HanaK
    Просто и понятно о финансах и налогах
    Есть еще сайт https://color.adobe.com/create
    Это сервис для дизайнеров, которые разрабатывают цветовые палитры.
    Квадратики с разными цветами ПОД колесом спектра — это палитра. В центре палитры — квадрат с галочкой, это отправной цвет. Этот же цвет отмечен кружочком с галочкой на колесе спектра:
    На этой палитре хорошо "примерять" сочетания и контрасты.
    Ответ написан
    Комментировать
  • Почему UTM - метки пропадают внутри сайта?

    @tgarl
    Что такое UTM-метка - это по сути просто параметр в адресной строке. В основном нужны для отслеживания в метрике сколько человек перешло по внешней ссылке откуда-то на конкретные страницы. К примеру пришло 1000 человек на страницу в целом, метка позволяет понять что например из письма всего 1, значит толку от такого письма. Так что логично что если на данную страницу человек пришел с метками, то дольше они не передаются. По вашему вопросу видимо вы что-то хотите получить, но для этого решили использовать инструмент меток. Объясните общую задачу.
    Ответ написан
    3 комментария
  • Как упростить код который должен возвращать true or false?

    Krasnodar_etc
    @Krasnodar_etc
    fundraiseup
    const isOpen = Boolean(rules.isDefault || rules.child?.length);
    Ответ написан
    Комментировать
  • Как написать регулярное выражение для телеграмм никнеймов?

    john36allTa
    @john36allTa
    alien glow of a dirty mind
    1. Узнать требования к никнейму
    Официальная документация требует:
    Символы: A-z (регистр не важен), 0-9 и "подчеркивание"
    Длина: 5-32
    2. Описать регулярку:
    const validTelegramNickname = /^[A-Za-z\d_]{5,32}$/;
    Ответ написан
    Комментировать
  • Есть ли кроссбраузерный вариант копирования текст в буфер обмена?

    @vsvasya
    function copyToClipboard(value) {
        var prev_focus = document.activeElement;
        var area = document.createElement('textarea');
        area.value = value;
        document.body.appendChild(area);
        area.focus();
        area.select();
        area.setSelectionRange(0, 99999); /* For mobile devices */
        document.execCommand('copy');
        document.body.removeChild(area);
        if (prev_focus) {
            prev_focus.focus();
        }
    }


    Работает везде - Firefox, Chrome, Safari
    Ответ написан
    Комментировать
  • Можно ли заставить расширение хром работать в фоне?

    calirails
    @calirails Автор вопроса
    Надим Закиров подсказал ответ на вопрос:
    для того чтобы избежать остановки таймеров, на странице, где работает скрипт запускаешь бесконечное воспроизведение mp3-файла с тишиной. Лично мне это помогает избежать заморозки.

    <video style="position: fixed; left: 30px; bottom: 30px; z-index: 99999; height: 55px; width: 300px; border-radius: 100px;" controls loop name="media">
      <source src="https://site.ru/fon.mp3" type="audio/mpeg">
    </video>
    Ответ написан
    Комментировать
  • Какие требования к junior front-end разработчику на 2020-2021 год?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    Требования не изменились за последние 20 лет.
    Умение САМОСТОЯТЕЛЬНО работать, искать вакансию и устраиваться.
    Если не можешь взять задачу на бирже, значит не готов работать на бирже.
    Если не можешь пройти интервью, значит не готов к работе в офисе.
    Ответ написан
    Комментировать
  • Как предпочтительнее вешать обработчик событий на элемент?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Чтобы ответить на этот вопрос, достаточно подумать над тем, как будет выглядеть подключение ещё одного обработчика в каждом из представленных случаев.
    Ответ написан
    1 комментарий
  • Как написать type guard для отдельного поля интерфейса?

    Lynn
    @Lynn
    nginx, js, css
    interface PostAttachVideo {
      type: 'video'
      attach: AttachVideo
    }
    
    interface PostAttachAudio {
      type: 'audio'
      attach: AttachAudio
    }
    
    type PostAttach = PostAttachAudio | PostAttachVideo
    
    function isAudio(attach: PostAttach): attach is PostAttachAudio {
        return attach.type === 'audio';
    }


    песочница
    Ответ написан
    Комментировать
  • Как выкинуть пользователя с сайта?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    Показать плашку с текстом:
    Отключите блокировщик рекламы чтобы продолжить пользоваться сайтом.
    Инфа сотка. Меня выкидывало с сайта безвозвратно.
    Ответ написан
    Комментировать
  • Живы ли вэб-компоненты?

    Suntechnic
    @Suntechnic Автор вопроса
    Мой собственный ответ после изучения темы и чтения иностранных коллег будет таким:

    Технология была многообещающей и интересной на старте. Для ее поддержки гугл даже придумал отдельную спецификацию HTML Imports: https://w3c.github.io/webcomponents/spec/imports/i... (можете не ходить, там 404), что позволяло подключать однофайловые компоненты прямо в документ так:
    <link rel="import" href="my-component.html">
    Классно же да?

    Но технология не приобрела популярности, возможно так как была слишком простой и понятной, а именно в это время на пик славы вышел npm, gulp и вот это всё. В моду входила непонятная магия, утрата контроля над кодом и всякие оптимизаторы позволявшие сделать для одного слайдера на главной страницы бандл в полтора, а иногда 2-3 Мб. кода, и всё это без всяких там jQuеry.
    Ребята одумались и убрали спецификацию HTML Imports, предлагая разбивать компоненты на 3 отдельных файла - js, css и html с шаблоном. Причём js надо было подключать на странице, css тоже, а html должен был загружать по задумке создателей уже в само js. Такой подход позволял резко усложнить работу с web-components и сделать код снова неуправляемым, но было поздно - технология уже уступила позиции конкурентам.
    Конечно это был сарказм, если кто-то не понял.

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

    Короче технология по задумке хорошая, но на практике не применимая, поэтому широкого распространения и не получает.
    Ответ написан
    2 комментария
  • Как определить тип переменной в зависимости от типа другой?

    Lynn
    @Lynn
    nginx, js, css
    Максимально близкое к желаемому это Discriminating Unions

    interface ModelOptionRange {
      value: [ number, number ];
      range: true;
    }
    
    interface ModelOptionValue {
      value: number;
      range: false;
    }
    
    type ModelOption = ModelOptionRange | ModelOptionValue;
    
    function check(v: number, cond: ModelOption): boolean {
      if (cond.range) {
        // тут cond точно типа ModelOptionRange
        const [ min, max ] = cond.value;
        return (min <= v && v <= max);
      } else {
        // а тут ModelOptionValue
        return v === cond.value;
      }
    }


    песочница
    Ответ написан
    1 комментарий
  • Как вывести тип из части интерфейса с вложенной структурой?

    Kozack
    @Kozack
    Thinking about a11y
    Book['author']
    Но если вам нужно чтобы по программе гуляли разные куски интерфейса, то лучше разбить его на куски
    interface BookAuthor { ... }
    interface BookPrice { ... }
    interface Book {
      id: number,
      author: BookAuthor,
      price: BookPrice
    }
    Ответ написан
    1 комментарий