Задать вопрос
Ответы пользователя по тегу JavaScript
  • Как редактировать контент сайта человеку не знающему HTML (без конструкторов)?

    @rPman
    Тебе нужна 'система управления к содержимым' (content management system), в общем случае это программа которая из текста делает html, и делает это в удобном и понятном виде.

    Либо ты пользуешься готовыми системами типа конструкторов сайтов и новыми cms типа древнего wordpress, либо пишешь его сам
    Ответ написан
    4 комментария
  • Почему аргументы принимаются именно в таком порядке?

    @rPman
    потому что apply(this_объекта, array_аргументы)

    наоборот ты передал вместо объекта массив ['Hello'] это не твой объект с name, а с объектом уже не работает ${...} и тоже вернет undefined
    Ответ написан
    Комментировать
  • Как сделать распределение по процентам, чем дороже цена тем меньше шансов?

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

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

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

    Поэтому большинство розыгрышей делают не честным (например игровые автоматы), с целью убрать серию убыточных для организатора выигрышей, например выставляя условие, если общая сумма выигрышей прошедших розыгрышей выше некоторого лимита, то дорогие выигрыши исключаются из следующего розыгрыша. Так же как частный случай, можно заранее провести розыгрыши некоторого количества призов и если их сумма не превышает лимита, сохранить их список или сохранить стартовый seed генератора случайных чисел, чтобы иметь гарантии. У второго подхода есть уязвимость, сотрудники компании, имеющие доступ к этим сохраненным результатам, могут их использовать для повышения своих шансов на выигрыш, фактически грабя остальных участников.
    Ответ написан
  • Почему при изменении объекта он не меняется в массиве?

    @rPman
    проводи эксперименты дальше, например obj.name="asd" изменит объект в массиве arr

    переменная obj содержит не сам объект а ссылку на него, точно так же ссылку на него помещаешь в arr[0]

    объект должен умереть автоматически если его ссылку никто не сохранит

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

    @rPman
    Выводишь все карточки на php, но в style корневого div-а каждой ставишь им display:none, а скриптом на js в зависимости от фильтра пробегаешь по всем корневым div-ам каждой карточки и включаешь их отображение display:inline (тогда карточки будут располагаться друг за другом), можешь использовать display:block тогда один над другим будет (там еще от float зависит)

    Работа с элементами на javascript зависит от выбранного фреймворка, например в jquery ты можешь написать $('.имя_класса').each(function(){...}), а чтобы удобнее было фильтровать, заранее на php добавь каждому корневому тегу атрибуты со значениями по которым будешь проводить фильтрацию, например атрибут category а значения Шведский стол, другой атрибут curency а значения usd/rub/... тогда выбирая в фильтре значения в функции erach просто проверяешь сравниваешь значения атрибутов с выбранными на форме и соответственно включаешь и выключаешь их.

    Этот подход наиболее простой, для тех кто большую работу по формированию страницы делает на php но хочет внести в логику страницы больше динамики на основе javascript. Недостаток - клиент получает вне зависимости от выбранного фильтра полный список карточек, и если их много, лучше реализовать другой способ...

    Если формировать карточки на javascript, размер данных, передаваемых с сервера будет в несколько раз меньше, так как описание карточки занимает значительно меньше места в сетевом трафике чем готовых html (с оговорками, если включено сжатие страницы на сервере, то разница в размерах будет уже не такой значимой)
    Ответ написан
    Комментировать
  • Как сделать, чтобы количество активных чекбоксов не опускалось ниже определённого?

    @rPman
    тебе нужно использовать штатный <input type=radio...
    Ответ написан
    Комментировать
  • JS. Как конвертировать данную строку в массив?

    @rPman
    Ответ написан
    Комментировать
  • Как спарсить котировки в Google Sheets?

    @rPman
    Потому что эта цифра формируется на javascript, там с помощью ajax делается что то типа (не факт что я верно угадал, тупо поиском в инспекторе браузера нашел)
    https://futsseapi.eastmoney.com/static/115_OI409_mx/11?callbackName=jQuery35104319374984631833_1697039773745&token=1101ffec61617c99be287c1bec3085ff&_=1697039773761

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

    Если отреверсишь логику, теоретически сможешь ее повторить на javascrpt в google docs
    Ответ написан
    Комментировать
  • Если ли библиотека блокировщик реклам?

    @rPman
    javascript веб сайта работает с пониженными правами доступа, ограниченными только своим доменом. К iframe 'с видео' доступа нет.

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

    @rPman
    Можно исключить историю в принципе сделав SPA (single page application) а переходы внутри приложения это изменения содержимого страницы (как вариант, страницы сайта это части этой единой страницы, но сокрытые стилями display:none, текущая часть сайта просто устанавливается видимой)

    p.s. то же самое можно реализовать и при формировании страницы на сервере, в этом случае необходимо состояние своего приложения сохранять в cookies сайта а не собирать из url

    Не надо так ломать пользовательский опыт, не делайте так. Многие при создании SPA подхода мучаются чтобы история все же была (через anchor навигацию url#id)
    Ответ написан
    Комментировать
  • Как заблокировать возможность делать скриншоты на моем сайте или хотя бы по нажатию на PrtScn возвращать серую картинку вместо изображение сайта?

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

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

    p.s. правильно тебе говорят, что если что то ты видишь глазами, значит ты это можешь сфотографировать, записать и проанализировать.

    Технология применяется для видеоконтента только потому, что при копировании внешними средствами (видеокамера с экрана) качество видео уменьшается, но возможно использование эмуляторов мониторов с энкодером.
    Ответ написан
  • Движение шара до точки по выгодной траектории, как сделать?

    @rPman
    Выгодная траектория, это значит тебе нужен критерий оценки выгоды, в зависимости от него и будет алгоритм.

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

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

    @rPman
    Дублируй, это не недостаток, а прямое следствие оптимизации
    Ответ написан
    Комментировать
  • Собственное поле для ввода на чистом JavaScript?

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

    @rPman
    Первый же из гугла не подходит?
    Ответ написан
    Комментировать
  • Почему гаснет экран смартфона при просмотре видео?

    @rPman
    Если я верно понимаю ситуацию, некоторое время назад (год или два вроде бы) android обновили политику автоматического отключения экрана и меньше стало зависеть от браузера. Смотрите в настройках браузера, ищите настройки сна android (зависят от вендора)
    Ответ написан
    Комментировать
  • Как научить нейронку выигрывать в моей Phaser.js игре?

    @rPman
    Если RL для тебя сложно, используй менее эффективный но очень простой подход - генетический алгоритм.
    Это очень тупой и простой для реализации подход, ты реализуешь свою игру в виде метода (ты его всеравно должен бы сделать для RL), с помощью которого ты будешь тестировать своего бота:
    * независящего от реального времени (т.е. внутренний таймер есть но игра проходит максимально быстро в реальном времени без пауз)
    * фиксированным сидом для случайных событий (т.е. повторный запуск с теми же параметрами должен выдать тот же результат)
    * пропускающего вывод графики
    * на вход которого подается твой алгоритм управления (не важно чем он будет, главное чтобы он однозначно описывался какими то числами), т.е. управлением занимается метод который ты передашь в вызове
    * на выход этот метод выдавал бы давал оценку, на сколько хорошо выбранный алгоритм прошел игру (0 - умер, и плюс число за звезду)
    * добавляешь в этот метод лимит по внутреннему времени (т.е. чтобы - возвращало за невыполнение задания, в твоем случае это не собрал звезды)
    * можно привязать оценку ко времени, например разделить собранные звезды на затраченное время (добавь какой-нибудь коэффициент влияния времени на итог).

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

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

    Задача будет решена, но времени (вычислительных ресурсов) для этого может потребоваться очень много.

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

    @rPman
    тут два подхода

    Первый, считаем количество точек, до символа 'не точка', либо
    удалить начало строки до первого пробела
    считаем количество символов до пробела.
    Затем простым substr вырезаем строку с найденной позиции.

    Второй способ, написать регулярное выражение (промышленный стандарт по работе со строками, просто но часто избыточно по ресурсам) которое выделит нужную строчку, и посмотреть ее размер или сразу вызвать что то типа string.replace(/регулярное выражение/,'')

    в регулярном выражении символ начала строки - ^, повторение символа + после этого символа, точка и плюс в регулярных выражениях зарезервирована, значит нужно добавить \ перед ними, типа так: /^\+\.+/

    Если количество точек может быть нулевым (т.е. плюс и сразу пробел) значит вместо + использовать *
    Ответ написан
    Комментировать
  • Как отслеживать изменение локального файла в директории через js?

    @rPman
    Сама идея приложения у тебя максимально неправильная но да ладно.

    В тегах у тебя php, на нем обычно пишут бакэнд - серверную часть, вот и отслеживай изменения в файле через него. Т.е. к примеру на javascript из браузера по таймеру (setInterval) раз в 1-10 секунд делаешь запрос на сервер вида - выдай мне изменения в файле начиная с такой то даты (например новые строки) или пустой ответ. А на php код должен проверять дату последнего изменения в файле метод filemtime (осторожно, результаты кешируются, поэтому перед проверкой сбрасывай кеш) и сравнивать с датой, которую запросил браузер.

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