婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 一文徹底解決HTML5頁面中長按保存圖片功能

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

熱門標簽:高德地圖標注商戶怎么標 電話機器人技術 智能電銷機器人被禁用了么 欣鼎電銷機器人 效果 惡搞電話機器人 黃石ai電銷機器人呼叫中心 地圖標注軟件打印出來 如何查看地圖標注 ok電銷機器人

本文詳細介紹了如何在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頁面中長按保存圖片功能》,本文關鍵詞  一文,徹底解決,HTML5,頁面,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《一文徹底解決HTML5頁面中長按保存圖片功能》相關的同類信息!
  • 本頁收集關于一文徹底解決HTML5頁面中長按保存圖片功能的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91免费观看国产| 欧美国产综合色视频| 欧美日韩综合色| 欧美一区二区视频在线观看2020| 欧美亚洲综合色| 中文字幕精品三区| 日本最新不卡在线| 在线观看亚洲精品| 亚洲精品久久久蜜桃| 国产在线观看一区二区| 日韩一区二区三区四区| 午夜视频一区二区| 成人h动漫精品一区二区| 久久日韩粉嫩一区二区三区| 亚洲线精品一区二区三区八戒| 9i在线看片成人免费| 久久人人爽爽爽人久久久| 国产麻豆9l精品三级站| 国产欧美精品一区aⅴ影院| av在线一区二区三区| 国产网红主播福利一区二区| 黄网站免费久久| 欧美激情综合五月色丁香小说| 国产很黄免费观看久久| 日韩欧美久久久| 国产麻豆视频一区| 日韩精品一区二区三区蜜臀| 国产一区二区三区香蕉| 久久精品在线免费观看| 波多野结衣欧美| 亚洲欧洲国产日韩| 欧美性videosxxxxx| 日韩av网站在线观看| 欧美色精品天天在线观看视频| 亚洲超碰精品一区二区| 国产蜜臀97一区二区三区 | 亚洲精品中文在线影院| 欧美久久久久久久久| 久久精品国产亚洲一区二区三区| 久久精品视频一区二区三区| 91在线无精精品入口| 日本亚洲最大的色成网站www| 中文字幕国产一区二区| 欧美日韩精品电影| 美国十次综合导航| 国产精品国产三级国产aⅴ原创| 色伊人久久综合中文字幕| 蜜臀精品一区二区三区在线观看 | gogo大胆日本视频一区| 亚洲成人免费电影| 久久精品夜色噜噜亚洲aⅴ| 欧美性猛片xxxx免费看久爱| 久久成人免费网站| 亚洲精品网站在线观看| 欧美大片顶级少妇| 欧美一区二区三区小说| 99在线热播精品免费| 视频一区中文字幕国产| 亚洲一区二区三区四区的| 国产欧美日韩在线看| 欧美xxxxx牲另类人与| 成人av在线播放网址| 久久精品免费看| 亚洲欧洲成人精品av97| 中文字幕精品一区二区精品绿巨人 | 国产麻豆视频一区| 亚洲成人动漫在线观看| 国产精品看片你懂得 | 91精品国产乱码久久蜜臀| 99re8在线精品视频免费播放| 国产精品一二三| 国产美女久久久久| 国产精品性做久久久久久| 久久国产综合精品| 日本色综合中文字幕| 香蕉成人伊视频在线观看| 午夜精品福利一区二区三区av | 亚洲欧美日韩国产中文在线| 国产精品美日韩| 国产午夜精品久久久久久免费视 | 日本欧洲一区二区| 亚洲精品久久久蜜桃| 亚洲精品成人少妇| 亚洲综合色视频| 欧美aa在线视频| 久久99蜜桃精品| 国产凹凸在线观看一区二区| 激情久久五月天| 高清视频一区二区| 色综合中文字幕| 在线视频你懂得一区| 4hu四虎永久在线影院成人| 日韩一区二区三区免费观看| 精品入口麻豆88视频| 久久综合网色—综合色88| 欧美精品一区二区三区高清aⅴ | 亚洲一区二区偷拍精品| 美女被吸乳得到大胸91| 亚洲国产岛国毛片在线| 在线不卡欧美精品一区二区三区| 黄色资源网久久资源365| 国产成a人无v码亚洲福利| 久久精品国产**网站演员| 亚洲欧美一区二区在线观看| 国产精品对白交换视频| 亚洲欧美一区二区三区国产精品| 亚洲精品五月天| 日本一不卡视频| 成人av电影观看| 日韩一级黄色大片| 亚洲天堂网中文字| 另类欧美日韩国产在线| 大白屁股一区二区视频| 欧美日韩一区二区在线观看视频| 国产天堂亚洲国产碰碰| 亚洲一区二区综合| 免费的国产精品| 欧美在线你懂得| 国产精品伦理一区二区| 日韩影院免费视频| 91丨porny丨首页| 制服丝袜亚洲精品中文字幕| 亚洲图片激情小说| 国产激情91久久精品导航| 欧美日韩一区二区三区不卡| 久久精品人人做| 午夜精品久久久久久久久| 不卡一区二区中文字幕| 7777精品伊人久久久大香线蕉的| 国产精品国产成人国产三级 | 久久久久久亚洲综合| 天堂影院一区二区| 欧美性大战久久久| 亚洲乱码国产乱码精品精98午夜| 丁香网亚洲国际| 久久久久久久免费视频了| 亚洲一区二区三区精品在线| 国产精品综合网| 精品久久久久久久久久久院品网| 伊人婷婷欧美激情| 成人高清视频免费观看| 久久久天堂av| 不卡视频一二三| 久久精品亚洲麻豆av一区二区| 精品一区二区三区视频| 日韩精品综合一本久道在线视频| 亚洲国产一区二区视频| 久久无码av三级| 亚洲bt欧美bt精品777| 色综合久久久久网| 亚洲一区二三区| 欧洲色大大久久| 亚洲九九爱视频| 欧美体内she精高潮| 亚洲一区在线电影| 欧美性大战久久久| 爽好久久久欧美精品| 91精品国产综合久久久久久漫画| 一区二区三区精品在线观看| 99久免费精品视频在线观看 | 日本一区二区动态图| 国产v综合v亚洲欧| 中文字幕 久热精品 视频在线| 国产在线视频一区二区| 欧美一区二区三区视频免费播放 | 高清视频一区二区| 国产亚洲va综合人人澡精品| 欧美激情一区二区三区不卡| 精品一区二区三区免费视频| 欧美高清视频www夜色资源网| 蓝色福利精品导航| 91精品国产综合久久精品| 国产精品乱码一区二区三区软件| 成人av免费在线观看| 久久一夜天堂av一区二区三区| 成人听书哪个软件好| 日韩欧美一二三| 国产精品白丝av| 欧美韩国日本不卡| 欧美日韩国产高清一区二区三区| 天天综合色天天| 久久九九全国免费| 国产成人免费视频| 午夜视频一区在线观看| 日韩一区二区精品| 国产精品香蕉一区二区三区| 东方欧美亚洲色图在线| 日韩黄色免费电影| 国产亚洲精品bt天堂精选| 一本大道久久a久久综合婷婷| 日韩av网站在线观看| 国产欧美在线观看一区| 欧美午夜一区二区三区| 国产激情视频一区二区三区欧美| 亚洲欧美在线aaa| 日韩女同互慰一区二区| 欧洲一区二区三区在线| 国产.欧美.日韩| 日韩av在线播放中文字幕| 亚洲一区二区三区中文字幕|