小程序实现长按保存图片的方法


Posted in Javascript onDecember 31, 2019

微信浏览器打开h5页面如果是img标签的话,长按会弹出保存图片的选项。但是微信小程序里面不可以。需要自己写这个功能。这个功能有两个点,一个是长按,一个是保存图片到本地。

1,、微信小程序提供了长按的事件,叫 bindlongpress

2、微信小程序同样提供了保存图片的接口,是 wx.saveImageToPhotosAlbum()

弄清楚了,我们可以开始做这个功能了,首先写wxml

<image src="{{url}}" data-url="{{url}}" bindlongpress="saveImage"></image>

然后就是js代码了

Page({
 /**
  * 页面的初始数据
  */
 data: {
  url:"https://wechat.weixinzjit.com/costa/public/uploads/images/20190109/67b16149693920598435315fd0d5ab3e.jpg"
 },
 // 长按保存图片
 saveImg(e){
   let url = e.currentTarget.dataset.url;
   wx.saveImageToPhotosAlbum({
     filePath:url,
     success(res) { 
      console.log(res);
     },
     fail(res){
      console.log(res);
     }
    })
 }
})

这样写感觉没问题,但是不行,为什么,看下面文档说明。

小程序实现长按保存图片的方法

遇到了两个问题:

1、需要授权

2、路径不能是网络路径

一个问题一个问题解决,首先长按之后,不去保存图片,先去判断用户是否授权,这个接口就不多讲了,之前写过。

直接贴上代码

wx.getSetting({
   success: (res) => {
    if (!res.authSetting['scope.writePhotosAlbum']) {
     wx.authorize({
      scope: 'scope.writePhotosAlbum',
      success:()=> {
       // 同意授权
      },
      fail: (res) =>{
       console.log(res);
      }
     })
    }else{
     // 已经授权了
    }
   },
   fail: (res) =>{
    console.log(res);
   }
  })

授权问题解决了以后,要处理另外一个问题,就是图片不能是网络路径。这个时候我们可以用到另外一个接口,叫 wx.getImageInfo()

小程序实现长按保存图片的方法

通过文档看到,这个接口是可以接收网络路径的,返回的是本地路径。所以我们先用这个接口把网络路径转化一下,再拿去给wx.saveImageToPhotosAlbum用。

wx.getImageInfo({
   src: url,
   success:(res)=> {
    let path = res.path;
    wx.saveImageToPhotosAlbum({
     filePath:path,
     success(res) { 
      console.log(res);
     },
     fail:(res)=>{
      console.log(res);
     }
    })
   },
   fail:(res)=> {
    console.log(res);
   }
  })

所以整体的代码是这样子的

Page({
 data: {
   url:"https://wechat.weixinzjit.com/costa/public/uploads/images/20190109/67b16149693920598435315fd0d5ab3e.jpg"
 },
 // 长按保存图片
 saveImg(e){
  let url = e.currentTarget.dataset.url;
  //用户需要授权
  wx.getSetting({
   success: (res) => {
    if (!res.authSetting['scope.writePhotosAlbum']) {
     wx.authorize({
      scope: 'scope.writePhotosAlbum',
      success:()=> {
       // 同意授权
       this.saveImg1(url);
      },
      fail: (res) =>{
       console.log(res);
      }
     })
    }else{
     // 已经授权了
     this.saveImg1(url);
    }
   },
   fail: (res) =>{
    console.log(res);
   }
  })  
 },
 saveImg1(url){
  wx.getImageInfo({
   src: url,
   success:(res)=> {
    let path = res.path;
    wx.saveImageToPhotosAlbum({
     filePath:path,
     success:(res)=> { 
      console.log(res);
     },
     fail:(res)=>{
      console.log(res);
     }
    })
   },
   fail:(res)=> {
    console.log(res);
   }
  })
 },
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery判断元素是否隐藏的多种方法
May 06 Javascript
JavaScript实现N皇后问题算法谜题解答
Dec 29 Javascript
JQuery基础语法小结
Feb 27 Javascript
Backbone.js的一些使用技巧
Jul 01 Javascript
vue.js轮播图组件使用方法详解
Jul 03 Javascript
JavaScript中set与get方法用法示例
Aug 15 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
Nov 20 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
Jun 19 Javascript
详解JavaScript匿名函数和闭包
Jul 10 Javascript
微信小程序获取当前时间及星期几的实例代码
Sep 20 Javascript
实用的 vue tags 创建缓存导航的过程实现
Dec 03 Vue.js
vue+echarts实现中国地图流动效果(步骤详解)
Jan 27 Vue.js
使用webpack搭建vue环境的教程详解
Dec 31 #Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
Dec 31 #Javascript
TypeScript之调用栈的实现
Dec 31 #Javascript
Vue通过配置WebSocket并实现群聊功能
Dec 31 #Javascript
Vue实现剪贴板复制功能
Dec 31 #Javascript
Vue+Element实现网页版个人简历系统(推荐)
Dec 31 #Javascript
小程序外卖订单界面的示例代码
Dec 30 #Javascript
You might like
php session处理的定制
2009/03/16 PHP
PHP面向对象法则
2012/02/23 PHP
php中通过curl检测页面是否被百度收录
2013/09/27 PHP
php实现微信发红包功能
2018/07/13 PHP
Nigma vs AM BO3 第二场2.13
2021/03/10 DOTA
jquery ajax 登录验证实现代码
2009/09/23 Javascript
解决JS无法调用Controller问题的方法
2015/12/31 Javascript
微信小程序购物商城系统开发系列-工具篇的介绍
2016/11/21 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
vue中for循环更改数据的实例代码(数据变化但页面数据未变)
2017/09/15 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
Vue实现PopupWindow组件详解
2018/04/28 Javascript
其实你可以少写点if else与switch(推荐)
2019/01/10 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
原生js实现自定义滚动条组件
2021/01/20 Javascript
[51:11]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS DT
2014/05/22 DOTA
python操作摄像头截图实现远程监控的例子
2014/03/25 Python
利用python发送和接收邮件
2016/09/27 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
numpy排序与集合运算用法示例
2017/12/15 Python
python 产生token及token验证的方法
2018/12/26 Python
Python在cmd上打印彩色文字实现过程详解
2019/08/07 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
基于Python词云分析政府工作报告关键词
2020/06/02 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
英语翻译系毕业生求职信
2013/09/29 职场文书
历史学专业大学生找工作的自我评价
2013/10/16 职场文书
农村改厕实施方案
2014/03/22 职场文书
事假请假条范文
2014/04/11 职场文书
学术诚信承诺书
2014/05/26 职场文书
项目合作意向书
2015/05/08 职场文书
职工培训工作总结
2015/08/10 职场文书
Apache Pulsar集群搭建部署详细过程
2022/02/12 Servers
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL
解决IIS7下无法绑定https主机的问题
2022/04/29 Servers