我的第一個項目(七):(解決問題)Vue中canvas無法繪製圖片

来源:https://www.cnblogs.com/FatTiger4399/archive/2023/03/31/17275903.html
-Advertisement-
Play Games

好家伙, 現在,我想要把我的飛機大戰塞到我的主頁里去,想辦法把文件導入 然後,直接死在第一步,圖片渲染都成問題 先用vue寫一個測試文件 來測試canvas的繪製 <template> <div> <div ref="stage"></div> <button @click="drawsth()"> ...


好家伙,

 

現在,我想要把我的飛機大戰塞到我的主頁里去,想辦法把文件導入

 

然後,直接死在第一步,圖片渲染都成問題

 

先用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>

 

搞定:

 

 

搞定了

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 摘要:華為雲站點數字化平臺CloudMap攜手華為雲圖引擎GES打造雲服務全棧拓撲,網路流量路徑和雲服務動態依賴等空間關係數據,支撐現網運行態風險識別和分鐘級定位定界,構建業界領先的數字化能力。 本文分享自華為雲社區《構建站點數字孿生,支撐確定性運維:華為雲九洲雲圖CloudMap》,作者:HWCl ...
  • 當前,數據對金融機構業務和發展的重要性日益凸顯,釋放數據生產力已經成為金融機構進行全面數字化轉型的核心,這就要求金融機構以數據資產為綱不斷提升自身數據資產管理能力。 本期DTALK我們邀請到雅拓信息解決方案專家 尹曉中,為大家帶來《數據資產管理——金融機構數據價值釋放的必經之路》。 分享大綱劇透: ...
  • 本次需求場景主要為實現將flinksql中collect()函數輸出的Mutiset(VARCHAR<100>)多行結果轉換為字元串。 一、FlinkSQL自定義函數分類 Flink SQL 的自定義函數是用戶可以自行編寫的一種函數,用於擴展 Flink SQL 的功能。自定義函數可以在 SQL 查 ...
  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 作者: JennyYu 文章來源:GreatSQL社區投稿 背景 接到客戶訴求說一條SQL長時間運行不出結果,讓給看看怎麼回事,SQL不複雜,優化措施也 ...
  • 1. 針對相同的表進行的連接 1.1. 相同的表的自連接和不同表間的普通連接並沒有什麼區別,自連接里的“自”這個詞也沒有太大的意義 1.2. 與多表之間進行的普通連接相比,自連接的性能開銷更大 1.2.1. 特別是與非等值連接結合使用的時候 1.2.2. 用於自連接的列推薦使用主鍵或者在相關列上建立 ...
  • 說明 有讀者反饋: 學習uniapp ios 插件開發不知道從哪些文章看起,沒有一個清晰的學習路線 本文就做一個解答。 首先本系列的文章是作者精心排過序的,如果想要完整的學習uniapp ios原生插件開發技術的話,建議是按文章順序瀏覽。 當然您如果有相關的開發經驗,且只對某一技術實現感興趣的話,也 ...
  • Discovery第18期直播已於3月30日圓滿結束,本期直播邀請天眼查做客直播間,從天眼查與華為Push用戶增長服務合作歷程切入,聚焦用戶增長,分享提升應用活躍度和渠道ROI的經驗與見解。一起來回顧本期精彩內容吧! 【精彩對話】 Q1: 天眼查為什麼選擇華為Push用戶增長服務實現拉新、促活和轉化 ...
  • background中的cover與contain的區別 contain:將圖片縮放至寬度或者高度能夠完全適應容器,並且保持圖片寬高比不變。如果容器寬高比與圖片寬高比不同,則容器會留白,不會出現圖片的裁剪。例如,對於一個寬度為200px、高度為200px的容器,背景圖片使用background-si ...
一周排行
    -Advertisement-
    Play Games
  • 通過WPF的按鈕、文本輸入框實現了一個簡單的SpinBox數字輸入用戶組件並可以通過數據綁定數值和步長。本文中介紹了通過Xaml代碼實現自定義組件的佈局,依賴屬性的定義和使用等知識點。 ...
  • 以前,我看到一個朋友在對一個系統做初始化的時候,通過一組魔幻般的按鍵,調出來一個隱藏的系統設置界面,這個界面在常規的菜單或者工具欄是看不到的,因為它是一個後臺設置的關鍵界面,不公開,同時避免常規用戶的誤操作,它是作為一個超級管理員的入口功能,這個是很不錯的思路。其實Winform做這樣的處理也是很容... ...
  • 一:背景 1. 講故事 前些天有位朋友找到我,說他的程式每次關閉時就會自動崩潰,一直找不到原因讓我幫忙看一下怎麼回事,這位朋友應該是第二次找我了,分析了下 dump 還是挺經典的,拿出來給大家分享一下吧。 二:WinDbg 分析 1. 為什麼會崩潰 找崩潰原因比較簡單,用 !analyze -v 命 ...
  • 在一些報表模塊中,需要我們根據用戶操作的名稱,來動態根據人員姓名,更新報表的簽名圖片,也就是電子手寫簽名效果,本篇隨筆介紹一下使用FastReport報表動態更新人員簽名圖片。 ...
  • 最新內容優先發佈於個人博客:小虎技術分享站,隨後逐步搬運到博客園。 創作不易,如果覺得有用請在Github上為博主點亮一顆小星星吧! 博主開始學習編程於11年前,年少時還只會使用cin 和cout ,給單片機點點燈。那時候,類似async/await 和future/promise 模型的認知還不是 ...
  • 之前在阿裡雲ECS 99元/年的活動實例上搭建了一個測試用的MINIO服務,以前都是直接當基礎設施來使用的,這次準備自己學一下S3相容API相關的對象存儲開發,因此有了這個小工具。目前僅包含上傳功能,後續計劃開發一個類似圖床的對象存儲應用。 ...
  • 目錄簡介快速入門安裝 NuGet 包實體類User資料庫類DbFactory增刪改查InsertSelectUpdateDelete總結 簡介 NPoco 是 PetaPoco 的一個分支,具有一些額外的功能,截至現在 github 星數 839。NPoco 中文資料沒多少,我是被博客園群友推薦的, ...
  • 前言 前面使用 Admin.Core 的代碼生成器生成了通用代碼生成器的基礎模塊 分組,模板,項目,項目模型,項目欄位的基礎功能,本篇繼續完善,實現最核心的模板生成功能,並提供生成預覽及代碼文件壓縮下載 準備 首先清楚幾個模塊的關係,如何使用,簡單畫一個流程圖 前面完成了基礎的模板組,模板管理,項目 ...
  • 假設需要實現一個圖標和文本結合的按鈕 ,普通做法是 直接重寫該按鈕的模板; 如果想作為通用的呢? 兩種做法: 附加屬性 自定義控制項 推薦使用附加屬性的形式 第一種:附加屬性 創建Button的附加屬性 ButtonExtensions 1 public static class ButtonExte ...
  • 在C#中,委托是一種引用類型的數據類型,允許我們封裝方法的引用。通過使用委托,我們可以將方法作為參數傳遞給其他方法,或者將多個方法組合在一起,從而實現更靈活的編程模式。委托類似於函數指針,但提供了類型安全和垃圾回收等現代語言特性。 基本概念 定義委托 定義委托需要指定它所代表的方法的原型,包括返回類 ...