解決:在阻止快取的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>
相關文章
- 解決phpMyAdmin在nginx+php-fpm模式下無法使用的問題PHPNginx模式
- jQuery.getJSON的快取問題的解決辦法jQueryJSON快取
- Thinkphp5-Cache::clear()清空快取在的問題解決PHP快取
- 解決vim在insert模式下面用backspace鍵無法刪除的問題模式
- 解決無法使用VI的問題
- nat模式下解決虛擬機器無法ping通主機的問題模式虛擬機
- 【Tip】解決like中無法匹配下劃線的問題
- Oracle 解決like中無法匹配下劃線的問題Oracle
- 解決Centos無法yum源的問題CentOS
- 快取問題(四) 快取穿透、快取雪崩、快取併發 解決案例快取穿透
- 關於ActiveMQ在MyEclipse中出現無法讀取schema文件的問題解決方法MQEclipse
- 程式碼解決快取穿透和快取雪崩問題快取穿透
- 解決RAW在SQLPLUS上無法顯示的問題SQL
- 解決寶塔皮膚無法訪問的問題?
- jquery的get()函式快取問題解決方案jQuery函式快取
- 快取穿透問題與解決方法快取穿透
- 解決ubuntu下sublime無法輸入中文問題Ubuntu
- 解決XML下無效字元的問題XML字元
- 解決codeblocks無法除錯的問題BloC除錯
- 在Laravel中使用Redis鎖解決快取擊穿問題LaravelRedis快取
- 16.徹底解決Jmap在mac版本無法使用的問題Mac
- JQuery中ajax的使用與快取問題的解決方法jQuery快取
- 解決mac系統下無法手動設定ip的問題Mac
- 解決下載的CHM檔案無法顯示網頁問題網頁
- 解決go get 下載github專案慢或無法下載的問題!GoGithub
- 快取世界中的三大問題及解決方案快取
- 手動下載 Chrome,解決 puppeteer 無法使用問題Chrome
- 解決 Homestead 國外映象無法下載問題
- Ubuntu下解決Eclipse無法輸入中文問題UbuntuEclipse
- gmail無法訪問問題解決--FGWAI
- 快取常見問題及解決方案快取
- 快取三大問題及解決方案快取
- 快取的問題快取
- AD18無法模擬問題的解決
- 解決VisualStudio無法除錯的問題除錯
- 解決OBJC_CLASS_$_MBProgressHUD無法引用的問題OBJ
- 解決ASM磁碟組無法掛載的問題ASM
- 解決ORACLE無法啟動安裝的問題Oracle