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

首頁 > 開發 > HTML5 > 正文

一文徹底解決HTML5頁面中長按保存圖片功能

2024-09-05 07:22:54
字體:
來源:轉載
供稿:網友

本文詳細介紹了如何在H5中實現長按保存圖片的功能。

長按保存圖片是現在一些宣傳頁H5中很常見的需求,但是js沒有這樣的能力,所以要么借助android或ios的原生能力,要么用canvas自己畫一個(截屏),相比較原生成本太高,且必須依賴于app,相對于流傳性很廣且跨平臺的H5來說不合時宜,所以 canvas 成為我們常用的手段。

下面是詳細的步驟:

1. html2canvas截屏

保存的圖片節點最好是img標簽: 想要截屏的節點最好是img標簽的圖片,經測試如果是 background-image 會有點模糊,需要特別注意下。

npm i html2canvas --saveimport html2canvas from 'html2canvas';// 想要保存的圖片節點const dom = document.querySelector('img');// 創建一個新的canvasconst 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);  }}// 添加生成的圖片到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); // 長按時間超過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頁面中長按保存圖片功能,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲最大av网| 亚洲男人天堂网| 久久国产精品免费视频| 国产欧美在线观看| 国产精品r级在线| 久久综合国产精品台湾中文娱乐网| 欧美精品免费看| 欧美精品www在线观看| 国产成人精品一区| 中文字幕欧美日韩精品| 国产成人欧美在线观看| 91精品国产免费久久久久久| 色婷婷亚洲mv天堂mv在影片| 国产狼人综合免费视频| 欧美国产日韩精品| 久久夜精品va视频免费观看| 欧美极品在线视频| 日韩欧美aⅴ综合网站发布| 日韩精品极品视频| 日韩欧美福利视频| 动漫精品一区二区| 欧美在线视频导航| 精品偷拍各种wc美女嘘嘘| 懂色av中文一区二区三区天美| 日韩一二三在线视频播| 红桃av永久久久| 亚洲高清一二三区| 久久777国产线看观看精品| 91精品视频在线免费观看| 欧美激情一区二区三区久久久| 91视频免费在线| 亚洲天堂成人在线| 97久久精品人人澡人人爽缅北| 国产综合久久久久久| 久久最新资源网| 亚洲xxxxx性| 久久99久久99精品中文字幕| 韩日精品中文字幕| 亚洲综合一区二区不卡| 精品亚洲夜色av98在线观看| 久久精品国产亚洲精品2020| 久久影视三级福利片| 亚洲欧洲在线视频| 亚洲国产精品999| 日韩精品在线观看一区二区| 日韩电影中文字幕在线观看| 亚洲精品久久在线| 精品日韩美女的视频高清| 日韩禁在线播放| 日韩成人在线免费观看| 91久久精品久久国产性色也91| 国产精品免费一区二区三区都可以| 欧美成人午夜免费视在线看片| 久久影院模特热| 自拍偷拍亚洲在线| 亚洲精品美女在线观看| 中文字幕av一区中文字幕天堂| 国产91对白在线播放| 亚洲永久在线观看| 久久中文久久字幕| 成人福利视频在线观看| 中文字幕日韩欧美| 欧美最猛性xxxxx(亚洲精品)| 欧美精品在线免费播放| 亚洲国产成人在线视频| 亚洲亚裔videos黑人hd| 日韩人体视频一二区| 日韩精品在线视频观看| 日韩精品视频观看| 久久久久久久久久久91| 国产91精品久久久久久| 97视频色精品| 亚洲精品福利在线| 日韩有码片在线观看| 精品视频在线播放色网色视频| 亚洲欧美激情另类校园| 成人中文字幕在线观看| xxxxx成人.com| 久久久国产在线视频| 91精品视频网站| 97精品在线视频| 欧美一区二区大胆人体摄影专业网站| 色综合影院在线| 97成人精品视频在线观看| 亚洲成人久久电影| 亚洲欧美日韩精品久久亚洲区| 91视频8mav| 国产亚洲免费的视频看| 国产日韩在线观看av| 黄网站色欧美视频| 国内精品视频一区| 黑人狂躁日本妞一区二区三区| 欧美成人剧情片在线观看| 亚洲欧美激情精品一区二区| 97成人精品视频在线观看| 久久免费国产精品1| 亚洲天堂男人的天堂| 国产精品久久色| 精品福利免费观看| 国产精品久久久久久久久久久不卡| 成人激情电影一区二区| 欧美一性一乱一交一视频| 久久久久成人精品| 91在线高清免费观看| 久99九色视频在线观看| 国产精品无av码在线观看| 日韩免费高清在线观看| 国产精品aaa| 中文字幕日韩在线播放| 国产精品爽爽爽| 中文字幕欧美精品日韩中文字幕| 欧美激情中文字幕在线| 色综久久综合桃花网| 69久久夜色精品国产69| 一二美女精品欧洲| 欧美大片va欧美在线播放| 国产亚洲欧洲高清| 国产成人精品网站| 亚洲91精品在线观看| 国产日韩在线看| 中文字幕日韩专区| 国产精品久久久久77777| 视频在线观看99| 国产精品免费一区豆花| 成人性生交大片免费看视频直播| 日本亚洲欧美成人| 亚洲网站在线看| 亚洲永久免费观看| 国产美女久久精品| 91精品国产自产91精品| 国产日韩在线一区| 亚洲国产精品成人精品| 亚洲精品国产美女| 免费99精品国产自在在线| 精品国产乱码久久久久久虫虫漫画| 韩国精品美女www爽爽爽视频| 欧美视频国产精品| 日韩av电影手机在线观看| 日日狠狠久久偷偷四色综合免费| 国产成人亚洲综合91精品| 久久久久久久久爱| 57pao精品| 精品视频一区在线视频| 国产精品91在线观看| 一本色道久久88亚洲综合88| 亚洲男人天堂手机在线| 亚洲欧美成人网| 欧美国产日韩一区二区在线观看| 精品亚洲一区二区三区在线播放| 亚洲aa在线观看| 国产精品成人一区| 亚洲人精品午夜在线观看| 成人一区二区电影| 国模视频一区二区| 亚洲娇小xxxx欧美娇小| 中文字幕日韩av| 中文字幕成人精品久久不卡| 91av在线国产| 91日本在线视频| 亚洲伊人一本大道中文字幕| 欧美不卡视频一区发布| 久久人人97超碰精品888| 欧美激情亚洲国产| 日本精品久久中文字幕佐佐木|