Vue3、Vite使用 html2canvas 把Html生成canvas转成图片并保存,以及填坑记录

本文介绍了如何使用html2canvas插件生成海报,处理了iOS和微信环境下的下载限制,通过放大预览让用户手动保存。后续还解决了在某些环境下的兼容性问题,包括降级插件版本和自定义导出方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这两天接到新需求就是生成海报分享,生成的格式虽然是一样的但是自己一点点画显然是不符合我摸鱼人的性格,就找到了html2canvas插件,开始动工。

安装

npm install html2canvas --save

文档
options 的参数都在里面按照自己需求使用
https://allenchinese.github.io/html2canvas-docs-zh-cn/docs/html2canvas-configuration.html

使用

import html2canvas from 'html2canvas'

const shareBox = ref(null) //需要生成canvas的html
const saveImg = () => {
  showLoadingToast({
    duration: 0,
    forbidClick: true,
  });
  html2canvas(shareBox.value, {
    width: shareBox.value.offsetWidth,
    // height: shareBox.value.offsetHeight,
    scale: 2
  }).then(function (canvas) {
    canvas.toBlob((blob) => {
      if (blob) {
      	//这个是下载blob文件的方法
        downloadByBinary(blob, +new Date(), "image/png")
        showToast('保存成功!')
      } else {
        showToast('保存失败,请稍后重试!')
      }
    });
  })
}

填坑记录踩了一路 (我是做移动端H5 如果是pc 后面的坑可能遇不到)

填坑一
ios、微信环境用下载blob的方式不行 有拦截不支持下载。找个了优化的方案就是把图片放大预览让用户自己长按保存

const saveImg = () => {
  showLoadingToast({ //vant 的loding
    duration: 0,
    forbidClick: true,
  });
  html2canvas(shareBox.value, {
    width: shareBox.value.offsetWidth,
    // height: shareBox.value.offsetHeight,
    scale: 2
  }).then(function (canvas) {
    // 因为 移动端ios,微信环境 限制了自动下载所以生成预览图片用户自己长按保存
    // canvas.toBlob((blob) => {
    //   if (blob) {
    //     downloadByBinary(blob, +new Date(), "image/png")
    //     showToast('保存成功!')
    //   } else {
    //     showToast('保存失败,请稍后重试!')
    //   }
    // });
    const url = canvas.toDataURL("image/png")
    if (url) {
      closeToast() //vant 的loding
      showImagePreview([url])
      nextTick(() => {
        showToast('已为您生成图片,请长按保存!')
      })
    } else {
      closeToast() //vant 的loding
      nextTick(() => {
        showToast('保存失败,请稍后重试!')
      })
    }
  }).catch(res => {
    closeToast()
    nextTick(() => {
      showToast(res)
    })
  });
}

测试了一下 真不戳 然后新的问题出来了

填坑二 html2canvas 在IOS系统13.4以上失效
看到ios上迟迟不出来预览 也不走 then和catch方法 推测是插件本身除了问题 就开始百度
这个解决方案有两种一种是降版本
https://github.com/niklasvh/html2canvas/issues/2229

// 移除项目本身的插件
npm uninstall html2canvas

// 下载新的 (注意还需要把package.json版本号的“^”或者“~”删掉。直接写1.0.0-rc.4。锁版本才行)
npm install --save html2canvas@1.0.0-rc.4

另一个方法还是使用新版的rc.5版本 有大佬把堵塞的地方改好了
https://github.com/FEA-Dven/html2Canvas/blob/master/README.md

上面那个方法可以不过我更喜欢用新版没办法就是喜欢新的东西
然后我就把上面的插件引入进来了(我用的是vite构建工具)再导入的时候报错说没有这个方法的导出,我一看嗐:咱不如大佬直接改堵塞的地方咱能写个简单的小导出啊~~
在这里插入图片描述
就是红框里的写个默认导出

//页面上使用
import html2canvas from "../lib/html2canvas.js";

// 这里就截个方法的使用的 下面就跟上面填坑一 一样
(window.html2canvas || html2canvas)(shareBox.value, {
   width: shareBox.value.offsetWidth,
   // height: shareBox.value.offsetHeight,
   scale: 2
 })

然后大功告成、热泪盈眶、又混一天

<think>好的,我现在需要帮助用户解决在Vite + Vue3项目中使用vue3-video-player的问题。首先,我得确认用户的需求,他们可能想要在Vue3应用中集成一个视频播放器,而vue3-video-player是一个可能的选择。 首先,我应该回忆一下vue3-video-player的基本信息。它是一个基于Video.js的Vue3组件,支持自定义配置和多种视频格式。接下来,我需要确保用户正确安装和配置这个库。 第一步,安装依赖。用户需要使用npm或者yarn来安装vue3-video-player和video.js。记得要检查最新的版本号,可能需要查看npm的文档确认当前版本。比如,现在可能已经是2.0.0以上的版本了,但可能需要使用具体的命令,比如npm install vue3-video-player video.js --save。 接下来,在Vue3项目中引入组件。用户需要在main.js或main.ts中导入注册组件。这里可能需要使用createApp方法,然后使用use方法来注册插件。同时,还需要导入Video.js的CSS文件,确保样式正确。例如,在main.ts中添加import &#39;video.js/dist/video-js.css&#39;。 然后,在组件中使用vue3-video-player。用户需要在template里添加<video-player>标签,通过options传递配置。这时候,配置项如controls、autoplay、sources等都需要正确设置。需要提醒用户注意sources数组中的src和type是否正确,特别是视频格式的支持。 可能用户会遇到问题,比如视频无法播放,这时候需要检查路径是否正确,视频格式是否被浏览器支持,或者是否有跨域问题。另外,配置项是否正确传递,比如是否遗漏了某个选项,或者语法错误。 另外,自定义样式和扩展功能也是常见需求。可能需要覆盖Video.js的默认样式,或者使用事件监听,比如@play、@pause等来处理交互逻辑。这部分需要给出示例代码,展示如何绑定事件和方法。 最后,常见问题部分需要涵盖版本兼容性,比如Vue3vue3-video-player的版本是否匹配,以及如何引入其他插件如字幕或分辨率切换。同时,提示用户参考官方文档获取最新信息。 整个过程中,需要确保代码示例正确,特别是使用Vite时需要注意ES模块的导入方式,以及TypeScript的配置是否有额外步骤。比如,如果用户使用TypeScript,可能需要安装@types/video.js或者其他类型声明文件。 现在,整理这些步骤,确保结构清晰,逐步引导用户完成安装、配置和使用解决可能遇到的问题。同时,注意使用正确的LaTeX格式,虽然在这个回答中可能用不上数学公式,但需要遵守系统级指令中的格式要求,比如行内代码用反引号,代码块用三个反引号,正确标注语言类型。</think>在Vite + Vue3项目中使用`vue3-video-player`实现视频播放的步骤如下: --- ### 1. 安装依赖 ```bash npm install vue3-video-player video.js --save # 或 yarn add vue3-video-player video.js ``` --- ### 2. 全局注册组件 在`main.ts`中引入配置: ```typescript import { createApp } from &#39;vue&#39; import App from &#39;./App.vue&#39; import VideoPlayer from &#39;vue3-video-player&#39; import &#39;video.js/dist/video-js.css&#39; // 引入样式 const app = createApp(App) app.use(VideoPlayer) app.mount(&#39;#app&#39;) ``` --- ### 3. 在Vue组件中使用 ```vue <template> <div class="player-container"> <video-player :options="playerOptions" @ready="onPlayerReady" @play="onPlayerPlay" /> </div> </template> <script setup> import { ref } from &#39;vue&#39; const playerOptions = ref({ controls: true, // 显示控制条 autoplay: false, // 自动播放 fluid: true, // 自适应容器 sources: [{ src: &#39;/path/to/video.mp4&#39;, // 视频地址 type: &#39;video/mp4&#39; // 视频格式 }] }) const onPlayerReady = (player) => { console.log(&#39;播放器已初始化&#39;, player) } const onPlayerPlay = () => { console.log(&#39;视频开始播放&#39;) } </script> <style scoped> .player-container { max-width: 800px; margin: 0 auto; } </style> ``` --- ### 4. 高级配置 #### 自定义控件样式 ```javascript playerOptions.value = { controlBar: { volumePanel: { inline: false }, children: [ &#39;playToggle&#39;, &#39;volumePanel&#39;, &#39;currentTimeDisplay&#39;, &#39;progressControl&#39;, &#39;fullscreenToggle&#39; ] } } ``` #### 字幕支持 ```javascript playerOptions.value = { tracks: [{ kind: &#39;subtitles&#39;, src: &#39;/path/to/subtitles.vtt&#39;, srclang: &#39;en&#39;, label: &#39;English&#39;, default: true }] } ``` --- ### 常见问题解决 1. **视频无法加载** - 检查路径是否正确(public目录文件需使用绝对路径) - 验证视频格式支持性(MP4/HLS/DASH等需对应配置) - 处理跨域问题(需服务端配置CORS) 2. **样式异常** ```css /* 覆盖默认样式 */ .video-js { width: 100% !important; height: auto !important; aspect-ratio: 16/9; } ``` 3. **TypeScript支持** ```bash npm install @types/video.js --save-dev ``` --- ### 扩展功能 - 分辨率切换:通过`player.tech().src()`动态切换源 - 截图功能:利用Canvas实现 - 自定义皮肤:覆盖`video-js`的SCSS变量 建议参考官方文档:[vue3-video-player GitHub](https://github.com/surmon-china/vue-video-player) 和 [Video.js文档](https://docs.videojs.com/) 获取最新配置参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值