我的第一个项目(七):(解决问题)Vue中canvas无法绘制图片
  6dLT7EsVU3rP 2023年11月01日 52 0
Vue

好家伙,

 

现在,我想要把我的飞机大战塞到我的主页里去,想办法把文件导入

 

然后,直接死在第一步,图片渲染都成问题

 

先用vue写一个测试文件

来测试canvas的绘制

<template> <div> <div ref="stage"></div> <button @click="drawsth()">添加</button> <img src="../assets/logo.png" alt=""> </div> </template> <script> // import { PlaneBattle } from "../../../../PB for Vue/startgame" // console.log(document.getElementById('stage')) // plane.create(document.getElementById('stage')); export default { methods: { drawsth() { // PlaneBattle.createNewGame(this.$refs.stage) // console.log(this.$refs.stage) // plane.create(this.$refs.stage) console.log("我被执行啦") let canvas = document.createElement('canvas'); this.$refs.stage.appendChild(canvas); canvas.width = 480; canvas.height = 650; canvas.ref = canvas; canvas.style = "border: 1px solid red;" // this.$ref.stage.style =   console.log(this.$refs.stage) console.log("...") console.log(this.$refs.stage.canvas) const context = canvas.getContext("2d"); let img = new Image(); img.src = "../assets/logo.png"; context.drawImage(img, 0, 0 ,480 ,650) } } } </script> <style> #stage { width: 480px; height: 650px; margin: 0 auto; } </style>

 

 

 

随后,在大佬的帮助下,我找到了问题所在

 

 

问题一:

应使用require的方式设置图片的src

img.src = "../assets/logo.png";

改为:

img.src = require("../assets/logo.png")

 

 

问题二:

必须在图片加载完毕后再进行绘制

context.drawImage(img, 0, 0 ,480 ,650)

改为(在外面套一层onload)

img.onload = function () { console.log("img加载完毕") context.drawImage(img, 0, 0 ,480 ,650) }

 

修改后的代码:

<template> <div> <div ref="stage"></div> <button @click="drawsth()">添加</button> <img src="../assets/logo.png" alt=""> </div> </template> <script> // import { PlaneBattle } from "../../../../PB for Vue/startgame" // console.log(document.getElementById('stage')) // plane.create(document.getElementById('stage')); export default { methods: { drawsth() { // PlaneBattle.createNewGame(this.$refs.stage) // console.log(this.$refs.stage) // plane.create(this.$refs.stage) console.log("我被执行啦") let canvas = document.createElement('canvas'); this.$refs.stage.appendChild(canvas); canvas.width = 480; canvas.height = 650; canvas.ref = canvas; canvas.style = "border: 1px solid red;" // this.$ref.stage.style =   console.log(this.$refs.stage) console.log("...") console.log(this.$refs.stage.canvas) const context = canvas.getContext("2d"); let img = new Image(); // img.src = "../assets/logo.png"; img.src = require("../assets/logo.png") img.onload = function () { console.log("img加载完毕") context.drawImage(img, 0, 0 ,480 ,650) } } } } </script> <style> #stage { width: 480px; height: 650px; margin: 0 auto; } </style>

 

搞定:

 

 

搞定了

 

 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: vue:路由守卫 下一篇: vue3创建工程
  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  gYl4rku9YpWY   2024年05月17日   59   0   0 Vue
  JZjRRktyDDvK   2024年05月02日   85   0   0 Vue
  VlNAKfyhjjp9   2024年04月30日   81   0   0 Vue
  JNTrZmaOQEcq   2024年04月30日   58   0   0 Vue
  onf2Mh1AWJAW   2024年05月17日   63   0   0 Vue
  3A8RnFxQCDqM   2024年05月17日   59   0   0 Vue
6dLT7EsVU3rP