Ответы пользователя по тегу JavaScript
  • Синтез речи на сайт, но не Web Speech Api?

    @rPman
    Лучший открытый русскоязычный голосовой движок мне известный - rhvoice, есть во всех формах, от Windows SAPI до компилируемой библиотеки или android версии.

    Оформляешь его в виде бакэенда и шлешь строчки текста, необходимые к синтезу через него.
    Лучше варианта не найти. В теории, можно запустить библиотеку на клиентской стороне, собрав библиотеку на WebASM, но не уверен что это даст какую то пользу.
    Ответ написан
    Комментировать
  • Как отредактировать HTML блок, который содержит переменная в JS?

    @rPman
    Это называется шаблонизатор, для javascript их миллион и маленькая тележка, можете даже простым string replace подменять какие то метки в текстовом определении вашего блока на переменные значения.
    Ответ написан
    Комментировать
  • Возможно ли отменить действие стороннего скрипта при клике?

    @rPman
    Пересоздай элементы DOM, удалив старые, но уже без настроек событий
    Ответ написан
    4 комментария
  • Как передать значение value внутри html страницы?

    @rPman
    $('#bbb').text=$('input').value

    без установленного jquery для каждого типа элемента нужно будет своими полями/методами пользоваться, где то value, где то text, где то делать setAttribute, а может вручную генерировать DOM

    Так же для всяких полей ввода установка значений не вызывает событий onchange или других, а многие их ожидают, думая что поля задают только вручную.
    Ответ написан
    Комментировать
  • Замена long polling для отслеживания изменений в бд?

    @rPman
    Какого фига вы рекомендуете человеку удалять гланды через задницу. Какой вебсокет в mysql вы что? Какие тригеры.

    Бакэнд является единственным, кто должен менять критичнуюинформацию в базе, вот пусть он и рассылает в вебсокет нужную информацию клиентам.

    Вебсокет сервер это пять строчек на php, пара строк на клиенте и легкие рукошевеления для настройки автозапускаемой службы. Если вебсокет уже есть то делать ничего не надо. Придумываете тип сообщения, которое сервер будет слать по этому вебсокету клиентам, клиенты его не должны отображать а вместо этого запрашивать информацию тем старым методом, которым вы сейчас ежесекундно обновляете данные. ВСЕ.

    Когда клиент дает цену товару, бакэнд смотрит, какие клиенты его покупают и шлет им сообщение. Возможно придется держать в памяти массив - какой клиент в базе = клиент вебсокет, но с вероятностью 99.(9)% это уже сделано (как минимум имя отображать и авторизация)
    Ответ написан
    Комментировать
  • Как из двумерного массива извлечь элементы, у которых значения по определённому индексу не уникальны?

    @rPman
    Чтобы найти повторяющиеся значения, необходимо собрать их список, создаете объект, в ключи которого записываете ваши [0].
    Затем своим простым циклом собираете новый массив, в который добавляете все значения, присутствующие в этом индекс-объекте.
    Ответ написан
    Комментировать
  • Как можно автоматизировать следующую систему?

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

    Осторожно с обновлениями, точнее с перезапуском бота при обновлениях или обслуживании. Вам нужно либо делать бот таким чтобы можно было безопасно в любой момент его 'остановить' (нужно понимать что ни одна операция с файлами на диске не мгновенна), т.е. вводить механизмы по временной их остановке с ожиданием окончания критичных процессов на это время (и соответствующий мониторинг для вас, чтобы можно было оценить чего ждете).
    Ответ написан
    Комментировать
  • Как правильно перерисовать canvas при ресайзе окна?

    @rPman
    Ты же сам задал размер в vh/vw а они по определению процент от размера окна.
    Делай в px или хотя бы в em

    canvas такой же элемент как и другие, устанавливайте стиль background:transparent; или opacity:XXX;
    Ответ написан
  • Как сделать табы с использованием history api?

    @rPman
    Без использования history api можно сделать штатным способом через anchor # в ссылке страницы.

    При смене страницы никакой перезагрузки не происходит, с точки зрения бразуера это новая страница, а значит будет работать переход вперед назад по истории, смену anchor можно отслеживать с помощью javascript, читать что именно после # и реагировать по вашей логике.
    Ответ написан
    Комментировать
  • Почему при перезагрузке страницы, данные пропадаю, хотя сохранены в localStorage?

    @rPman
    У тебя save_element(); вызывается прямо в рендере перед валидацией полей и чтением этих полей из стораджа, логично что там пусто.

    Сохранять нужно после ввода даных
    Ответ написан
  • Можно ли запретить сторонние обращения к ресурсам с помощью javascript?

    @rPman
    Можно подменить методы, особенно если используется jquery, но и вообще любые методы можно подменять, заменяя своими

    например:
    var oldXMLHttpRequest=XMLHttpRequest;
    XMLHttpRequest=тут описываешь свой класс, который будет выступать прослойкой проверяя оп каким то критериям нужно ли пропускать запрос и вызывая oldXMLHttpRequest
    Ответ написан
  • Не видит файл JS который существует, почему так происходит?

    @rPman
    Посмотри очень внимательно на пути, вполне возможно что nginx указан не тот каталог, к примеру старая копия где то лежит, забыл конфиг перенастроить

    Вон на скрине видно что в терминале каталог _nuxt/dist/... а в логах nginx _nuxt/
    Ответ написан
    Комментировать
  • Как по клику заменить содержимое во всех div с одинаковым id?

    @rPman
    Найти все элементы div и перебирая каждый запрашивать атрибут id, сравнивая его значение с желаемым.

    То что браузеры позволяют делать несколько элементов с одинаковым id не значит что это правильно. Идентификатор по определению должен быть уникальным.

    Используйте другие атрибуты для этого
    Ответ написан
    Комментировать
  • Эффект тепловизора javascript?

    @rPman
    Рисуешь на канвасе, на каждом onmousemoove прибавляешь к области в текущих координатах и ее окрестностях (размер рисующего круга) к интенсивности, причем чем дальше от центра, тем меньше прибавляешь, возможно для красоты использовать свою маску, небольшое изображение, определяющее твою кисть. Если мышка не двигается какое то время (setTimeout и сбрасывать счетчик на onmousemoove) то с некоторым шагом времени начинаешь вычитать из каждого пиксела интенсивность.

    Если под интенсивностью. и ее изменениями подразумевать и менять одновременно все три канала rgb, т.е. 0.0.0 - это 0, а 255,255,255 - 255 то у тебя будет чернобелый аналог того что на сайте.

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

    Чтобы туда сюда цвета не запрашивать с канваса, можно хранить интенсивность в отдельном массиве.

    p.s. если попиксельно будет медленно, ищи операции с изображениями в целом или даже webgl
    Ответ написан
    Комментировать
  • Как можно определить последнюю открытую вкладку сайта в браузере, на JS?

    @rPman
    Вопрос составлен ужасно, но если я верно понял - у вас высокая нагрузка на сервер из-за неправильно выбранной технологии.

    Чтобы на стороне клиента мониторить события, которые им хочет сообщать сервер, вам нужны websocket или хотя бы long pooling (устаревшая технология на тот случай, если вебсокеты не доступны).

    Первое очень просто - клиент держит специальное подключение к специальному websocket серверу, который вы должны поднять на сервере (реализация вебосокет есть на всех популярных языках, начиная с php).
    Пример сервера - https://reactphp.org/
    На клиенте - штатный https://developer.mozilla.org/en-US/docs/Web/API/W...

    Второе - специальный запрос к бакенд серверу на файл, который сервер не отдает до тех пор пока ему не понадобится что то сообщить клиенту (причем каждому клиенту сервер по своему отдает это файл), это реализуется на любом языке очень просто, но не так эффективно как через вебсокет сервер.
    Пример -https://github.com/panique/php-long-polling
    Ответ написан
    4 комментария
  • Как определить реальную видимость элемента?

    @rPman
    nodeElement.getBoundingClientRect() возвращает прямоугольник, если у него размеры =0 то он невидим.

    Вот пример, этот код инжектят на страницу и он периодически сканирует ее всю и возвращает список видимых объектов с координатами их областей.
    Ответ написан
  • Есть ли минусы у многократной подгрузке скриптов в модули?

    @rPman
    На сколько мне известно в require проверяет, загружался ли модуль и если да, то он просто возвращает уже проинициализированный объект

    Осторожно с относительными путями (типа './file.js'), одна и та же строчка в зависимости от места расположения вызывающего скрипта, будет искать модули в разных местах и если там будут файлы с теми же именами (например разные версии модуля) то вопрос, будет ли использован кеш для второго вызова но другого скрипта или нет.
    Ответ написан
    Комментировать
  • Можно ли сделать функцию, которая вернёт первую выполненную команду?

    @rPman
    В пределах сессии (веб-приложения или одной страницы, если не используются фреймы, хотя для хромиум это вопрос исследования) javascript выполняется в пределах одного процесса, это значит не получится запустить две функции в разных потоках чтобы они выполнялись одновременно... только последовательно.

    Попробуйте web-workers, они по уму могут работать в отдельном процессе, т.е. запускаете два воркера в каждому своя функция и ждете кто первый вернет результат.... Но учтите, даже в случае многопоточного исполнения никаких гарантий что повторный вызов даст тот же результат по скорости.
    Ответ написан
    Комментировать
  • Как включить JS после выхода из режима ожидания?

    @rPman
    Ловите событие appresume
    window.appResumeEvent = new Event('appresume');
    window.addEventListener('appresume', yourFunction, false);

    ну и это
    Ответ написан
    Комментировать
  • Как запустить три асинхронных функции последовательно через Callback?

    @rPman
    Какое то эпическое непонимание проблемы, а есть ли проблема?
    эм
    function first() {
      setTimeout(() => {
        second();
        console.log("первая ended");
      }, 300);
    }
    Ответ написан
    Комментировать