Задать вопрос
Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (1)

Наибольший вклад в теги

Все теги (14)

Лучшие ответы пользователя

Все ответы (36)
  • Как сделать подобное?

    @f_ban
    Конкретно в данном примере canvas использован. А если взять в общем, разобрашись с стандартами/спецификациями HTML5 (CSS, DOM, JS) + SVG, то можно и более изящное решение сделать, у которого внешний вид и поведение каждого визуализируемого объекта настраивается в таблице стилей и обработке событий и легко меняется в коде JS. Таким образом, не придется по каждому чиху переписывать код отрисовки (да и вообще с ним заморачиваться).
    Если же визуализируемых объектов будет многовато, то наверное все таки лучше канвас.
    Ответ написан
    Комментировать
  • Как валидировать форму для скачивания файла с минимумом JS?

    @f_ban
    1. Используйте input[type=submit]/button[type=submit]
    2. Подпишитесь на событие submit на форме
    3. В обработчике события запускайте загрузку файла с помощью примерно такой функции
    // https://stackoverflow.com/questions/3916191/download-data-url-file/45905238#45905238?newreg=ddb3c48865d04c319b39f772df762521
    function download(dataurl, filename) {
      var a = document.createElement("a");
      a.href = dataurl;
      a.setAttribute("download", filename);
      a.click();
    }

    3. Что касается невозможности нажатия на кнопку сабмита, если хоть одно поле формы не валидно, то навешайте примерно такой стиль:
    #someform:invalid [type=submit]{
      pointer-events: none;
      
      /* другие нужные стили, да хоть display: none; */
    }

    4. Если редирект хотите выполнять на бэке, тот здесь проблем нет - просто перенаправляйте в бэковом обработчике формы. Если будете редиректить клиентом, то в обработчике сабмита отмените дефолтовую реакцию на ивент, с формы соберите данные и пошлите AJAX-ом на бэк, и затем делейте редирект на сэнкью-пейдж, если данные отправились успешно.
    Ответ написан
    Комментировать
  • Как переписать функцию через промисы?

    @f_ban
    const fs = require('fs');
    const path = require('path');
    
    let pathSupplied = './';
    let extFilter = 'js';
    
    let extension = (element) => {
        let extName = path.extname(element);
        return extName === '.' + extFilter;
    };
    
    let walk = function (dir) {
        const result = [];
    
        fs.readdir(dir, function (err, list) {
            list.forEach((item) => {
                let itemPath = path.join(dir, item);
                fs.stat(itemPath, (e, stats) => {
                    if (stats.isDirectory()) {
                        walk(itemPath);
                    } else {
                        if(extension(itemPath)){
                            console.log(itemPath)
                            result.push(itemPath);
                        }
                    }
                });
            });
        });
    
        return result;
    }
    
    walk(pathSupplied);
    
    walkAsync = (dir)=>{
        return new Promise((resolve)=>{
            resolve(walk(dir))
        });
    }
    Ответ написан
    Комментировать
  • Возможно ли определить включен ли GPS на смартфоне из мобильного браузера?

    @f_ban
    Прямого API, предоставляющего такой функционал, не встречал.
    Использую такой трюк. Метод navigator.geolocation.getCurrentPosition() вторым параметром принимает обработчик ошибок. Если в обработчик попала любая ошибка кроме PERMISSION_DENIED, то сообщаю пользователю, что геолокация не доступна, прошу проверить включен ли модуль геолокации.
    Ответ написан
    Комментировать
  • Вопросы об одной строке React кода?

    @f_ban
    Судя по приведеному коду:
    1. В this.state.active хранится индекс текущего активного айтема.
    2. Через this.props.items в компонент прокидвыается массив айтемов, с которыми нужно работать.
    3. Могут сойтись звезды так, что this.state.active будет иметь значение, выходящее за пределы массива this.props.items (самое первое предположение о природе данной проверки). В этом случае конструкция this.props.items[this.state.active] вернет значение undefined,
    4. Далее в работу включается оператор &&, в случае когда (false && чтото_там_еще), выигрывает то, что справа. Оператор && сперва стратается привести значение слева к булевому, по одному определенному алгоритму приведения, в частности undefined приводится к значению false. Таким образом, конструкция будет исполнена только если this.props.items[this.state.active] не вернет undefined/null/0/''/false.
    5. Конструкция {...this.props.items[this.state.active]} говорит о том, что все свойства возвращенного объекта нужно вставить как пропсы в создаваемый Content
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (4)