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


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 相关文章推荐
自动更新作用
Oct 08 Javascript
Jquery 滑入滑出效果实现代码
Mar 27 Javascript
js返回上一页并刷新代码整理
Dec 21 Javascript
Google (Local) Search API的简单使用介绍
Nov 28 Javascript
JavaScript中的Math.atan2()方法使用详解
Jun 15 Javascript
jQuery实现下滑菜单导航效果代码
Aug 25 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
Feb 12 Javascript
angular ng-repeat数组中的数组实例
Feb 18 Javascript
基于JavaScript实现的折半查找算法示例
Apr 14 Javascript
JavaScript调用模式与this关键字绑定的关系
Apr 21 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
Dec 12 Javascript
js实现车辆管理系统
Aug 26 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采集神器cURL使用方法详解
2016/02/19 PHP
简单实现php上传文件功能
2017/09/21 PHP
PHP实现分布式memcache设置web集群session同步的方法
2018/04/10 PHP
Dojo 学习笔记入门篇 First Dojo Example
2009/11/15 Javascript
基于jquery的滑动样例代码
2010/11/20 Javascript
热点新闻滚动特效的js代码
2013/08/17 Javascript
深入探讨JavaScript String对象
2015/03/09 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
Bootstrap被封装的弹层
2016/07/20 Javascript
AngularJS基础 ng-mousemove 指令简单示例
2016/08/02 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
JS实现身份证输入框的输入效果
2017/08/21 Javascript
原生JS实现图片无缝滚动方法(附带封装的运动框架)
2017/10/01 Javascript
vue router-link传参以及参数的使用实例
2017/11/10 Javascript
浅析vue给不同环境配置不同打包命令
2018/08/17 Javascript
微信 jssdk 签名错误invalid signature的解决方法
2019/01/14 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
python实现从web抓取文档的方法
2014/09/26 Python
python自动化测试之连接几组测试包实例
2014/09/28 Python
python实现ping的方法
2015/07/06 Python
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
ubuntu系统下 python链接mysql数据库的方法
2017/01/09 Python
windows下Virtualenvwrapper安装教程
2017/12/13 Python
Python3.6使用tesseract-ocr的正确方法
2018/10/17 Python
python SVM 线性分类模型的实现
2019/07/19 Python
python调用支付宝支付接口流程
2019/08/15 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
企业门卫岗位职责
2013/12/12 职场文书
高级护理专业毕业生推荐信
2013/12/25 职场文书
微信营销策划方案
2014/02/24 职场文书
体育教师求职信
2014/05/24 职场文书
商超业务员岗位职责
2015/02/13 职场文书
用 Python 元类的特性实现 ORM 框架
2021/05/19 Python