解決:在阻止快取的inspect模式下無法drawImage()的問題
- 環境
瀏覽器:版本 57.0.2987.133 (64-bit)
OS:macOS:10.12.3
遇到的問題
昨天做了美圖的前端筆試題,其中一題是給定一張圖片URL,將其畫在canvas上,canvas我是會用的,
但是drawImage這個函式的介面我記不大清了,所以回來我又試了下。後來發現我竟然畫不出來了。
先給出我的示例程式碼
<img id="myImg" src="img/001.jpg">
<canvas id="myCanvas" width="200px" height="200px"></canvas>
<script type="text/javascript">
//window.onload=function() {
var myImage = document.getElementById("myCanvas");
var cxt = myImage.getContext("2d");
var img = document.getElementById("myImg");
console.log(img);
cxt.drawImage(img, 50, 50);
cxt.drawImage(img, 125, 125);
cxt.drawImage(img, 210, 210);
//}
</script>
結果(在inspect模式下)是這樣的:
顯然,這裡只有img,沒有canvas,經過諸多嘗試,仍然未解決,後來我發現,當不用開發者模式訪問圖片,則需要兩次重新整理才能得到canvas:第一次重新整理得到上圖,第二次重新整理得到下圖:
顯然,訪問兩次才能得到canvas,這樣的訪問方式是不正常的,那麼問題出現在哪裡呢?我在stackoverflow上看到了解答:
這是因為img是非同步載入的啊!!!當圖片已經還沒載入完成,canvas相關的JS程式碼已經在執行了。沒有圖片的drawImage自然是不能成功的。
所以正確的辦法是onload:
<img id="myImg" src="img/001.jpg">
<canvas id="myCanvas" width="200px" height="200px"></canvas>
<script type="text/javascript">
window.onload=function() {
var myImage = document.getElementById("myCanvas");
var cxt = myImage.getContext("2d");
var img = document.getElementById("myImg");
console.log(img);
cxt.drawImage(img, 50, 50);
cxt.drawImage(img, 125, 125);
cxt.drawImage(img, 210, 210);
}
</script>
相關文章
- 解決無法使用VI的問題
- Oracle 解決like中無法匹配下劃線的問題Oracle
- 解決Centos無法yum源的問題CentOS
- 解決codeblocks無法除錯的問題BloC除錯
- 快取問題(四) 快取穿透、快取雪崩、快取併發 解決案例快取穿透
- 程式碼解決快取穿透和快取雪崩問題快取穿透
- 快取穿透問題與解決方法快取穿透
- 在IDEA下使用JUnit出現的問題與解決辦法Idea
- 16.徹底解決Jmap在mac版本無法使用的問題Mac
- 解決寶塔皮膚無法訪問的問題?
- 解決 raw.githubusercontent.com 無法訪問的問題Github
- 在Laravel中使用Redis鎖解決快取擊穿問題LaravelRedis快取
- 關於Quartus的start按鈕灰色無法下載的問題的解決
- JQuery中ajax的使用與快取問題的解決方法jQuery快取
- 解決go get 下載github專案慢或無法下載的問題!GoGithub
- 快取世界中的三大問題及解決方案快取
- 手動下載 Chrome,解決 puppeteer 無法使用問題Chrome
- AD18無法模擬問題的解決
- 快取常見問題及解決方案快取
- 快取三大問題及解決方案快取
- 快取的問題快取
- Java在Linux環境下執行MySQL命令無法獲取結果的問題JavaLinuxMySql
- 解決ASM無法啟動問題ASM
- 在聯網狀態下,有很多應用無法聯網問題,如360安全衛士, Smartscreen篩選器無法訪問, 部分網頁無法訪問等問題的解決方法網頁
- 分散式環境下利用快取解決重複性問題分散式快取
- CentOS下OpenCV無法讀取影片檔案的解決方法CentOSOpenCV
- 快取過程存在的三大問題及解決方案快取
- 使用雙快取解決 Canvas clearRect 引起的閃屏問題快取Canvas
- victoriaMetrics無法獲取抓取target的問題
- 解決Vue在scoped模式下修改el-collaspe樣式失效的問題Vue模式
- 解決 Python 指令碼無法生成結果的問題Python指令碼
- goland中npm無法使用的問題及解決方法GoLandNPM
- 解決idea中無法識別主類的問題Idea
- IDEA中Lombok無法生效的問題及解決方法IdeaLombok
- 解決vscode安裝後無法啟動的問題VSCode
- 記錄一次無法很好解決的問題
- 手摸手教你解決重定向快取問題快取
- redis快取相關問題及解決方案Redis快取
- Windows無法配置此無線連線這個問題的解決辦法Windows