a標簽中的down屬性時HTML5新增的屬性,此屬性指示瀏覽器下載URL而不是導航到URL,因此將提示用戶將其保存為本地文件。目前該屬性的兼容性如下:
具體代碼實現:
1 /* 2 主要原理:利用a標簽的download屬性以及canvas的toDataURL() 3 selector: 圖片的選擇器 4 name:被下載圖片的命名 5 */ 6 downloadPicture (selector, name) { 7 let image = new Image() 8 // 解決跨域 Canvas 污染問題 9 image.setAttribute('crossOrigin', 'anonymous') 10 image.onload = function () { 11 // 創建一個canvas標簽 12 let canvas = document.createElement('canvas') 13 // 設置canvas的寬高 14 canvas.width = image.width 15 canvas.height = image.height 16 // 獲取canvas的2d界面 17 let context = canvas.getContext('2d') 18 // 把圖片畫在canvas上 19 context.drawImage(image, 0, 0, 200, 200) 20 // 把canvas的內容轉化為base64格式 21 let url = canvas.toDataURL('image/png') 22 23 // 生成一個a元素 24 let a = document.createElement('a') 25 // 創建一個單擊事件 26 let event = new MouseEvent('click') 27 28 // 將a的download屬性設置為我們想要下載的圖片名稱,若name不存在則使用‘下載圖片名稱’作為默認名稱 29 a.download = name || '下載圖片名稱' 30 // 將生成的URL設置為a.href屬性 31 a.href = url 32 33 // 觸發a的單擊事件 34 a.dispatchEvent(event) 35 } 36 // 獲取img上的src值,賦值之后,完成之后會調用onload事件 37 image.src = document.querySelector(selector).src 38 }