Как я могу асинхронно визуализировать изображения, используя HTML холст (и vue. js)? - PullRequest
0 голосов
/ 07 мая 2020

У меня есть программа, которая отслеживает число. Если вы превысите свое целевое число, вы посетите страницу, на которой показано, сколько еще вы накопили. На этой странице находится автомат для жевательной резинки, и в зависимости от количества излишков, которое вы накопили, определенное количество жевательных резинок появляется сбоку от машины. Все работает нормально, но примерно на 1 из каждых трех страниц загружается жевательная резинка, а затем появляется машина, сначала покрывая все изображения жевательной резинки.

Это делается через vue. js Вот код, который у меня есть:

created () {
    this.$http.get('/gumballs/' + this.$auth.user().id).then(res => {)
      this.createCanvas()
    })
  }

*******

    createCanvas () {
      // general canvas properties...
      // gumball machine properties
      this.createGumbllMachine(canvas.width, ctx, (err, succ) => {
        if (err) {
          console.log(err)
        } else if (succ) {
          this.createGumballs(canvas.width, ctx)
        }
      })
    }

**********

    createGumballMachine (width, ctx, cb) {
      const imgObj = document.createElement('img')
      imgObj.src = machineImg
      imgObj.onload = () => {
        ctx.drawImage(imgObj, (width / 2) - 350, 100)
      }
      return cb(null, 'ok')
    }

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

Я также пробовал использовать async и await, но я не мог получить изображение для рендеринга в все так. Что-то происходило, когда vue никогда не мог пройти часть своего жизненного цикла created.

Я пробовал читать об этом по другим вопросам SO, но не могу понять. Я знаю, что у него есть какое-то отношение к работе ctx.dtawImage(), но я застрял.

Любая помощь приветствуется. Если вам нужно увидеть код для createGumballs(), дайте мне знать, но я не понимаю, как это вызывает проблему.

1 Ответ

1 голос
/ 08 мая 2020

Ссылка на соответствующий ответ, который также объясняет непоследовательное поведение. По сути, вы можете использовать naturalWidth, чтобы убедиться, что автомат для жевательной резинки загрузился.

{ ссылка }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...