H5页面点击保存,把页面上的图片保存到手机相册有什么好方法吗?

H5页面点击保存,把页面上的图片保存到手机相册有什么好方法吗?当前H5需要在手机浏览器和微信中打开
在网上查找到这个方法,但是不能用,会直接把这个图片打开,不能达到保存到手机相册的目的? 有什么好的办法吗

    function saveStills(){
            console.info('保存');
            let 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);
            } */
}

image.png

阅读 4.6k
1 个回答

把交互都改成长按保存就好了。点击保存会有误操作,没有长按保存来的友好。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题