Задать вопрос
  • Почему не работает таймер когда наступает новый час?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Открываешь консоль и видишь там красный текст "hours is undefined" или типа того. Понимаешь, что у тебя в коде задано не hours, а h, исправляешь и не отвлекаешь людей тупыми вопросами.

    P.S. Для таймера правильно использовать Date, время исполнения setInterval может быть изменено со стороны браузера или из-за нагрузки.
    Ответ написан
  • Как использовать директивы внутри кастомных директив в nuxt 3?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Встроенного механизма наследования нет. Директивы - это уже продвинутый механизм, подразумевается, что раз уж вы взялись за директивы - вы глубоко понимаете механизмы Vue. Если вам сильно хочется таки использовать чужую директиву внутри своей, надо будет самостоятельно экспериментировать, навскидку вижу два варианта:
    1. "тупой", но точно работающий - пробрасывать все возможные хуки директивы напрямую:
    const myDirective = {
      created(el, binding, vnode, prevVnode) {
         otherDirective?.created(el, binding, vnode, prevVnode);
         ...
      },
      beforeMount(el, binding, vnode, prevVnode) {
         otherDirective?.beforeMount(el, binding, vnode, prevVnode);
         ...
      },
      ....
    }

    2. "умный", но требующий знаний и экспериментов - манипуляции напрямую с vNode.

    Однако, возможно, лучше будет сделать просто-компонент-обёртку, который просто навесит все нужные директивы на обёрнутый компонент, примерно так:
    import { useSlots, withDirectives, resolveDirective } from 'vue'
    
    export default {
      setup() {
        const htmlDirective = {
          mounted(el, html) {
            el.innerHTML = html.value
          }
        }
    
        const colorDirective = {
          mounted(el, color) {
            el.style.color = color.value
          }
        }
        
        // const someDirective = resolveDirective('some-directive');
    
        const slots = useSlots();
    
        return () => withDirectives(slots.default()[0], [
          [htmlDirective, 'some html'],
          [colorDirective, 'red'],
        ])
      }
    }

    <wrapper><some-compnent /></wrapper>
    Ответ написан
    1 комментарий
  • Как нарисовать картинку в canvas?

    Aetae
    @Aetae
    Тлен
    let img = new Image()
    // создали Image, пока ничего не происходит
    
    img.src = "path/to/img.jpg"
    // установили src - пошла загрузка картинки
    
    ctx.drawImage(img, x, y);
    // нарисовали на канвасе сраное ничто
    
    // идёт загрузка картинки
    // идёт загрузка картинки
    // идёт загрузка картинки
    // идёт загрузка картинки
    // идёт загрузка картинки
    // идёт загрузка картинки
    // идёт загрузка картинки
    
    // картинка загрузилась, вызвано событие img.onload
    Ответ написан
    1 комментарий
  • Как правильно задать относительный путь до файла?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Зависит от того какую систему сборки используете.
    Например для webpack можно использовать ContextReplacementPlugin\NormalModuleReplacementPlugin, чтоб пофиксить пути импорта как вам надо, в т.ч. относительные.
    Однако, если обойтись без относительности, то плагин не нужен: можно просто прописать alias вида
    '@locale': path.resolve(__dirname, `src/${LOCALE}/js/register.js`)
    Ответ написан
    Комментировать
  • Почему условие в setInterval не всегда срабатывает?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Очевидно потому, что значение '00:01' проскакивает между вызовами setInterval.

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

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Оба варианта должны работать - первый при полной загрузке, второй при загрузке DOM(и наличии jquery на странице).
    Есть ещё более прямой и очевидный вариант, запуск "прям тут где скрипт": <script>функция();</script>, но раз не помогли предыдущие, то и этот не поможет.

    Вопрос: что значит "не помогло", конкретно?

    Пока могу только нагадать: возможно у тебя в этой функции открывается новое окно, тогда ответ простой - никак, окна можно открывать только по действию пользователя.
    Ответ написан
    Комментировать
  • Как через код использовать ctrl+wheel?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Никак. Со своим зумом пользователь работает сам и не тебе его менять.
    Если нужно изменить какие-то размеры - меняй эти размеры.

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

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Нормально. Источником состояния должно быть только одно место: в данном случае этим источником выступает url.
    Ответ написан
    Комментировать
  • Как удалить элемент массива при клике на кнопку?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    @click="deleteTodo(todo)"
    
    deleteTodo(todo) {
      this.todos.splice(this.todos.indexOf(todo), 1);
    }

    Или
    v-for="(todo, index) in todos"
    @click="deleteTodo(index)"
    
    deleteTodo(index) {
      this.todos.splice(index, 1);
    }
    Ответ написан
    Комментировать
  • Как посчитать количество объектов с определённым значением ключа?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Не прибегая к циклам - ручкой на листочке, лол.
    Любой вариант, какой бы вы не выбрали сводится к циклам под капотом.
    arr.filter(obj => !obj.status).length;
    arr.reduce((length, {status}) => status ? length : length + 1, 0);
    ...и т.п.
    Ответ написан
    1 комментарий
  • Можно ли передавать CSS классы через props?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Передавать класс в props можно, многие библиотек так делают, но осторожно и только когда без этого не обойтись.

    Особенно стоит обратить внимание на это при использовании scoped стилей: переданный внутрь класс не будет работать сам по себе, т.к. привязан к scope родительского компонента, придётся использовать псвевдоселектор :deep(), а это уже чревато коллизиями.

    Лучше же разбить всё на максимально небольшие компоненты с простыми api конфигурации и повсеместно использовать слоты, чтобы такие вещи не требовались слишком часто.
    Ответ написан
    2 комментария
  • Почему файл недоступен после сборки next js?

    Aetae
    @Aetae
    Тлен
    Я с next не работаю, но вы же сами описали проблему, что у вас _next там где должен быть build. Возможно одна из переменных окружения у вас кривая, или .env файл. Если сходу не находится откуда взялся _next - можно минимально оформатировать в ide уже собранные файлы и поискать в них это _next, окружающий код скорее всего о чём-нить скажет вам.
    В общем обычный процесс дебага...

    А вообще вот что гугл выдаёт первой ссылкой по "next js _next".
    Т.е. путь /_next/static/chunks/ - это путь по умолчанию, если нужен иной - следует задать assetPrefix.
    Почему раньше работало? А хз, может оно и так лежало в папке _next, а вы её переименовали?
    Ответ написан
    Комментировать
  • Как использовать typescript в шаблоне Vue 2?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Vue 2 не даёт использовать произвольный код в шаблонах, там код компилируется вместе с самим шаблоном отдельно от всей твоей системы сборки.

    В теории можно подсунуть свои обработчики в компилятор, но на практике когда до этого дошло и я начал рыть в эту сторону - появился vue 3 и я забил. Можешь порыть и забить и ты.:)

    В любом случае тайпкасты в шаблоне - моветон, пофикси изначальные типы и всё будет нормально. Ну или по-хардокору можно отрубить тайпчек в шаблонах в IDE.:)

    Использование методов\функций в шаблоне - тоже весьма плохо, и так делать крайне на рекомендуется: подготовь все данные в compunted и отдавай в шаблон только чистые и удобные для него(шаблона) данные.
    Если это сделать кажется сложно, то с большой вероятностью вы неправильно используете vue: в vue надо разбивать всё на минимальные компоненты(пусть даже в пяток строк), вот и тут разбейте на подкомпоненты и всё снова станет просто и приятно.

    А на богомерзкий jsx не переходи, а то те, кто после тебя проект продолжит, могут тебе и глаз подбить.:)
    Ответ написан
    Комментировать
  • Почему не могу импортировать docx файл в реакте typescript?

    Aetae
    @Aetae
    Тлен
    Во первых где ты хочешь его импортировать? В коде или в рантайме?
    Если в коде, то чтобы что-то импортировать твой сборщик должен уметь это импортировать, и, т.к. docx явно не входит в стандартный набор форматов для front-end тебе потребуется установить и настроить специальный loader\плагин\asset в зависимости от системы сборки.
    Возможно тебе на самом деле не надо импортировать этот файл(ты с ним нечего не делаешь), а надо просто дать пользователю его скачать? Тогда просто положи его в публичную папку и используй обычную ссылку.

    Если в рантайме, а на этапе сборки его ещё нет - импорт так не работает. Используй обычный fetch.

    Если ответ не помог - потребуется больше информации: какую систему сборки используешь, кусок кода где ты пытаешься работать с файлом и т.д.
    Ответ написан
    Комментировать
  • Как в less можно найти не закрытый }?

    Aetae
    @Aetae
    Тлен
    Да собственно любой бьютификатор\ide: форматируете код - там где иерархия поехала там и скобка забыта.:) В ide можно после этого тыкнуть в "свернуть всё" для удобства поиска.
    Ответ написан
    Комментировать
  • Нужно ли устанавливать на ПК node.js для разработки приложений на React и React Native?

    Aetae
    @Aetae
    Тлен
    React Native - нет, он без сборки не заведётся.
    React - да, но придётся выкинуть 90% уроков из сети на помойку, так как писать придётся не на jsx, а на прямом использовании api, т.е. React.cteateElement(Component, ...) вместо <Component ...>. Про 60% библиотек и вспомогательных утилит тоже можно будет забыть, с ещё 20% придётся хорошенько повозиться чтоб запустить.

    В целом же заниматься фронтом без ноды и обвеса в наше время - для сильных духом.:)
    Ответ написан
    Комментировать
  • Стоит ли делать такое слияние?

    Aetae
    @Aetae
    Тлен
    Ну теперь у тебя websocket зависит от http, что противоречит условиям задачи.:)
    В том смысле, что слив websocket в реальный dev, ты сольёшь и http(до того коммита, на котором ты и произвёл сии манипуляции).

    Если ветки таки должны быть независимыми, то придётся дублировать код. В идеале черри-пикать только нужное из http в свой websocket, тогда в дальнейшем мороки с слиянием будет меньше. Если коммиты в http содержат слишком много лишнего, то тут придётся уже прямо копировать.
    Ответ написан
    1 комментарий
  • Почему не работает скрипт при использовании type="module"?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    М.б. так.
    <script type="module">
        import Parallax from "./js/parallax.js"
        // или так  import { Parallax } from "./js/parallax.js"
    
        let scene = document.getElementById('scene');
        let parallaxInstance = new Parallax(scene);     
    </script>

    Область видимости модулей изолирована, надо импортировать то, что они экспортируют.

    Также в самом модуле можно явно задать глобальные переменные (window.Parallax = Parallax;) но лучше так не делать.

    Ну и про сборщик сказано не верно, как настроите - так и будет работать.
    Ответ написан
  • Как сделать скроллинг фона, при этом делая позиционирование по центру?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Скорее всего нужно что-то другое, никто не любит сколл.
    А решение очевидно: указать явно min-width и min-height в пикселях.
    Ответ написан
  • Почему возникает такая ошибка NEXT JS 13?

    Aetae
    @Aetae
    Тлен
    Как ты используешь этот RegisterService?
    Чтоб он работал, как и написано в ошибке, он должен быть компонентом.
    Т.е. <RegisterService ...> или React.createElement(RegisterService, ...) .

    Второй вариант: он может быть не компонентом, а хуком. Тогда он должен вызываться внутри другого компонента, а также иметь префикс use - useRegisterService(отсутствие префикса не приведёт к ошибке, но это стандарт).

    Если ты просто вызываешь его где-то вне компонента как функцию - ничего работать не будет.
    Ответ написан