您现在的位置是:网站首页> 编程资料编程资料
一文彻底解决HTML5页面中长按保存图片功能HTML5 Canvas实现的鼠标点击长按粒子动画特效源码移动端html5模拟长按事件的实现方法详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案 HTML5对手机页面长按会粘贴复制禁用的解决方法
2023-10-12
297人已围观
简介 这篇文章主要介绍了解决HTML5页面中长按保存图片功能,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
本文详细介绍了如何在H5中实现长按保存图片的功能。
长按保存图片是现在一些宣传页H5中很常见的需求,但是js没有这样的能力,所以要么借助android或ios的原生能力,要么用canvas自己画一个(截屏),相比较原生成本太高,且必须依赖于app,相对于流传性很广且跨平台的H5来说不合时宜,所以 canvas 成为我们常用的手段。
下面是详细的步骤:
1. html2canvas截屏
保存的图片节点最好是img标签: 想要截屏的节点最好是img标签的图片,经测试如果是 background-image 会有点模糊,需要特别注意下。
npm i html2canvas --save import html2canvas from 'html2canvas'; // 想要保存的图片节点 const dom = document.querySelector('img'); // 创建一个新的canvas const Canvas = document.createElement('canvas'); const width = document.body.offsetWidth; // 可见屏幕的宽 const height = document.body.offsetHeight; // 可见屏幕的高 const scale = window.devicePixelRadio; // 设备的devicePixelRadio // 将Canvas画布放大scale倍,然后放在小的屏幕里,解决模糊问题 Canvas.width = width * scale; Canvas.height = height * scale; Canvas.getContext('2d').scale(scale, scale); html2canvas(dom, { canvas: Canvas, scale, useCORS: true, logging: true, width: width + 'px', hegiht: height + 'px', }).then((canvas) => { const context = canvas.getContext('2d'); // 关闭抗锯齿形 context.mozImageSmoothingEnabled = false; context.webkitImageSmoothingEnabled = false; context.msImageSmoothingEnabled = false; context.imageSmoothingEnabled = false; // canvas转化为图片 canvas2Image(canvas, canvas.width, canvas.height); });2. canvas2Image转化为图片
一般情况下转为jpeg格式就很不错了。
canvas2Image(canvas, canvas.width, canvas.height) { const retCanvas = document.createElement('canvas'); const retCtx = retCanvas.getContext('2d'); retCanvas.width = width; retCanvas.height = height; retCtx.drawImage(canvas, 0, 0, width, height, 0, 0, width, height); const img = document.createElement('img'); img.src = retCanvas.toDataURL('image/jpeg'); // 可以根据需要更改格式 return img; }3. 长按保存图片
先实现一个长按的方法,长按之后把生成的图片append到body,透明浮在屏幕上。
// 封装一个长按方法 longPress(fn) { let timeout = 0; const $this = this; for (let i = 0; i < $this.length; i++) { $this[i].addEventListener('touchstart', () => { timeout = setTimeout(fn, 800); // 长按时间超过800ms,则执行传入的方法 }, false); $this[i].addEventListener('touchend', () => { clearTimeout(timeout); // 长按时间少于800ms,不会执行传入的方法 }, false); } } // 添加生成的图片到body const img = canvas2Image(canvas, canvas.width, canvas.height); document.body.appendChild(img); img.style.cssText = "width:100%;height:100%;position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;";4. 完整代码如下
$.fn.longPress = function(fn) { let timeout = 0; const $this = this; for (let i = 0; i < $this.length; i++) { $this[i].addEventListener('touchstart', () => { timeout = setTimeout(fn, 800); // 长按时间超过800ms,则执行传入的方法 }, false); $this[i].addEventListener('touchend', () => { clearTimeout(timeout); // 长按时间少于800ms,不会执行传入的方法 }, false); } }; $('img').longPress(() => { saveImg(); });saveImg() { // 想要保存的图片节点 const dom = document.querySelector('img'); // 创建一个新的canvas const Canvas = document.createElement('canvas'); const width = document.body.offsetWidth; // 可见屏幕的宽 const height = document.body.offsetHeight; // 可见屏幕的高 const scale = window.devicePixelRatio; // 设备的devicePixelRatio // 将Canvas画布放大scale倍,然后放在小的屏幕里,解决模糊问题 Canvas.width = width * scale; Canvas.height = height * scale; Canvas.getContext('2d').scale(scale, scale); html2canvas(dom, { canvas: Canvas, scale, useCORS: true, logging: true, width: width + 'px', hegiht: height + 'px', }).then((canvas) => { const context = canvas.getContext('2d'); // 关闭抗锯齿形 context.mozImageSmoothingEnabled = false; context.webkitImageSmoothingEnabled = false; context.msImageSmoothingEnabled = false; context.imageSmoothingEnabled = false; // canvas转化为图片 const img = canvas2Image(canvas, canvas.width, canvas.height); document.body.appendChild(img); img.style.cssText = "width:100%;height:100%;position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;"; } } canvas2Image(canvas, width, height) { const retCanvas = document.createElement('canvas'); const retCtx = retCanvas.getContext('2d'); retCanvas.width = width; retCanvas.height = height; retCtx.drawImage(canvas, 0, 0, width, height, 0, 0, width, height); const img = document.createElement('img'); img.src = retCanvas.toDataURL('image/jpeg'); // 可以根据需要更改格式 return img; }刚开始做的时候也是网上一堆文章乱看,不断的试错,最后愉快的实现了长按保存图片的功能,做完才发现也很简单哈,这篇文章完整的介绍了整个流程,拿走不谢!
总结
以上所述是小编给大家介绍的一文彻底解决HTML5页面中长按保存图片功能,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
相关内容
- 使用html5 canvas绘制圆环动效HTML5实现的3D立体圆环旋转动画效果源码
- H5最强接口之canvas实现动态图形功能调用HTML5的Canvas API绘制图形的快速入门指南深入解析HTML5 Canvas控制图形矩阵变换的方法实例讲解利用HTML5 Canvas API操作图形旋转的方法HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvahtml5的画布canvas——画出弧线、旋转的图形实例代码+效果图html5-Canvas可以在web中绘制各种图形
- 如何在Canvas中添加事件的方法示例如何在Canvas上的图形/图像绑定事件监听的实现html5中监听canvas内部元素点击事件的三种方法详解Canvas事件绑定HTML5 Canvas的事件处理介绍一个不错的HTML5 Canvas多层点击事件监听实例HTML5 Canvas鼠标与键盘事件demo示例详解如何在Canvas中添加事件的方法
- HTML5新增form控件和表单属性实例代码详解html5实现点击弹出图片功能html5 录制mp3音频支持采样率和比特率设置html5表单的required属性使用html5调用摄像头实例代码HTML5页面音频自动播放的实现方式Html5大屏数据可视化开发的实现html实现弹窗的实例HTML5来实现本地文件读取和写入的实现方法HTML 罗盘式时钟的实现HTML5简单实现添加背景音乐的几种方法
- Html5 滚动穿透的方法html5实现带视差的轮播图片滚动切换效果源码Html5移动端获奖无缝滚动动画实现示例在线html5拼接轨道滚动钢珠游戏解决HTML5中滚动到底部的事件问题
- 前端实现打印图像功能html2canvas生成清晰的图片实现打印的示例代码html2 canvas生成清晰的图片实现打印功能一个不错的html 打印代码支持翻页CSS2 打印属性让打印HTML文档不出问题将XHTML CSS页面转换为打印机页面将XHTML CSS页面转换为打印机页面html 打印相关操作与实现详解
- 保卫萝卜2 第11关 金萝卜图文攻略_手机游戏_游戏攻略_
- 保卫萝卜2 第12关 金萝卜图文攻略_手机游戏_游戏攻略_
- 天天酷跑新版本叉叉助手刷分不清零 每局2000金币详细图文攻略_手机游戏_游戏攻略_
- 天天酷跑刷分刷金币被清零解决方法 刷分刷金币安全分数是多少_手机游戏_游戏攻略_
