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

    0xD34F
    @0xD34F Куратор тега JavaScript
    "Числовые" функции проверяют, является ли переданное им значение функцией, если да - вызывают её со своим числом в качестве аргумента, нет - просто возвращают число.

    Функции операций принимают второе число, возвращают функцию, принимающую первое число и производящую над переданными числами операцию.

    const [ zero, one, two, three, four, five, six, seven, eight, nine ] = Array.from(
      { length: 10 },
      (_, i) => f => f instanceof Function ? f(i) : i
      // или
      // (_, i) => f => f?.(i) ?? i
    );
    
    const plus = a => b => b + a;
    const minus = a => b => b - a;
    const times = a => b => b * a;
    const dividedBy = a => b => b / a | 0;
    Ответ написан
    Комментировать
  • Как выполнять вычисления с помощью функций (результат вызова предыдущей должен быть аргументом следующей)?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Решаю задачи на codewars, не могу решить задачу с функциями?

    Да, не можете.
    Ответ написан
    Комментировать
  • Как скопировать текст из iframe в переменную js?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Если в iframe загружена страница с того же origin (протокол + домен + порт) откуда загружена текущая - то Вы имеете полный доступ к его window через свойство contentWindow. Соответственно можете обращаться к его DOM, глобальным переменным, менять их и т.д.

    Если в iframe будет страница с другого origin, то ничего этого нет, с ней можно лишь общаться через postMessage api, но если страница не Ваша, то и скрипт для обработки postMessage + каких-либо еще действий Вы туда не вставите.

    Если сторонний сайт отдает нормальные CORS заголовки при запросе с Вашего сайта (что судя по вопросу не так, но все же), то можно скачать страницу как текст через fetch api и распарсить ее через DOMParser.

    В противном случае остается только делать прослойку у себя на сервере, тут простор фантазии может быть очень широким, от банального reverse proxy прямо в nginx до чего-то более умного на любом серверном ЯП.
    Ответ написан
    Комментировать
  • Ошибка на сайте, в чем проблема?

    arutyunov
    @arutyunov
    Mooza.ru — Делаем сайты
    Вот тут замазать забыл: 51fe7e3a97.png

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

    Вероятнее всего что-то не так с настройками сервера, либо какой-то плагин дал сбой.
    Ответ написан
    3 комментария
  • HTML5 Canvas: возможно ли сделать скриншот канваса при изменении объекта без лагов?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Всё просто.
    Чтобы снять скрин - нужно время: T1
    Чтобы перерисовать сцену/объект - нужно время: T2
    А вот чтобы сделать копию региона canvas - нужно время T3.
    Подытожим: T1>T2>T3

    Чтобы снять быстро скрин, нужно:
    1. Получить нужный регион из визуальной сцены (игрового canvas'a) в переменную
    2. Создать новый объект канваса в памяти (без помещения в DOM!)
    3. Скопировать в него изображение из переменной
    4. Сохранить куда нужно

    Копирование - тут.
    После того, как заберёте фрагмент - сразу переходите в асинхронный режим, передав сохранение воркеру. Ну и каждый кадр сохранять (60fps) - не советую, если это возможно.
    Ответ написан
    21 комментарий
  • Как сделать ползунок HTML?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Комментировать
  • Как найти координаты точек круга?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Простой вариант, когда смотрят на шар на уровне экватора, в параллельной проекции.
    Центр шара примем за точку отсчёта, ноль.
    Два угла определяют положение точки на поверхности шара относительно его центра:
    • широта (latitude, север-юг) от -∏/2 (северный полюс) до ∏/2 (южный полюс);
    • долгота (longitude, запад-восток) от 0 до 2∏ (полный круг).


    В прокции на плоскость (экран) точки шара попадут внутрь окружности радиуса R. Центр попадет в центр. Северный полюс – в верхнюю точку, южный – в нижнюю.

    Высота зависит только от широты, тут всё просто: y = R * sin(lat)
    Влево-вправо от центральной оси зависит от обоих углов. От широты зависит максимально возможное удаление от оси R * cos(lat). А ещё уменьшиться оно может в зависимости от долготы: надо домножить на cos(lng). Итого получается x = R * cos(lat) * cos(lng)



    Кроме того посмотрите в коде, как правильно создавать элементы внутри SVG и задавать им атрибуты. А также значение viewBox чтобы (0, 0) была по центру.
    Ответ написан
    1 комментарий
  • По какой причине не работает JS?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Почему не работает? Работает.
    5bb671ad01b71990299728.png
    Старательно заменяет каждый символ на пару квадратных скобок.
    Правда, после того, как изменен рутовый элемент (html), других элементов не остаётся.
    Ответ написан
    Комментировать
  • NPM не устанавливает пакеты, а папка node_modules не создаётся, что делать?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    -g - глобальная установка, а не в твое приложение
    Ответ написан
    Комментировать
  • Как изменить значение переменной после окончания рекурсивных вызовов setTimeout?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вы, кажется, не понимаете асинхронной работы в JS. Функция SetTimeout не ждёт указанное время (у вас 2 секунды). Она настраивает таймер и сразу же возвращается. Указанная в SetTimeout функция через указанное время будет поставлена в очередь вызовов JS и запущена, когда до неё дойдёт очередь.
    Таким образом, функция bbb, вызванная из aaa завершится практически сразу же. Вы можете записать так:
    function bbb() {
      if(...) {
        variable = true;
        return;
      }
      SetTimeout(bbb, 2000);
    }

    Но переменная изменится только по срабатыванию условия, когда функция aaa давно уже завершится.
    Ответ написан
    Комментировать
  • Phaser.js - как менять размеры игры, чтобы на разных экранах она всегда занимала весь экран?

    @GreatRash Автор вопроса
    Короче, раз уж мне никто не отвечает... После 3-х дней поисков я набрёл на решение на StackOverflow:

    (function() {
      var targetWidth = 640, // идеальная ширина приложения (под неё рисуем спрайты и т.п.)
            targetHeight = 960, // 640х960 - это iPhone 4, под меньшее разрешение наверно нет смысла делать
                
            deviceRatio = window.innerWidth / window.innerHeight,
            newRatio = (targetHeight / targetWidth) * deviceRatio,
                
            newWidth = targetWidth * newRatio,
            newHeight = targetHeight,
                
            game = new Phaser.Game(newWidth, newHeight, Phaser.CANVAS, ''); // последний аргумент - родитель (если пусто, значит canvas создастся в body)
                
            game.state.add('Boot', Boot);
            game.state.add('Preload', Preload);
            game.state.add('Game', Game);
                
            game.state.start('Boot');
    })();
    
    // ... Далее внутри Boot.js пишем
    
    Boot.protoytpe = {
      create: function() {
        this.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL;
        this.scale.pageAlignHorisontally = true; // можно не выравнивать, но я остаил
        this.scale.pageAlignVertically = true;
        this.scale.forcePortrait = true;
      }
    };
    Ответ написан
    2 комментария
  • Как редактировать JavaScript "на лету" в Google Chrome?

    @code_maniac
    Если кому вдруг понадобится.

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

    --debug-packed-apps
    --silent-debugger-extension-api

    Либо каждый раз при необходимости запускать браузер с этими флагами, либо просто один раз включить их:

    chrome://flags/#debug-packed-apps
    chrome://flags/#silent-debugger-extension-api
    Ответ написан
    Комментировать