Задать вопрос
  • Почему не работает setTimeout?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    setTimeout(function () {
      var counter = 0;
    
      setTimeout(() => counter++, 1000); // через 1с увеличит на 1
    
      console.log(counter); // выведет 0, сразу
    
      setTimeout(() => {
        console.log(counter);
        nextselect.addClass('same-as-selected').trigger("click");
      }, 1400); // через 1.4с "кликнет"
    }, 500); // вообще всё начнётся только через пол-секунды
    
    
    0         - начало
    0.5       - начнёт выполняться внешняя ф-я:
                зарядятся два таймера, в промежутке выведет 0
    0.5 + 1   - counter увеличится на 1
    0.5 + 1.4 - еще раз выведется counter, добавится класс, клик
    Ответ написан
    2 комментария
  • Как сделать так чтобы новый текст добавленный в фотошоп, не отличался от исходного текста сканированного документа?

    Наберите сначала тот же текст, что в оригинале, поверх. Подберите шрифт: начертание, размер, расстояние между букв.

    Как вариант, замените весь текст на перенаправленый с редактурой?

    Размытие, яркость, артефакты jpeg.
    Ответ написан
    2 комментария
  • Как скрыть IP адрес при отправке почты?

    sergiks
    @sergiks Куратор тега Веб-разработка
    ♬♬
    Можно использовать ориентированные на приватность почтовые сервисы.
    Например, Proton Mail.

    У них же есть бесплатный сервис VPN, чтобы ваш домашний ip скрыть ото всех кроме них. Но, типа, Швейцария.
    Ответ написан
    Комментировать
  • Как форматировать дату?

    const months_RU = 'Января,Февраля,Марта,Апреля,Мая,Июня,Данунаф,Лень,Дальше,Сами'
      .split(',');
    const parseDate = d => d.split('.')
      .reduce((acc, c, i) => (acc.unshift(i & 1 ? months_RU[+c - 1] : +c), acc), [])
      .join(' ');


    Использование: parseDate('2020.06.01') // "1 Июня 2020"

    Как это работает:
    По точкам разбить в массив строк ['2020', '06', '01'];
    собрать в массив задом-наперёд (день, месяц, год) – вставить в начало массива .unshift();
    Месяц – элемент нечётный, последний бит = 1, проверка i & 1 вернёт 1 только для месяца;
    месяц заменить на название из массива. Там нумерация с 0, поэтому -1.
    Остальные (год и дату) просто сделать из строки – числом, через унарный оператор +
    Получится массив [1, 'Июня', 2020]
    Склеить его элементы в строку через пробел: join(' ')
    Ответ написан
    Комментировать
  • В чем ошибка в цикле вывода четных чисел?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    1. for (let i = 0; i < 50; ...
      от 0 и до, но не включая, 50. Поменяйте 0 и < 50, чтобы это исправить.
    2. out += i + ' ';  // добавляется всегда, в любом случае
      if ( i % 2 != 0) continue; // проверка уже потом
      поменяйте порядок: сначала проверка, потом добавление
    3. document.querySelector('.out-2').innerHTML = out;
      срабатывает в каждой итерации цикла. А надо 1 раз, когда цикл отыграл все повторы. Вынесите эту строку из цикла.


    spoiler

    2..50 через один, по чётным — это 2 * (1..25) подряд.
    document.querySelector('.b-2').addEventListener('click', () => {
      document.querySelector('.out-2').innerText = Array(25) // создали массив из 25 пустых слотов
        .fill() // заполнили их undefined, чтобы можно было..
        .map((n, i) => 2 * (i + 1)) // каждый заменить на (его индекс + 1) * 2
        .join(' '); // и склеить в строку через пробел
    })
    все эти методы массива можно посмотреть на MDN.


    Ответ написан
    1 комментарий
  • Что означает такой ответ сети?

    При классификации размерность выхода обычно равна числу классов.
    1 из 3 действий == 3 «нейрона».

    На каждом некое значение от 0 до 1 — вероятности. Брать вариант с наибольшей вероятностью.
    Ответ написан
    Комментировать
  • Какой лучше онлайн-фоторедактор?

    Крутейший профессиональный Adobe Lightroom – оказывается уже и онлайн и попробовать бесплатно можно.
    Ответ написан
    Комментировать
  • Как создать функцию/переменную с проверкой, что они еще не созданы?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    чтобы не раздувать файл, решил вынести общие функции и переменные в отдельный файл

    Ну вот практически уже используете модули, но ещё не совсем. Раз там какие-то переменные хранятся, значит для каждого калькулятора, видимо, нужна своя _копия_ этого общего куска.

    Как вариант, оберните всё, что там общего, в класс или функцию или объект и создавайте для каждого калькулятора новую копию.

    calc_init.js?1 не удачная идея. Именно потому, что возникают описанные в вопросе проблемы.
    Лучше один раз его просто загрузить <script src="calc_init.js"></script>. Пусть там просто определяется единственная
    функция
    function calc_init(n, id) {
      let el_script = document.createElement("script");
      el_script.src = `/scripts/script_${n}.js`;
      el_script.setAttribute('defer', '');
      document.body.appendChild(el_script);
    
      let el_div = document.createElement("div");
      el_div.setAttribute('id', id);
      document.body.appendChild(el_div);
    }
    и потом вызывать его функцию:
    calc_init(1, 'id_calc_1'); // номер калькулятора и id HTML-элемента, куда его впихнуть
    calc_init(3, 'id_calc_3');
    Ответ написан
  • Как сложить числа из 2 функций?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Продумайте, в какой момент что происходит. Какие есть события.

    Из каждой функции обновляйте значение переменной и отображайте сумму переменных:
    var price_pech = 0;
    var price_idosn = 0;
    
    //... 
    function MyFunction(sum) {
      price_pech = sum;
      $("#total_price").text(price_pech + price_idosn);
    }
    Ответ написан
    4 комментария
  • Как отследить событие работающего таймера?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    в clearText() выполнять timer.innerHTML = 0;

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

    Таймеры в JS далеко не идеально точны. Если вкладка браузера перестаёт быть активной, таймеры в ней станут реже тикать. Поэтому не считайте setInterval(func, 1000) идеальной секундной стрелкой.

    Если важна точность, лучше запоминать момент времени const D = new Date(); и по таймеру брать текущее время и считать разницу с тем моментом: let seconds = Math.round((new Date() - D) / 1000)

    Событие таймера при этом можно вызывать чаще, чем раз в секунду: скажем, раз в 200 мс.
    Ответ написан
    Комментировать
  • Как сделать поиск нескольких div с id через textarea?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Вот для старта:
    дальше сами.

    id через пробел или запятую.
    $('#search').on('input', function(){ // При вводе текста..
      $('.table-item.-active').removeClass('-active'); // убираем класс .-active у .block.-active
      const ids = $(this).val().split(/[ ,]/).filter(el => el.length);
      for (let id of ids) {
    	  $(`.table-item[id="${id}"]`) // берём блок у которого есть совпадение по id
          .addClass('-active'); // выдаём ему класс .-active
      }
    });
    Ответ написан
    2 комментария
  • Как в js указать все числа находящиеся в определенном диапазоне?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    В JS есть клевая штука: генераторы.
    Чтобы не забивать сразу память всеми значениями (что, если понадобится от 1 до 1050), можно их получать по одному:
    // эта функция - Генератор. Он создаёт итерируемые штуки
    function* makeRangeIterator(start = 0, end = 100, step = 1) {
        let iterationCount = 0;
        for (let i = start; i < end; i += step) {
            iterationCount++;
            yield i;
        }
        return iterationCount;
    }
    
    // вот сделаем итератор от 1 и до 10 (исключая конец)
    var r1_10 = makeRangeIterator(1, 10);
    
    // в цикле получим из итератора значения
    for (i of r1_10) {
      console.log(i); // выведет от 1 до 9
    }
    Ответ написан
    Комментировать
  • Как нарезать видеозвонок, из вертикали в горизонталь?

    можно это сделать и через ffmpeg в один проход
    разбить вход split на два видео потока,
    в одном вырезать crop верхнюю часть
    в другом так же вырезать нижнюю часть
    соединить их горизонтально через hstack (у обоих должна быть одинаковая высота).
    Звук просто копируется со входа.

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

    похоже, а < 0,
    значит, вычитание из b отрицательного а только увеличит значение.

    По условию b и так больше 2.
    Ответ написан
    Комментировать
  • Как избежать блокирования окружности другими окружностями?

    Чтобы не пересекались, один из вариантов — включить «физику» и при наложении пары окружностей, двигать их как будто их центры отталкиваются, пока они не перестанут пересекаться.

    Для определения, не заперта ли, можно пытаться проложить маршрут, и если он невозможен, значит, заперли.

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

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Хорошие решения приходят в голову при чтении документации. Например, метод строки split() в качестве разделителя может принимать не только строку, а и регулярное выражение.

    Логика вашего скрипта: разбить текст по пробелу ИЛИ запятой ИЛИ точке. Регулярка для этого - группа символов в квадратных скобках: /[ ,.]/ — будет соответствовать пробелу или запятой или точке.

    Подвох в том, что могут получаться пустые строки как элементы массива. Например, из "test one." получится ["test", "one", ""] Поэтому стоит пройтись по массиву, оставив в нём только строки ненулевой длины: arr.filter(w => w.length > 0)

    Ну и взять длину полученного массива.
    Ответ написан
    Комментировать
  • Влияет ли цикл requestAnimationFrame на скорость воспроизведения анимации?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    разная частота вызовов функции в requestAnimationFrame() – зависит от устройства, активности/неактивности вкладки и др.

    Но в вашу функцию параметром при вызове передаётся время, прошедшее с некого момента старта, первого вызова. И положение куба стоит расчитывать исходя не из числа вызовов функции, а только исходя из времени.

    Так анимация в разных условиях будет иметь идентичную скорость перемещения куба, хоть и с разной частотой кадров: где-то плавнее, где-то скачками, но, например, коснётся пола он одновременно на всех устройствах.
    Ответ написан
    Комментировать
  • Как ускорить while loop?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    includes() и indexOf() каждый раз, считайте, пробегают, в среднем, по полстроки.
    Представьте, что там дико длинные строки, гигабайтные.
    Поэтому алгоритм желательно построить так, чтобы по каждой Войне и Миру пройтись 1 раз или меньше.

    Условие хорошо сужает возможные символы до всего 26 букв латинского алфавита a..z

    Рабочее решение под
    спойлером

    Например, можно создать массив из 26 счётчиков и заполнять их из первой строки и опустошать из второй.
    Вот такое моё решение прошло тест:
    function scramble(str1, str2) {
      if (str1.length < str2.length) return false;
      const a = Array(26).fill(0);
      for (let c of str1) a[c.charCodeAt(0) - 97]++;
      for (let c of str2) a[c.charCodeAt(0) - 97]--;
      for (let n of a) if (n < 0) return false;
      return true;
    }
    * 97 это ASCII-код маленькой латинской "a"
    Ответ написан
    Комментировать
  • Как записать в одномерный массив все элементы из многомерного?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Ошибка в том, что возвращается всегда массив.
    В т.ч. там, где вроде бы хотели массив распаковать.
    Ответ написан
    Комментировать
  • Как найти координаты точек на дуге зная координаты точек хорды?

    1. найти координаты центра (центр может быть как по одну, так и по другую сторону отрезка)
    2. найти угол от оси X к точке А
    3. найти угол от оси X к точке B
    4. найти угол от оси X к искомой точке на дуге.
      Длина дуги пропорциональна углу. Поэтому 1/2 длины находится на 1/2 угла: угол_к_В + (угол_к_А - угол_к_В) / 2
    5. найти координаты точки, исходя из центра, угла и радиуса


    картинка
    5ee5da3a004ae356565895.png
    Ответ написан
    Комментировать