JS實(shí)現(xiàn)瀏覽器點(diǎn)擊下載圖片功能案例分析【親測(cè)有效】
點(diǎn)擊下載圖片分兩種:
1、一種是同源地址圖片(也就是本地本項(xiàng)目中的圖片);
2、另一種是不同源的圖片;(不同域名下,比如阿里云 七牛云上的圖片)
下面我們就具體說(shuō)一下這兩種圖片下載的方式:
第一種(同源)下載:
利用a標(biāo)簽下載, a標(biāo)簽有一個(gè)download的屬性,添加了該屬性,a標(biāo)簽將直接下載文件,并根據(jù)download屬性的值設(shè)置下載文件的文件名,不為download屬性設(shè)置值則文件將以默認(rèn)文件名下載:
如:
<!-- 文件名為默認(rèn)名稱 --> <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" />
注意,它僅支持同源鏈接下載,非同源鏈接還是會(huì)直接打開(kāi)圖片:
如非同源 <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();在點(diǎn)擊事件里添加以上代碼即可!親測(cè)有效
應(yīng)用案例
說(shuō)明:筆者在實(shí)際開(kāi)發(fā)中針對(duì)上述代碼進(jìn)行了測(cè)試,案例記錄如下:
1.html部分,應(yīng)用a鏈接添加時(shí)間響應(yīng),實(shí)現(xiàn)點(diǎn)擊下載功能:
<a rel="external nofollow" onclick="saveas(this.href,'202304191632188702.png');" target="_blank"> 202304191632188702.png </a>
2.點(diǎn)擊下載的js事件響應(yīng)部分,將上文提到的下載代碼封裝成一個(gè)函數(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();
}注意:對(duì)比上文中的代碼,這里的函數(shù)封裝做了一定的改進(jìn),要注意兩點(diǎn):
①.首先 event.returnValue = false; 用來(lái)阻止默認(rèn)事件;
②.a.download = '' 必須傳入文件名!否則將會(huì)生成一個(gè).json 格式的文件!
- jquery插件jquery.LightBox.js實(shí)現(xiàn)點(diǎn)擊放大圖片并左右點(diǎn)擊切換效果(附demo源碼下載)
- 使用JS代碼實(shí)現(xiàn)點(diǎn)擊按鈕下載文件
- JS實(shí)現(xiàn)點(diǎn)擊下載的小例子
- JSP 點(diǎn)擊鏈接后下載文件(相當(dāng)于右鍵另存)功能
- Discuz! 5.0.0論壇程序中加入一段js代碼,讓會(huì)員點(diǎn)擊下載附件前自動(dòng)彈出提示窗口
- 使用 JavaScript 創(chuàng)建并下載文件(模擬點(diǎn)擊)
- 下載站常用的點(diǎn)擊下載地址提示設(shè)hao123為首頁(yè)的js代碼
相關(guān)文章
antd?table長(zhǎng)表格出現(xiàn)滾動(dòng)條的操作方法
這篇文章主要介紹了antd?table長(zhǎng)表格如何出現(xiàn)滾動(dòng)條,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
JavaScript中解析JSON數(shù)據(jù)的三種方法
這篇文章主要介紹了JavaScript中解析JSON數(shù)據(jù)的三種方法,本文講解了eval()方法、new Function方法、JSON.parse()方法等三種方法,需要的朋友可以參考下2015-07-07
JavaScript基礎(chǔ)篇(6)之函數(shù)表達(dá)式閉包
這篇文章主要介紹了javascript基礎(chǔ)篇(6)之函數(shù)表達(dá)式閉包的相關(guān)資料,需要的朋友可以參考下2015-12-12
原生js實(shí)現(xiàn)針對(duì)Dom節(jié)點(diǎn)的CRUD操作示例
這篇文章主要介紹了原生js實(shí)現(xiàn)針對(duì)Dom節(jié)點(diǎn)的CRUD操作,結(jié)合實(shí)例形式分析了javascript操作dom節(jié)點(diǎn)的創(chuàng)建、獲取、增刪改查等相關(guān)操作技巧,需要的朋友可以參考下2019-08-08
JavaScript函數(shù)封裝隨機(jī)顏色驗(yàn)證碼(完整代碼)
這篇文章主要介紹了JavaScript函數(shù)封裝隨機(jī)顏色驗(yàn)證碼(完整代碼),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
用Javascript實(shí)現(xiàn)Windows任務(wù)管理器的代碼
在Windows系統(tǒng)上,自從98系統(tǒng)以來(lái)就提供了腳本宿主(Windows Scripting Host 簡(jiǎn)稱WSH)的功能,WSH可以加載并運(yùn)行JS和VBS腳本,并支持調(diào)用系統(tǒng)的COM組件,在COM組件的支持下腳本可以輕松實(shí)現(xiàn)非常強(qiáng)大的功能2012-03-03
thinkphp實(shí)現(xiàn)無(wú)限分類(使用遞歸)
這篇文章主要介紹了在使用遞歸的情況下thinkphp實(shí)現(xiàn)無(wú)限分類,感興趣的小伙伴們可以參考一下2015-12-12
WordPress中利用AJAX技術(shù)進(jìn)行評(píng)論提交的實(shí)現(xiàn)示例
這篇文章主要介紹了WordPress中利用AJAX技術(shù)進(jìn)行評(píng)論提交的實(shí)現(xiàn)示例,整個(gè)處理的關(guān)鍵點(diǎn)在于文中的ajax_comment函數(shù),需要的朋友可以參考下2016-01-01

