亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > HTML > 正文

一文徹底解決HTML5頁(yè)面中長(zhǎng)按保存圖片功能

2024-08-26 00:21:31
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文詳細(xì)介紹了如何在H5中實(shí)現(xiàn)長(zhǎng)按保存圖片的功能。

長(zhǎng)按保存圖片是現(xiàn)在一些宣傳頁(yè)H5中很常見(jiàn)的需求,但是js沒(méi)有這樣的能力,所以要么借助android或ios的原生能力,要么用canvas自己畫一個(gè)(截屏),相比較原生成本太高,且必須依賴于app,相對(duì)于流傳性很廣且跨平臺(tái)的H5來(lái)說(shuō)不合時(shí)宜,所以 canvas 成為我們常用的手段。

下面是詳細(xì)的步驟:

1. html2canvas截屏

保存的圖片節(jié)點(diǎn)最好是img標(biāo)簽: 想要截屏的節(jié)點(diǎn)最好是img標(biāo)簽的圖片,經(jīng)測(cè)試如果是 background-image 會(huì)有點(diǎn)模糊,需要特別注意下。

npm i html2canvas --saveimport html2canvas from 'html2canvas';// 想要保存的圖片節(jié)點(diǎn)const dom = document.querySelector('img');// 創(chuàng)建一個(gè)新的canvasconst Canvas = document.createElement('canvas');const width = document.body.offsetWidth;  // 可見(jiàn)屏幕的寬const height = document.body.offsetHeight;  // 可見(jiàn)屏幕的高const scale = window.devicePixelRadio;  // 設(shè)備的devicePixelRadio// 將Canvas畫布放大scale倍,然后放在小的屏幕里,解決模糊問(wèn)題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');  // 關(guān)閉抗鋸齒形  context.mozImageSmoothingEnabled = false;  context.webkitImageSmoothingEnabled = false;  context.msImageSmoothingEnabled = false;  context.imageSmoothingEnabled = false;  // canvas轉(zhuǎn)化為圖片  canvas2Image(canvas, canvas.width, canvas.height);});

2. canvas2Image轉(zhuǎn)化為圖片

一般情況下轉(zhuǎn)為jpeg格式就很不錯(cuò)了。

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');  // 可以根據(jù)需要更改格式  return img;}

3. 長(zhǎng)按保存圖片

先實(shí)現(xiàn)一個(gè)長(zhǎng)按的方法,長(zhǎng)按之后把生成的圖片append到body,透明浮在屏幕上。

// 封裝一個(gè)長(zhǎng)按方法longPress(fn) {  let timeout = 0;  const $this = this;  for (let i = 0; i < $this.length; i++) {    $this[i].addEventListener('touchstart', () => {      timeout = setTimeout(fn, 800); // 長(zhǎng)按時(shí)間超過(guò)800ms,則執(zhí)行傳入的方法     }, false);    $this[i].addEventListener('touchend', () => {      clearTimeout(timeout); // 長(zhǎng)按時(shí)間少于800ms,不會(huì)執(zhí)行傳入的方法    }, false);  }}// 添加生成的圖片到bodyconst 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); // 長(zhǎng)按時(shí)間超過(guò)800ms,則執(zhí)行傳入的方法     }, false);    $this[i].addEventListener('touchend', () => {      clearTimeout(timeout); // 長(zhǎng)按時(shí)間少于800ms,不會(huì)執(zhí)行傳入的方法    }, false);  }};$('img').longPress(() => {  saveImg();});saveImg() {  // 想要保存的圖片節(jié)點(diǎn)  const dom = document.querySelector('img');  // 創(chuàng)建一個(gè)新的canvas  const Canvas = document.createElement('canvas');  const width = document.body.offsetWidth;  // 可見(jiàn)屏幕的寬  const height = document.body.offsetHeight;  // 可見(jiàn)屏幕的高  const scale = window.devicePixelRatio;  // 設(shè)備的devicePixelRatio  // 將Canvas畫布放大scale倍,然后放在小的屏幕里,解決模糊問(wèn)題  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');    // 關(guān)閉抗鋸齒形    context.mozImageSmoothingEnabled = false;    context.webkitImageSmoothingEnabled = false;    context.msImageSmoothingEnabled = false;    context.imageSmoothingEnabled = false;    // canvas轉(zhuǎn)化為圖片    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');  // 可以根據(jù)需要更改格式  return img;}

剛開(kāi)始做的時(shí)候也是網(wǎng)上一堆文章亂看,不斷的試錯(cuò),最后愉快的實(shí)現(xiàn)了長(zhǎng)按保存圖片的功能,做完才發(fā)現(xiàn)也很簡(jiǎn)單哈,這篇文章完整的介紹了整個(gè)流程,拿走不謝!

總結(jié)

以上所述是小編給大家介紹的一文徹底解決HTML5頁(yè)面中長(zhǎng)按保存圖片功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到HTML教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
亚洲va国产天堂va久久en| 成人在线观看免费完整| 久久久久久久999精品视频| 欧美性猛交7777777| 亚洲欧美综合另类| www.男人天堂.com| 在线观看av黄网站永久| h网站免费在线观看| 精品国产区一区二区三区在线观看| h色视频在线观看| 日本视频www| 中文字幕在线免费看| 人人妻人人澡人人爽人人欧美一区| 日本免费在线视频| 国产成人精品一区二区在线小狼| 亚洲妇熟xxxx妇色黄| 91午夜视频在线观看| 人成网站在线观看| 一区二区三区视频在线免费观看| 91麻豆精品国产91久久综合| 日韩中文字幕在线免费观看| 免费观看特级毛片| 一区二区蜜桃| 国产九色精品| 天天做天天爱天天高潮| 日日夜夜人人| 亚洲第一成人在线视频| 精品在线一区二区| 国产一区二区高清在线| gogo亚洲高清大胆美女人体| 91视频最新地址| 久久麻豆一区二区| 最近2019好看的中文字幕免费| 依依成人在线视频| 快射av在线播放一区| 欧美激情xxxx性bbbb| 亚洲精品国产无码| 国产野外作爱视频播放| 成年人网站免费在线观看| 黄色一区二区在线| 国产91精品免费| 91精品国产91久久| 国产成人麻豆免费观看| 成人a免费在线看| 色综合久久精品亚洲国产| avove在线播放| 亚洲国产综合一区| 国产精品一区二区性色av| 日韩天堂在线观看| 国产wwwwxxxx| sm捆绑调教国产免费网站在线观看| 五月婷婷六月婷婷| 久久久精品午夜少妇| 欧洲一区二区在线观看| a级片在线免费观看| 精品第一国产综合精品aⅴ| 国产美女av| 国产拍精品一二三| 四虎wwwcom| 久久久精品视频在线| 最近2019好看的中文字幕免费| 亚洲自拍偷拍二区| 欧美日韩一区二区三区在线免费观看| 一本色道69色精品综合久久| 色就是色亚洲色图| 国产精品在线看| 欧美成人免费全部观看天天性色| 国产精品稀缺呦系列在线| 人人做人人爽| 欧美久久久久久久久久久久久| 天堂在线观看视频观看www| 91免费在线播放| 欧美在线free| 国产极品美女高潮无套嗷嗷叫酒店| 777久久久精品| 欧美成人精品不卡视频在线观看| 国内视频精品| 欧美成人禁片在线观看网址| 特级丰满少妇一级| 国产中文一区二区| 欧美成人在线免费观看| 国产伦精品一区二区三区精品视频| 久久艹中文字幕| 国产乱码精品一区二区三区不卡| 在线中文字幕第一区| 亚洲欧美久久久| 福利一区三区| 日韩一区二区欧美| 一道在线中文一区二区三区| xxx免费视频| 手机av免费观看| a级高清视频欧美日韩| 六月婷婷激情综合| 自拍偷拍福利视频| 91av在线视频观看| 亚洲天堂中文字幕在线观看| 很黄很污的视频网站| 999精品在线视频| 91精品国产综合久久婷婷香蕉| 日本成人免费在线| 国产网红主播福利一区二区| 亚洲免费中文字幕| 美女的胸无遮挡在线观看| 麻豆福利视频| 国产成人无码精品久久久性色| 中文字幕av高清在线观看| 300部国产真实乱| 顶级嫩模一区二区三区| 亚洲av无码一区二区三区观看| 久久精品第九区免费观看| 精品一区二区在线视频| 久久久久久久亚洲精品| 成人免费在线网址| 福利视频一区| 蜜臀久久99精品久久久无需会员| 国产成人精品综合网站| 亚洲超碰在线观看| 女厕盗摄一区二区三区| 欧美韩日一区二区三区| 久久精品国产欧美激情| 中文字幕亚洲国产| 在线中文字幕观看| 国产无遮挡又黄又爽免费软件| 亚洲最快最全在线视频| 香蕉久久久久久av成人| 久久激情中文| 偷拍自拍在线视频| 欧美性videos高清精品| 欧美日韩激情一区二区三区| 午夜午夜精品一区二区三区文| 一区二区 亚洲| 精精国产xxx在线视频app| 青草青青在线视频| 欧美日韩精品在线观看| 欧美精品 日韩| www.xxx亚洲| 懂色av蜜臀av粉嫩av分享吧最新章节| 日韩超碰人人爽人人做人人添| 亚洲精品aaa| 日本中文字幕久久看| 国产一区二区在线视频观看| 亚洲精品日韩久久| 日韩欧美一区二区三区视频| 国产精品入口日韩视频大尺度| 欧美日本精品在线| 爱爱永久免费视频| 免费成人在线观看视频| 中文字幕在线一| 国产欧美成人xxx视频| 国产二级片在线观看| 亚洲国产一区二区三区在线| 中文久久乱码一区二区| 77thz桃花论族在线观看| 中文字幕 人妻熟女| 亚洲视频中文字幕在线观看| 成人97在线观看视频| 日本久久精品电影| 不卡一卡2卡3卡4卡精品在| 日韩经典一区| 日产午夜精品一线二线三线| 日韩在线资源| 欧美精品久久99| 后入内射欧美99二区视频| 国产精品成人在线观看| 亚洲精品视频在线观看网站| 黄色成人在线视频| 国产一区二区精品| 搡老女人一区二区三区视频tv| 国产精品ⅴa在线观看h| 91精品国产色综合久久| 欧美一级二级三级乱码| 亚洲综合av在线播放| 天堂√在线观看一区二区| 好想男人揉我下面好多水| 中文在线a在线| 国产亚洲精品美女| 亚洲色图19p| 亚洲二区三区四区| 欧美撒尿777hd撒尿| 在线免费看黄色| 97成人精品区在线播放| 美女91在线看| 欧美日韩精品一区二区三区四区| 加勒比一区二区三区在线| 97视频在线看| 欧美日韩成人黄色| www.久久视频| 亚洲一区二区三区在线观看视频| 母乳一区在线观看| 久久久久美女| 先锋影音成人资源| 黄色成人在线网| 国际精品欧美精品| gogo高清免费视频| 视频一区在线| 99精品热视频只有精品10| 91小视频在线免费看| 国产精品一区免费视频| 欧美日韩日日夜夜| 欧美熟妇另类久久久久久不卡| 中文字幕日韩精品在线观看| 一区二区三区四区精品在线视频| 亚洲 欧美 日韩在线| 精品国自产在线观看| 147欧美人体大胆444| 日韩美女视频中文字幕| 夜夜嗨网站十八久久| 久久久久亚洲av片无码v| 亚洲人成色777777老人头| 私人影视中文字幕| 亚洲国产精品电影| 亚洲精品久久久久久久久久久久| 少妇高潮一区二区三区69| 午夜激情成人网| 久久www免费人成看片高清| 手机在线色视频| 精品国产一区二区三区四| 波多野结衣二区三区| 亚洲婷婷影院| 色黄视频在线| 91在线你懂得| 97久久夜色精品国产| 欧美日韩在线精品一区二区三区| 亚洲日本在线天堂| 国产欧美日韩在线观看| 国产麻豆剧传媒精品国产| 加勒比海盗1在线观看免费国语版| av在线dvd| 蜜桃视频在线观看一区二区| 国产成人羞羞电影网站在线观看| 日韩精品分区| 精品一区二区三区四| www.一区二区.com| 欧美一区二区视频在线播放| 如如影视在线观看经典| 久久午夜精品一区二区| 欧美色男人天堂| 在线播放evaelfie极品| 日韩在线观看你懂的| 国产精品一在线观看| 4438亚洲最大| 国产精品久久国产三级国电话系列| 91九色视频导航| 亚洲人成亚洲精品| 狠狠久久婷婷| 熟女俱乐部一区二区视频在线| 国产精品中文字幕一区二区三区| 美女被久久久| 麻豆视频在线观看| 国产精品国码视频| 国产精品区在线| 蜜桃精品一区二区三区| 国产精品亲子乱子伦xxxx裸| 亚洲国产激情一区二区三区| 青青草国产成人a∨下载安卓| 极品粉嫩小仙女高潮喷水久久| 丁香五精品蜜臀久久久久99网站| www.555国产精品免费| 激情五月综合| 成人拍拍拍免费视频网站| 在线视频免费观看一区| 四虎永久在线精品免费一区二区| 久久久国产精品久久久| 一区二区不卡在线| a级黄色一级片| 亚洲精品成人网| 日韩免费观看高清完整版在线观看| 久热99视频在线观看| 国产精品入口免费软件| 在线播放三级网站| lutube成人福利在线观看| 国产伦精品一区二区三区四区免费| 国产乱码精品一区二区三区中文| 国产精品福利影院| 欧美日韩午夜爽爽| 亚洲美女色播| 男人的天堂在线播放| 国产日韩影视精品| 91精品国产高清自在线| 3d动漫精品啪啪一区二区下载| 99精品视频在线| 亚洲欧洲成人| eeuss影院www在线观看| 婷婷成人综合网| 成人免费在线观看视频网站| 亚洲春色在线| 亚洲一线二线三线视频| 国产激情美女久久久久久吹潮| a√资源在线| 精品一二线国产| 天天干天天色天天干| 国产情侣自拍小视频| 日韩av在线中文| 91精品成人| 亚瑟一区二区三区四区| 国产精品欧美一区二区三区不卡| 一区二区三区四区av| 日本在线一区| www.中文字幕| 精品久久久久久久久久岛国gif| 久久综合九色综合97_久久久| 黄色免费av网站| 国产精品免费免费| 在线免费看a| 在线视频1卡二卡三卡| 91色中文字幕| 国产深夜精品福利| 精品国产亚洲一区二区三区| 日本免费一区二区三区最新| 欧美xxxxx在线视频| 国产卡1卡2卡三卡在线| 天天摸天天舔天天操| 久99九色视频在线观看| 亚洲一二区视频| 91精品国产aⅴ一区二区| 日韩va亚洲va欧洲va国产| 国产福利电影一区二区三区| jizz性欧美10| 国产毛片视频网站| 国产视频在线免费观看| 91蜜桃视频在线| 国产日韩欧美一区二区东京热| 91精品国产综合久久香蕉的特点| 国产人伦精品一区二区| 久久av影院| 国产精自产拍久久久久久蜜| 国产日本欧美一区| 久久久9999久久精品小说|