JS實現(xiàn)瀏覽器點擊下載圖片功能案例分析【親測有效】
點擊下載圖片分兩種:
1、一種是同源地址圖片(也就是本地本項目中的圖片);
2、另一種是不同源的圖片;(不同域名下,比如阿里云 七牛云上的圖片)
下面我們就具體說一下這兩種圖片下載的方式:
第一種(同源)下載:
利用a標簽下載, a標簽有一個download的屬性,添加了該屬性,a標簽將直接下載文件,并根據(jù)download屬性的值設(shè)置下載文件的文件名,不為download屬性設(shè)置值則文件將以默認文件名下載:
如:
<!-- 文件名為默認名稱 --> <a href="./baidu_jgylogo3.gif" rel="external nofollow" rel="external nofollow" rel="external nofollow" download /> <!-- 文件名為baidu.gif --> <a href="./baidu_jgylogo3.gif" rel="external nofollow" rel="external nofollow" rel="external nofollow" download="baidu" /> <!-- 文件名為baidu.png --> <a href="./baidu_jgylogo3.gif" rel="external nofollow" rel="external nofollow" rel="external nofollow" download="baidu.png" />
注意,它僅支持同源鏈接下載,非同源鏈接還是會直接打開圖片:
如非同源 <a href="http://www.baidu.com/img/baidu_jgylogo3.gif" download />
第一種(不同源)下載:
直接上代碼
var x=new XMLHttpRequest(); x.open("GET", "http://danml.com/wave2.gif", true); x.responseType = 'blob'; x.onload=function(e){ var url = window.URL.createObjectURL(x.response) var a = document.createElement('a'); a.href = url a.download = '' a.click() } x.send();
在點擊事件里添加以上代碼即可!親測有效
應(yīng)用案例
說明:筆者在實際開發(fā)中針對上述代碼進行了測試,案例記錄如下:
1.html部分,應(yīng)用a鏈接添加時間響應(yīng),實現(xiàn)點擊下載功能:
<a rel="external nofollow" onclick="saveas(this.href,'202304191632188702.png');" target="_blank"> 202304191632188702.png </a>
2.點擊下載的js事件響應(yīng)部分,將上文提到的下載代碼封裝成一個函數(shù):
window.saveas = function(img,filename){ event.returnValue = false; let x=new XMLHttpRequest(); x.open("GET", img, true); x.responseType = 'blob'; x.onload=function(e){ let url = window.URL.createObjectURL(x.response); let a = document.createElement('a'); a.href = url a.download = filename a.click() } x.send(); }
注意:對比上文中的代碼,這里的函數(shù)封裝做了一定的改進,要注意兩點:
①.首先 event.returnValue = false;
用來阻止默認事件;
②.a.download = ''
必須傳入文件名!否則將會生成一個.json 格式的文件!
相關(guān)文章
js函數(shù)與php函數(shù)的區(qū)別實例淺析
這篇文章主要介紹了js函數(shù)與php函數(shù)的區(qū)別,以實例形式較為簡單的分析了js函數(shù)與php函數(shù)語法及應(yīng)用上的不同點,具有一定參考借鑒價值,需要的朋友可以參考下2015-01-01微信小程序?qū)崿F(xiàn)多選刪除列表數(shù)據(jù)功能示例
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)多選刪除列表數(shù)據(jù)功能,涉及微信小程序列表數(shù)據(jù)讀取、顯示、刪除等相關(guān)操作技巧,需要的朋友可以參考下2019-01-01layer實現(xiàn)登錄彈框,登錄成功后關(guān)閉彈框并調(diào)用父窗口的例子
今天小編就為大家分享一篇layer實現(xiàn)登錄彈框,登錄成功后關(guān)閉彈框并調(diào)用父窗口的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09JavaScript類的繼承方法小結(jié)【組合繼承分析】
這篇文章主要介紹了JavaScript類的繼承方法,結(jié)合實例形式總結(jié)分析了JavaScript繼承的概念、原理及組合繼承相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2018-07-07用JavaScript來美化HTML的select標簽的下拉列表效果
這篇文章主要介紹了用JavaScript來美化HTML的select標簽的下拉列表效果的方法,而且在多瀏覽器下的兼容效果也得到提升,需要的朋友可以參考下2015-11-11