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


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来判断页面控件是否获取焦点
Jan 03 Javascript
浅谈Javascript如何实现匀速运动
Dec 19 Javascript
JavaScript日期类型的一些用法介绍
Mar 02 Javascript
$.extend 的一个小问题
Jun 18 Javascript
微信小程序 wx.uploadFile无法上传解决办法
Dec 14 Javascript
Bootstrap Table使用整理(三)
Jun 09 Javascript
Angular7.2.7路由使用初体验
Mar 01 Javascript
微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能
Jul 20 Javascript
Vue实现页面添加水印功能
Nov 09 Javascript
js+canvas实现刮刮奖功能
Sep 13 Javascript
JavaScript编码小技巧分享
Sep 17 Javascript
Vue 简单实现前端权限控制的示例
Dec 25 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
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
2009/04/24 PHP
php 正则匹配函数体
2009/08/25 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
2016/03/21 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
javascrip客户端验证文件大小及文件类型并重置上传
2011/01/12 Javascript
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
2013/01/24 Javascript
使用JavaScript动态设置样式实现代码(2)
2013/01/25 Javascript
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
JS操作HTML自定义属性的方法
2015/02/10 Javascript
jquery移动端TAB触屏切换实现效果
2020/12/22 Javascript
快速解决jquery.touchSwipe左右滑动和垂直滚动条冲突
2016/04/15 Javascript
简单实现IONIC购物车功能
2017/01/10 Javascript
jQuery实现给input绑定回车事件的方法
2017/02/09 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
微信小程序时间轴实现方法示例
2019/01/14 Javascript
js如何实现元素曝光上报
2019/08/07 Javascript
JS实现滑动插件
2020/01/15 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
使用python编写脚本获取手机当前应用apk的信息
2014/07/21 Python
多版本Python共存的配置方法
2017/05/22 Python
python 中split 和 strip的实例详解
2017/07/12 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
2018/03/13 Python
Django添加feeds功能的示例
2018/08/07 Python
virtualenv 指定 python 解释器的版本方法
2018/10/25 Python
python 并发下载器实现方法示例
2019/11/22 Python
CSS3移动端vw+rem不依赖JS实现响应式布局的方法
2019/01/23 HTML / CSS
ProBikeKit美国官网:自行车套件,跑步和铁人三项套件
2016/10/13 全球购物
领先的钻石和订婚戒指零售商:Diamonds-USA
2016/12/11 全球购物
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
房地产员工找工作的自我评价
2013/11/15 职场文书
法律进企业活动方案
2014/03/04 职场文书
社区平安建设方案
2014/05/25 职场文书
招标保密承诺书
2015/01/20 职场文书
新闻稿怎么写
2015/07/18 职场文书
八年级数学教学反思
2016/02/17 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers