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


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 相关文章推荐
js文件缓存之版本管理详解
Jul 05 Javascript
标题过长使用javascript按字节截取字符串
Apr 24 Javascript
JavaScript中的object转换成number或string规则介绍
Dec 31 Javascript
jquery中object对象循环遍历的方法
Dec 18 Javascript
JS控件bootstrap suggest plugin使用方法详解
Mar 25 Javascript
JS中使用正则表达式g模式和非g模式的区别
Apr 01 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
Apr 13 Javascript
使用vue-cli脚手架工具搭建vue-webpack项目
Jan 14 Javascript
微信小程序实现商城倒计时
Nov 01 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
Dec 17 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
May 28 Javascript
JS异步宏队列微队列原理详解
Sep 09 Javascript
使用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
其他功能
2006/10/09 PHP
详解php的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
ThinkPHP上使用多说评论插件的方法
2014/10/31 PHP
一页面多XMLHttpRequest对象
2007/01/22 Javascript
jQuery timers计时器简单应用说明
2010/10/28 Javascript
Three.js源码阅读笔记(Object3D类)
2012/12/27 Javascript
js异常捕获方法介绍
2013/04/10 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
vue.js 获取当前自定义属性值
2017/06/01 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
捕获未处理的Promise错误方法
2017/10/13 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
玩转python爬虫之URLError异常处理
2016/02/17 Python
python模块之time模块(实例讲解)
2017/09/13 Python
Linux上使用Python统计每天的键盘输入次数
2019/04/17 Python
Python numpy数组转置与轴变换
2019/11/15 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
pytorch ImageFolder的覆写实例
2020/02/20 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
使用Python制作一个数据预处理小工具(多种操作一键完成)
2021/02/07 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
英国领先的奢侈品零售商之一:CRUISE
2016/12/02 全球购物
英国女性时尚鞋类的潮流制造者:Koi Footwear
2018/10/19 全球购物
COS美国官网:知名服装品牌
2019/04/08 全球购物
StringBuilder和String的区别
2015/05/18 面试题
艺术应用与设计个人的自我评价
2013/11/23 职场文书
英文商务邀请信
2014/01/22 职场文书
幼儿园保教管理制度
2014/02/03 职场文书
应届生简历自我评价
2015/03/11 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
地雷战观后感
2015/06/09 职场文书
mysql数据库入门第一步之创建表
2021/05/14 MySQL