前言:本来用uniapp开发h5页面,想点击图片保存到本地,但是,uniapp并不支持这个方法,所以下面这个是通过百度找各种资源然后弄出来的方法

直接上代码,有注释:

<image mode="aspectFit" :src="xxxxxx"></image>
<button style="margin-top: 10px;" @click="savePic">保存到本地</button>
savePic(Url){
		Url = this.dialogImgUrl //图片路径,也可以传值进来
		var triggerEvent = "touchstart"; //指定下载方式
	    var blob=new Blob([''], {type:'application/octet-stream'}); //二进制大型对象blob
	    var url = URL.createObjectURL(blob); //创建一个字符串路径空位
	    var a = document.createElement('a'); //创建一个 a 标签
	    a.href = Url;  //把路径赋到a标签的href上
	    //正则表达式,这里是把图片文件名分离出来。拿到文件名赋到a.download,作为文件名来使用文本
	    a.download = Url.replace(/(.*\/)*([^.]+.*)/ig,"$2").split("?")[0]; 
	    /* var e = document.createEvent('MouseEvents');  //创建事件(MouseEvents鼠标事件)
	    e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); //初始化鼠标事件(initMouseEvent已弃用)*/
	    
	    //代替方法。创建鼠标事件并初始化(后面这些参数我也不清楚,参考文档吧 https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/MouseEvent)
		var e = new MouseEvent('click', ( true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null));  
		//派遣后,它将不再执行任何操作。执行保存到本地
	    a.dispatchEvent(e); 
	    //释放一个已经存在的路径(有创建createObjectURL就要释放revokeObjectURL)
	    URL.revokeObjectURL(url);  
		/* 
		//这段好像并不影响,所以我不用,注释掉
		var imgs = document.getElementsByTagName("img");
		for(var i = 0,o;o = imgs[i];i++){
			
			o.addEventListener(triggerEvent,function(){
				var newurl = this.getAttribute("src");
				saveAs(newurl);
			},false);
		} */
		
	},

附上参考文档:https://developer.mozilla.org/zh-CN/docs/Web/API/Document/createEvent

在这里插入图片描述

Logo

基于 Vue 的企业级 UI 组件库和中后台系统解决方案,为数万开发者服务。

更多推荐