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


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]点出统计器
Oct 11 Javascript
Javascript中的作用域和上下文深入理解
Jul 03 Javascript
jQuery文字横向滚动效果的实现代码
May 31 Javascript
JS 实现计算器详解及实例代码(一)
Jan 08 Javascript
JavaScript实现的数字与字符串转换功能示例
Aug 23 Javascript
Vue.js 踩坑记之双向绑定
May 03 Javascript
微信小程序支付前端源码
Aug 29 Javascript
Element UI 自定义正则表达式验证方法
Sep 04 Javascript
利用Webpack实现小程序多项目管理的方法
Feb 25 Javascript
手把手教你 CKEDITOR 4 实现Dialog 内嵌 IFrame操作详解
Jun 18 Javascript
JavaScript Array对象基本方法详解
Sep 03 Javascript
JS实现打字游戏
Dec 17 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 管理系统程序中的后门
2009/08/05 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
2012/08/31 PHP
Yii实现多按钮保存与提交的方法
2014/12/03 PHP
php中header跳转使用include包含解决参数丢失问题
2015/05/08 PHP
javascript开发中因空格引发的错误
2010/11/08 Javascript
JS 自定义带默认值的函数
2011/07/21 Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
2011/08/28 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
常用的JavaScript验证正则表达式汇总
2013/11/26 Javascript
jquery实现页面图片等比例放大缩小功能
2014/02/12 Javascript
DOM基础教程之事件类型
2015/01/20 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
jQuery中deferred对象使用方法详解
2016/07/14 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
jQuery实现的购物车物品数量加减功能代码
2016/11/16 Javascript
Bootstrap源码解读排版(1)
2016/12/23 Javascript
node.js的事件机制
2017/02/08 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
浅谈Fetch 数据交互方式
2018/12/20 Javascript
微信小程序接入腾讯云验证码的方法步骤
2020/01/07 Javascript
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
Django 浅谈根据配置生成SQL语句的问题
2018/05/29 Python
Flask框架各种常见装饰器示例
2018/07/17 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
python之列表推导式的用法
2019/11/29 Python
浅谈Python中threading join和setDaemon用法及区别说明
2020/05/02 Python
生产总经理岗位职责
2013/12/19 职场文书
《走一步再走一步》教学反思
2014/02/15 职场文书
内蒙古鄂尔多斯市市长寄语
2014/04/10 职场文书
2015年党员承诺书
2015/01/21 职场文书
实习证明模板
2015/06/16 职场文书
会议承办单位欢迎词
2015/09/30 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书