关于canvas插入gif动图的替代方案

前言:目前canvas是不支持插入gif动图的,但是有些业务要求开发人员可以将gif动图插入到canvas中并进行一系列的操作(移动,缩放,旋转),本人也在网上找了一圈,也没有什么有效的方式,基本都是拆解gif并且进行遍历切换来实现,我担心这样会大量的占用本地内存,导致卡顿,所以为了实现这个功能,我选择了一个折中方案:使用div+img标签的方式代替gif层的画板

一、结构解析
这里解析的是我自己写的画板插入图片的逻辑和结构,以便其他开发者可以参考和理解
我自己使用的canvas在插入图片时,会重新创建一个canvas,让这个canvas和之前的canvas重叠(相对定位即可),且这个新的canvas的层级(z-index)在其他canvas之上,这样对我插入的图片可以单独控制,不影响到其他画板上的内容,如果图片遮挡了必须要显示的内容,则只需要把图片层的canvas的层级调整到必要显示内容的层级之下

二、gif动图插入
因为canvas插入gif动图后会变成静态图,所以这里直接在插入gif动图时,会创建一个div,将div的尺寸设置成和普通的canvas相同,并且也重叠在canvas之上,这样我们可以在div中插入一个img标签,img标签中放入gif图片即可
img可以选择提前加载好,放在公共变量中可以随时取用:

var imageObj = new Image();
imageObj.onload = function () {
	console.log("该图片加载成功");
}
imageObj.onerror = function () {
    console.log("该图片加载失败");
}
imageObj.src = url;//url是图片链接

大概结构是这样的:

<div>
    <canvas style="z-index: 1; position: absolute; width: 1080px; height: 540px"></canvas>
    <!-- 这里是通过js插入的动图 -->
    <div style="z-index: 2; position: absolute; width: 1080px; height: 540px">
        <img style="position: absolute;" src="xxx.gif" />
    </div>
</div>

这样在视觉上跟canvas是一样的,只是换了一个比较简单的实现方式
至于动图大小、缩放、旋转的控制,直接在img上进行样式修改就行了

最后:我就不给完整代码了,开发者总得自己动手写点东西,有了思路,距离实现功能已经不远了!!!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值