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


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 animate 动画效果使用说明
Nov 04 Javascript
jquery 表格的增行删行实现思路
Mar 21 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
Jan 14 Javascript
jquery制作LED 时钟特效
Feb 01 Javascript
浅谈JavaScript字符串与数组
Jun 03 Javascript
JS HTML5拖拽上传图片预览
Jul 18 Javascript
JavaScript实现的斑马线表格效果【隔行变色】
Sep 18 Javascript
微信小程序开发背景图显示功能
Aug 08 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
Nov 27 Javascript
layui 动态设置checbox 选中状态的例子
Sep 02 Javascript
Javascript地址引用代码实例解析
Feb 25 Javascript
vue学习笔记之slot插槽用法实例分析
Feb 29 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
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
PHP共享内存用法实例分析
2016/02/12 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
Yii全局函数用法示例
2017/01/22 PHP
PHP解析url并得到url参数方法总结
2018/10/11 PHP
php实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
jQuery中appendTo()方法用法实例
2015/01/08 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
jQuery实现仿百度帖吧头部固定导航效果
2015/08/07 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
2015/09/14 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
2016/06/16 Javascript
jQuery多级联动下拉插件chained用法示例
2016/08/20 Javascript
微信小程序 刷新上拉下拉不会断详细介绍
2017/05/11 Javascript
如何在vue中使用ts的示例代码
2018/02/28 Javascript
JS实现读取xml内容并输出到div中的方法示例
2018/04/19 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
python进阶教程之函数对象(函数也是对象)
2014/08/30 Python
Python中使用partial改变方法默认参数实例
2015/04/28 Python
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
解决使用PyCharm时无法启动控制台的问题
2019/01/19 Python
keras 特征图可视化实例(中间层)
2020/01/24 Python
Python获取、格式化当前时间日期的方法
2020/02/10 Python
使用Keras建立模型并训练等一系列操作方式
2020/07/02 Python
澳大利亚排名第一的在线酒类商店:MyBottleShop
2018/04/26 全球购物
澳大利亚游乐场设备品牌:Lifespan Kids
2019/05/24 全球购物
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
优秀教师感人事迹材料
2014/05/04 职场文书
给学校建议书范文
2014/05/13 职场文书
2015年七年级班主任工作总结
2015/05/21 职场文书
实习证明模板
2015/06/16 职场文书
聘任通知书
2015/09/21 职场文书
2019年员工晋升管理制度范本!
2019/07/08 职场文书