• Белые полосы на Iphone X?

    Читайте блог разработчиков браузера, там как раз описано, как оптимизировать сайты для iPhone X.
    Ответ написан
    Комментировать
  • Как добавить событию обработчик вызываемый первым?

    Зарегистрированные jQuery обработчики вызываются на стадии event bubbling, так что если перехватить событие во время capture, то можно успеть выполнить свой код. Вариант номер два – повесить обработчик на mousedown или mouseup, которые гарантированно идут до click.
    Ответ написан
    1 комментарий
  • Можно ли использовать микрофон как источник двух аудио-потоков?

    Можно, только могут быть проблемы, если поток идёт с другого устройства через P2P-соединение. Например, видео нельзя будет обработать в canvas webgl контексте – про аудио точно не знаю, но имейте в виду, если что :) С устройства медиа можно захватить через getUserMedia сколько угодно раз, сам поток тоже можно клонировать не единожды.
    Ответ написан
    Комментировать
  • Как вызвать метод на каждом элементе во время рендера списка?

    Мне кажется, имеет смысл вынести canvas в отдельный компонент и запускать отрисовку в mounted(). Так вся логика будет в одном месте, и париться с массивом $refs не придётся.
    Ответ написан
    Комментировать
  • Как работают пути в vue-cli?

    Проекты с Vue CLI 3 включают в себя заранее настроенный конфиг Webpack, в котором прописаны alias-ы для путей "vue" и "@". Помимо этого, сборщик по умолчанию ищет модуль не только среди исходного кода самого проекта, но и в папке node_modules. При этом для "path/to/dependency" нужным файлом может оказаться как "path/to/dependency.js", так и "path/to/dependency/index.js" или же что-то другое, указанное в package.json. Подробности ищите в документации к Webpack.

    По поводу app.js в двух местах – такого никогда не видел. Да и структура у вас странная для последней версии, обычно получается что-то вроде следующего:

    node_modules
    public
      index.html # без app.js
    src
      components/(компоненты)
      assets/(прочие файлы)
      App.vue
      main.js
    package.json
    (конфиги)
    Ответ написан
  • Как сделать фиксированный скролл (Javascript)?

    fullPage.js, если обязательно нужен JS – иначе для этого есть CSS Scroll Snapping (там подробно и с примерами, переводчик в помощь, если что).
    Ответ написан
  • Как сделать что бы функция не выполнялась быстрее чем 2s?

    Попробуйте Navigation Timing API:

    function startAfter (delay, callback) {
      const elapsed = Date.now() - performance.timing.navigationStart
    
      if (elapsed >= delay) {
        callback()
      } else {
        setTimeout(callback, delay - elapsed)
      }
    }
    
    document.addEventListener("DOMContentLoaded", () => {
      startAfter(2000, () => console.log("DOM fully loaded and parsed"))
    })
    Ответ написан
    Комментировать
  • Насколько уникален canvas fingerprint?

    Потому что ни один известный метод получения device fingerprint не гарантирует уникальность полученного ключа, в т.ч. и с использованием canvas. Браузеры просто не берут на себя такую обязанность, а причины могут быть разные в зависимости от реализации каждой конкретной версии приложения.

    Более того, разработчики браузеров специально обобщают доступные JS сведения о машине, чтобы обеспечить приватность и безопасность пользователей. Так что 100% полагаться на такие вещи не стоит в любом случае.
    Ответ написан
    Комментировать
  • Почему не сразу срабатывает изменение hover?

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

    Создайте CSS класс и добавляйте его по клику.

    .flat:hover {
      box-shadow: none;
    }


    // В обработчике нажатия
    $(this).addClass('flat')
    Ответ написан
    Комментировать
  • Сгорают ли промисы после res.end?

    Зависит от реализации вашего менеджера микросервисов. Взять, например, Google Cloud Functions – сервис ожидает успешное выполнение Promise или ошибку, а после может делать что угодно. Может оставить конкретно ваш экземпляр Node работать (так и будет, скорее всего), а может и завершить процесс сразу. Так что корректнее в этом случае сначала ответить клиенту, а потом дождаться завершения асинхронных операций:

    async (req, res) => {
      const data = await action1(data)
      res.end(data)
      await action2(data)
    }
    Ответ написан
  • Не работает strings.includes и пр?

    Попробуйте установить core-js@2 вместо 3. Иногда авторы забывают указать версию, и в итоге загружается несовместимый пакет.

    npm un -S core-js
    npm i -S  core-js@2
    Ответ написан
    Комментировать
  • Что за Windows в js?

    Насколько мне известно, покупки в Windows Store можно совершать только через опубликованные там приложения. Так что если вашего приложения нет в Windows Store, ищите другой способ.

    Объект Windows в данном случае – это мост между нативными API платформы и вашим кодом в браузерной среде. В виде библиотеки вы его не найдёте по понятным причинам.
    Ответ написан
    Комментировать
  • Создание файла на клиенте?

    Напрямую работать с файловой системой нельзя, но можно создавать и редактировать отдельные файлы, которые пользователь сам передает вашему приложению. Процесс примерно такой:

    1. Создайте <input type="file"> и слушайте событие change;

    2. Как только пользователь добавит файл, получите его представление в виде Blob через FileReader;

    3. Измените Blob (есть готовые библиотеки вроде zip.js) - добавьте/удалите данные архива здесь;

    4. Получите Object URL нового Blob с помощью URL.createObjectURL() и вставьте в атрибут href ссылки для загрузки файла;

    5. Вызовите link.click() или просто покажите ссылку для скачивания пользователю, если не работает.
    Ответ написан
    Комментировать
  • Как инициализировать карту один раз на Vue, но использовать на разных роутах Vue?

    1) убедитесь, что вы создаёте экземпляр DG.Map со ссылкой на элемент DOM, а не на его ID
    2) не забудьте уничтожить созданный экземпляр в beforeDestroy

    export default {
      data: () => ({
        map: null
      }),
      mounted () {
        this.map = new DG.map(this.$el)
      },
      beforeDestroy () {
        if (this.map) this.map.remove()
      }
    }
    Ответ написан
  • Почему падает приложение Vue?

    Не углубляясь в реализацию, обычно из asyncData возвращают Promise<Object|void>, а у вас Promise<Array>. Да, массив тоже объект, но пути джаваскриптовы неисповедимы. Этот массив потом передаётся в функцию роутера next в entry-client.js:16, которая тоже не должна уметь его обрабатывать, и т.д. и т.п.

    Так или иначе, если asyncData используется только для наполнения store, смысла передавать что-либо в resolve промиса нет:

    async asyncData ({ store }) {
      await Promise.all([
        store.dispatch('func1'),
        store.dispatch('func2'),
        store.dispatch('func3'),
        store.dispatch('func4')
      ])
    }
    Ответ написан
    1 комментарий
  • Как переместить background в другой блок?

    Источник изображения здесь роли не играет, потому что вы работаете с data url. Мне кажется, проблема во втором фрагменте, потому что там создаётся новый элемент без фона. Используя ваш подход, должно было получиться что-то такое:

    const url = $('#imagePreview').css('background-image')
    
    const newMessage = $(`
      <div class="user_two_message col-xs-12 col-sm-12">
        <div class="sender-text-image">
          <div id="imagePreview" style="background-image: ${url}"></div>
        </div>
      </div>
    `)
    
    $('.message-screen').append(newMessage)


    Обратите внимание, что как мой, так и ваш код приведут к дублированию идентификатора imagePreview и непредсказуемому поведению при втором и дальнейших запусках. Пожалуйста, примите меры :)
    Ответ написан
    Комментировать
  • Как правильно получить асинхронные данные?

    Метод dataService.fetchAds должен возвращать Promise (где-то return забыли), а в Users.init нужно получать его результат. Как-то так:

    class DataService {
      fetchAds = () => {
        return fb.database().ref('users') /* остальной код */
      }
    }
    
    class Users {
      init() {
        dataService.fetchAds().then(data => {
          console.log('data', data);
        });
      }
    }
    Ответ написан
  • Как применять Vue, React, ... без изменения html-кода?

    Может быть, речь идёт про renderless компоненты Vue? Они могут включать в себя какую-то логику, но элементы DOM создавать не будут:

    export default {
      // Здесь data, computed, хуки и т.д.
      render () {
        // Отрисовывает дочерние элементы
        return this.$scopedSlots.default({
          // Данные, передаваемые через механизм scoped slots
          property: 'value'
        })
      }
    }


    Для создания реактивных объектов есть Vue.observable().
    Ответ написан
    Комментировать
  • Несколько шаблонов для одного компонента Vue.js, реализация?

    Можно попробовать вот так (см код ниже). По сути это решение Philipp Kühn, но для вашего случая, когда в файлах хранятся шаблоны, а не компоненты. Чтобы заработало, нужно настроить загрузчик для html файлов (raw-loader отлично подойдёт) и включить компилятор в сборку (вариант "полный").

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

    export default {
      props: {
        name: {
          type: String,
          default: 'default'
        }
      },
      computed: {
        component () {
          // Не сокращать до одной строки, иначе свойство не будет реактивным.
          const name = this.name
          return () => this.load(name)
        }
      },
      methods: {
        async load (name) {
          // В import() должен быть статический элемент (как './templates/'), иначе не заработает.
          const { default: template } = await import(`./templates/${name}.html`)
          return { template }
        }
      },
      render (h) {
        return h(this.component)
      }
    }
    Ответ написан