uniapp的H5实现图片长按保存

这篇具有很好参考价值的文章主要介绍了uniapp的H5实现图片长按保存。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现图片预览

使用uniapp的api实现图片预览,可以缩放,关闭等操作

uni.previewImage({
  urls:[imageUrl],
  success:()=>{
    this.controllTouch();
  }
})

imageUrl是图片地址,如https://www.111.com/abc/image.png

urls是字符串数组,用来预览图片

因为app可以使用对应的图片下载保存,这里就不多说了,主要讲的是在H5实现图片预览保存功能

长按图片显示保存弹框 

因为H5无法实现长按显示弹框所以,要自己实现这个功能。

1、在图片开始预览时,加上事件监听,手指点击和手指离开

window.addEventListener("touchstart",fnTouchStart,true);
window.addEventListener("touchend",fnTouchEnd,true);

 其中touchstart和touchend是手指开始和离开的监听名字,第二个参数是监听到手指开始和手指离开时所执行的函数。

2、编写手指开始接触屏幕和手指离开时的函数

2、1手指开始接触屏幕

因为在预览时会有两个手指放大缩小图片,单击图片关闭预览的操作,所以需要对这两种情况进行判断。

当监测到屏幕上有两个手指时,不会进行保存图片提示,一个手指长按时会出现提示

其中有几个手指接触屏幕,会体现在事件监听的回调函数的参数中(e.touches.length),长度为多少就表示有多少个手指在接触屏幕。

 2、2手指离开屏幕

在手指离开屏幕时,也会有对应的回调函数表示(e.touches.length),为0表示有一根手指离开屏幕。

2、3实现1秒后,长按提示

使用定时器完成,每次监测到手指点击屏幕时清空定时器,只有在长按1秒后离开屏幕,才会执行定时器里面的内容。

showDownImage 是控制弹框的显示和隐藏,后面有作用

// 触碰屏幕控制
controllTouch(){
  let flag = false;
  let timeEvent = null;
  const fnTouchStart = (e) => {
    clearTimeout(timeEvent)
    flag = false;
    // 判断按住的时间是否超过1秒
    timeEvent = setTimeout(()=>{
      if(e.touches.length == 1){
        flag = true;
      }else if(e.touches.length == 2){
        flag = false;
      }
    },1000)
  }
  const fnTouchEnd = (e) => {
    if(e.touches.length == 0 && flag){
      this.showDownImage = true;
      flag = false;
    }else{
      //如果为单击事件,做对应的处理
       if(!this.showDownImage){
          this.closeControllTouch(fnTouchStart,fnTouchEnd,timeEvent);
       }
    }
  }
  window.addEventListener("touchstart",fnTouchStart,true);
  window.addEventListener("touchend",fnTouchEnd,true);
},

2、4为什么不适用匿名函数实现事件监听?

因为使用匿名函数后,无法对匿名函数进行去掉监听的操作。加入使用以下方法对点击事件进行监听

window.addEventListener("touchstart",(e)=>{
  console.log(e);
},true);

后续无法拿到上面事件的函数,进行销毁事件监听处理。

3、为单击事件时,关闭预览,去掉事件监听

在上述代码中,使用了非匿名函数形式的事件监听,在这里对移除事件监听,防止在其他页面也显示弹框,同时清理定时器。

closeControllTouch(fnTouchStart,fnTouchEnd,timeEvent){
    window.removeEventListener("touchstart",fnTouchStart,true);
    window.removeEventListener("touchend",fnTouchEnd,true);
    clearTimeout(timeEvent);
},

4、showDownImage 展示弹框

当判断是长按图片时,手指离开屏幕,出现弹框,使用了uview的模态框实现

<u-modal :show="showDownImage"
        class="comfirm-modal"
        title="是否保存图片"
        width="560rpx"
        confirmColor="#009BF3"
        :showCancelButton="true"
        confirmText="确认"
        @confirm="downLoad"
        @cancel="showDownImage = false"
 >
 </u-modal>

@confirm="downLoad"是点击确定时,执行函数downLoad下载图片

downLoad() {
        const url = '';//你要下载的图片地址
         var xhr = new XMLHttpRequest();
         xhr.open('get', url, true);
         xhr.responseType = 'blob';
         xhr.onload = ()=>{
           if (xhr.status === 200) {
             console.log(xhr)
             var blobUrl = new Blob([xhr.response]);
             const link = document.createElement('a');
             link.style.display = 'none';
             var urlObject = window.URL.createObjectURL(blobUrl);
             link.href = urlObject;
             link.download = url;
             document.body.appendChild(link);
             link.click();
             document.body.removeChild(link);
           }
         }
         xhr.send();
         this.showDownImage = false;
        this.closePreviewImage();
      },

下载完成图片之后,关闭模态框,事件监听,操作完成!!!

这是实习期间碰到的问题,希望大佬指正文章来源地址https://www.toymoban.com/news/detail-676604.html

到了这里,关于uniapp的H5实现图片长按保存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何在uni-app小程序端实现长按复制功能

    在开发小程序应用中,常常需要使用到长按复制功能。本文将介绍如何在uni-app小程序端实现长按复制功能。 uni-app是一个跨平台的开发框架,可以基于vue.js语法开发小程序、H5、APP等多个平台的应用。uni-app提供了一些内置组件和API,可以方便地实现各种功能。其中,uni.setCl

    2024年02月05日
    浏览(91)
  • uni-app uni-file-picker文件上传实现拍摄从相册选择获取图片上传文档服务器(H5上传-微信小程序上传)

    前言 最近在使用uni-app写H5移动端,有一个从手机拍摄从相册选择获取图片上传到文档服务器功能。 查阅uni-app发现关于上传图片,uni-file-picker文件上传,uni.chooseImage,uni.uploadFile H5上传时它和pc端原理差不多,都是file对象上传,PC端是通过new file对象,uni-app是直接提供了 微信

    2024年02月15日
    浏览(88)
  • uni-app前端H5页面底部内容被tabbar遮挡

    在用uniapp写小程序的时候,底部有一部分内容没显示出来,被底部的tabbar遮挡住了 给最外部的view设置样式 padding-bottom: var(--window-bottom) ,如下 参考1 参考2 使用 uni-app 框架开发的一个项目,发现 H5 端页面底部的内容被导航栏(Tabbar)遮挡,小程序端可以正常显示。 查阅资料

    2024年02月04日
    浏览(62)
  • uni-app App和H5平台上传视频截取视频第一帧生成图片

    提示:因为uni-app中renderjs仅支持App和H5平台,所以该方案仅支持当前这两个平台。 this.request为本人封装的接口请求方法,可以替换成个人的接口请求方法,如有需要可在下方留言 因为uni-app App端没有dom概念,不支持dom操作,并且uni-app的canvas不支持绘制video。renderjs完美解决了

    2023年04月09日
    浏览(54)
  • uni-app开发微信小程序,H5 关于压缩上传图片的问题

    文章目录 前言 一、为什么要压缩图片 二、图片压缩方式 1. 微信小程序​​​​​​​ 2. H5 总结 关于微信小程序、H5兼容性问题,今天就压缩以及上传图片做一个可实现方法的简要阐述。 在使用uni-app开发小程序及H5的具体业务中,我们会遇到需要让用户上传本地图片的场景

    2024年02月02日
    浏览(65)
  • uni-app:使用 Painter 在微信小程序将当前页面保存为图片

    手机截屏 Painter 实现 方式一:Painter Painter 是一个微信小程序组件,具体介绍和 API 请参考:GitHub文档。 在 GitHub 下载下来之后只需要将 components 下的 painter 文件夹放到项目根目录下的 wxcomponents 文件夹即可。然后就是如何在 uni-app 中使用微信小程序形式的组件,其实很简单,

    2024年02月12日
    浏览(65)
  • 前端Vue uni-app App/小程序/H5 通用tree树形结构图

    随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。 通过组件化开发,可以有效实现单独开发,单独维护,而且他们之间可以随

    2024年02月16日
    浏览(46)
  • uni-app 支持 app端, h5端,微信小程序端 图片转换文件格式 和 base64

    uni-app 支持 app端 h5端,微信小程序端 图片转换文件格式 和 base64,下方是插件市场的地址 app端 h5端,微信小程序端 图片转换文件格式 和 base64 - DCloud 插件市场 https://ext.dcloud.net.cn/plugin?id=13926

    2024年02月13日
    浏览(60)
  • 小程序-uni-app:将页面(html+css)生成图片/海报/名片,进行下载 保存到手机

    一、需要描述 本文实现,uniapp微信小程序,把页面内容保存为图片,并且下载到手机上。 说实话网上找了很多资料,但是效果不理想,直到看了一个开源项目,我知道可以实现了。 本文以开源项目uniapp-wxml-to-canvas 为蓝本 记录集成的步骤,以供参考。 详细内容可以下载并启

    2024年02月07日
    浏览(53)
  • uni-app的优缺点;uniapp进行条件编译的两种方法;小程序端和H5的代表值

    目录 uni-app的优缺点 优点: 1.跨平台开发: 2.统一的开发语言: 3.高效的性能: 4.丰富的生态圈: 缺点: 1.平台差异性: 2.性能限制: 3.对新特性支持滞后: Uni-app条件编译 process.env.UNI_PLATFORM 变量: 使用 process.env.NODE_ENV 变量: Uni-app中的代表值 Uni-app 是一个跨平台的开发框架

    2024年02月08日
    浏览(122)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包