每天一个前端小技巧——生成gif动图下载

每天一个前端小技巧——生成gif动图下载

动态热图的展现,分别展现某个时间段的热图时间变化,例如:最近一周七天内,每天的热图分布变化图;这个动态变化的图生成一个gif图提供下载是否可行?

实现方案:
1.可通过服务端生成对应gif,然后前端请求下载
2.前端自己实现生成gif图片,自行下载

采用方案:
前端实现方式,于是在网上找各种相关的几款组件调研,均有利弊,推荐两款好用并且稳定的组件:
1 html2canvas.js 官网:http://html2canvas.hertzen.com/

2 gif.js 官网:https://jnordberg.github.io/gif.js/

下面具体记录下方案2的实现过程,逻辑拆分为3步:

1.html元素生成base64位图片
2.生成的图片对象转化为gif动态图
3.下载gif图片

话不多说,直接上主要代码:

html2canvas有node包版本的

 

import html2canvas from 'html2canvas';

但gif.js暂未发现node包版本,可采用cdn方式引入

<script type="text/javascript" src="https://imgss.github.io/demo/gif/gif.js"></script>

js代码

import pic1 from './images/1.png'
 
document.getElementById('imgccc').src=pic1
 
//要转换为图片的dom对象
var element = document.querySelector('.real-map');
//要显示图片的img标签
var image = document.querySelector('#imgaaa');
var imageccc = document.querySelector('#imgccc');
 
var btn = document.querySelector('#btn');
 
btn.οnclick=()=>{
  
  html2canvas(element,{allowTaint: true}).then(function(canvas) {  
        
    var imageData = canvas.toDataURL(1);
    image.src = imageData;
 
    var arr=[
      image,
      imageccc
    ];
 
    setTimeout(function(){
 
        //调用gif对象方法
        var gif = new window.GIF({
          workers: 2,
          quality: 10,
          workerScript:'https://imgss.github.io/demo/gif/gif.worker.js'
        });
        
        //遍历图片对象
        arr.map(item=>{
          gif.addFrame(item, {delay: 1000});
        });
 
        gif.on('finished', function(blob) {
          
          //下载动作
          var el = document.createElement('a');
          el.href = URL.createObjectURL(blob);
          el.download = 'demo-name'; //设置下载文件名称
          document.body.appendChild(el);
          var evt = document.createEvent("MouseEvents");
          evt.initEvent("click", false, false);
          el.dispatchEvent(evt);
          document.body.removeChild(el);
 
        });
        
        gif.render();
 
    },1000)
    
  }); 
}

 

html代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <title></title>
</head>
<body>
 
    <!-- 用户生成图片的div区域,将付给imgaaa -->
    <div class="real-map">
        <div>
            这里是html的元素内容区域
        </div>
        <div>
            这里是html的元素内容区域2
        </div>
    </div>
 
    <img id="imgaaa" />
    <img id="imgccc" src="" />
 
    <button id="btn">点击生成</button>
    
    <script type="text/javascript" src="https://imgss.github.io/demo/gif/gif.js"></script>
</body>
</html>

css代码

.real-map{
    width:100px;
    height:100px;
    border:1px solid #ccc;
    line-height:24px;
}
#imgccc{
    background:#fff;
    width:100px;
    height:100px;
}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
等待gif动图进行下载是指在下载过程中耐心地等待动图完全下载到设备中的过程。通常,在下载页面点击gif动图后,会出现一个加载或下载的进度条,这表示动图正在从服务器传输到我们的设备上。 然而,由于网络速度或其他原因,有时候gif动图下载时间可能会比较长。在这种情况下,我们需要保持耐心,静静等待动图的完全下载。 在等待gif动图下载期间,我们可以做一些其他的事情来打发时间。比如,我们可以看一些其他的内容,读一篇文章,或者和朋友聊天等。这样,我们就能够在等待过程中充实自己,使等待时间不那么无聊。 当然,如果我们需要急需使用这个gif动图,我们可以尝试加快下载速度的方法,比如切换到更快的网络,或者通过优化设备的网络设置来提高下载速度。但是有时候即使我们尽力了,下载速度仍然会受到限制。 在等待期间,我们应该保持耐心,并且不要频繁地重复点击下载按钮,因为这可能会导致下载失败或更长的下载时间。相信时间进度条会逐渐完善并最终完成下载,我们就可以享受到想要的gif动图的乐趣了。 总之,等待gif动图进行下载一个需要耐心和等待的过程。我们可以利用这段时间做一些其他事情来打发时间,以免无聊。同时,我们也可以尝试优化下载速度的方法,但无论如何,我们都应该保持耐心,相信下载过程会顺利完成。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值