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


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 相关文章推荐
dwr spring的集成实现代码
Mar 22 Javascript
html dom节点操作(获取/修改/添加或删除)
Jan 23 Javascript
让table变成exls的示例代码
Mar 24 Javascript
jQuery操作select下拉框的text值和value值的方法
May 31 Javascript
jQuery图片轮播功能实例代码
Jan 29 Javascript
Vue2学习笔记之请求数据交互vue-resource
Feb 23 Javascript
激动人心的 Angular HttpClient的源码解析
Jul 10 Javascript
Angular2.0实现modal对话框的方法示例
Feb 18 Javascript
Vue 实现展开折叠效果的示例代码
Aug 27 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
Apr 02 Javascript
javaScript实现一个队列的方法
Jul 14 Javascript
vue ref如何获取子组件属性值
Mar 31 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.NET的入门教程
2006/10/09 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
php中字符串和正则表达式详解
2014/10/23 PHP
Yii控制器中操作视图js的方法
2016/07/04 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
2018/06/01 PHP
JS与框架页的操作代码
2010/01/17 Javascript
JQuery 文本框使用小结
2010/05/22 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
浅谈Vue的基本应用
2016/12/27 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
jquery表单提交带错误信息提示效果
2017/03/09 Javascript
nodejs学习笔记之路由
2017/03/27 NodeJs
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
vue多次循环操作示例
2019/02/08 Javascript
微信小程序使用wx.request请求服务器json数据并渲染到页面操作示例
2019/03/30 Javascript
[17:36]VG战队纪录片
2014/08/21 DOTA
python executemany的使用及注意事项
2017/03/13 Python
Python如何生成树形图案
2018/01/03 Python
Python简单读写Xls格式文档的方法示例
2018/08/17 Python
使用Python完成15位18位身份证的互转功能
2019/11/06 Python
PyTorch 对应点相乘、矩阵相乘实例
2019/12/27 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
2020/11/18 Python
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
保时捷设计:Porsche Design
2019/03/30 全球购物
公司运动会策划方案
2014/05/25 职场文书
组工干部对照检查材料
2014/08/25 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
武当山导游词
2015/02/03 职场文书
2015年采购部工作总结
2015/04/23 职场文书
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
2021/11/11 Python