当前位置: 首页 > news >正文

网站开通申请自助建站网站哪个好

网站开通申请,自助建站网站哪个好,网页制作可以用手机吗,营销型网站建设要求前言 使用 img 加载 GIF 图片,内容只会播放一次,之后就会自动暂停; 通过定时器在一段时间后重新加载图片的方式,会导致浏览器内存不断增大,并且可能会有闪烁、卡顿的问题; ImageDecoder WebCodecs API 的…

前言

使用 img 加载 GIF 图片,内容只会播放一次,之后就会自动暂停;

通过定时器在一段时间后重新加载图片的方式,会导致浏览器内存不断增大,并且可能会有闪烁、卡顿的问题;

ImageDecoder

WebCodecs API 的 ImageDecoder 接口提供了一种对编码图像数据进行解包和解码的方法。

在这里插入图片描述

ImageDecoder 只能在 localhost 或者 https 的 tab 页中获取到

代码

  1. canvas 设置 widthheight,和 GIF 图片尺寸一致
    <canvas width="1310" height="954"></canvas>
    
    或许你也可以通过一下方法动态设置尺寸;
    const img = new Image();
    img.src = '图片路径';
    img.onload = function() {var width = this.width;   // 图片宽度var height = this.height; // 图片高度console.log(`图片尺寸为:${width} x ${height}`);// some code... // 为canvas 设置 width、height
    };
    
  2. 通过 fetch 获取 GIF 图片资源,传入 url
    fetch(url).then((response) => decodeImage(response.body));
    
  3. decodeImage 方法对图片解码
    imageDecoder = new ImageDecoder({ data: imageByteStream, type: "image/gif" });
    imageDecoder.decode({ frameIndex: imageIndex }).then(renderImage);
    
  4. renderImage 渲染每一帧的图片
     function renderImage (result) {const canvas = document.querySelector("canvas");const canvasContext = canvas.getContext("2d");// 绘制图片 canvasContext.drawImage(result.image, 0, 0);const track = imageDecoder.tracks.selectedTrack;if (imageDecoder.complete) {if (track.frameCount === 1) return;// 如果序号超出了帧数,重置为 0if (imageIndex + 1 >= track.frameCount) imageIndex = 0;}// 解码下一帧图片并渲染imageDecoder.decode({ frameIndex: ++imageIndex }).then((nextResult) =>setTimeout(() => {renderImage(nextResult);}, result.image.duration / 1000) // 可以调整播放速度).catch((e) => {if (e instanceof RangeError) {imageIndex = 0;imageDecoder.decode({ frameIndex: imageIndex }).then(renderImage);} else {throw e;}});}
    

完整代码

<template><div><canvas width="1310" height="954"></canvas></div>
</template><script>
export default {mounted() {this.play(require("@/assets/images/animate.gif"));},play(url) {let imageDecoder = null;let imageIndex = 0;function renderImage (result) {const canvas = document.querySelector("canvas");const canvasContext = canvas.getContext("2d");canvasContext.drawImage(result.image, 0, 0);const track = imageDecoder.tracks.selectedTrack;if (imageDecoder.complete) {if (track.frameCount === 1) return;if (imageIndex + 1 >= track.frameCount) imageIndex = 0;}imageDecoder.decode({ frameIndex: ++imageIndex }).then((nextResult) =>setTimeout(() => {renderImage(nextResult);}, result.image.duration / 1000)).catch((e) => {if (e instanceof RangeError) {imageIndex = 0;imageDecoder.decode({ frameIndex: imageIndex }).then(renderImage);} else {throw e;}});}function decodeImage (imageByteStream) {imageDecoder = new ImageDecoder({ data: imageByteStream, type: "image/gif" });imageDecoder.decode({ frameIndex: imageIndex }).then(renderImage);}fetch(url).then((response) => decodeImage(response.body));}
}
</script>

相关链接

  • 纯前端如何实现Gif暂停、倍速播放
  • MDN ImageDecoder
http://www.tj-hxxt.cn/news/72921.html

相关文章:

  • 济南做网站比较好的怎么推广平台
  • 哪个网站做浏览器主页seo网站seo
  • 服装公司发展规划百度seo优
  • 我不想找之前做网站的续费新闻发布平台
  • 企业网站建设测试题seo推广如何做
  • 学生个人网站建设方案书框架栏目app推广怎么做
  • 旅游网站建设项目seo价格是多少
  • 如何进行网络推广市场定位湖南关键词优化品牌价格
  • 网站响应式好吗2021十大网络舆情案例
  • 微信公众号 手机网站开发1688关键词怎么优化
  • 个人营业执照网上申请入口官网草根seo视频大全
  • 临朐网站建设哪家好中国最新军事新闻
  • 设计培训网站建设免费发帖推广平台
  • 优质的南昌网站设计友情链接免费发布平台
  • 你做的网站可视区域多少如何做推广和引流
  • 舟山做网站百度小说官网
  • 网站制作学习网址大全qq浏览器
  • 网站建设公司 长春免费html网站制作成品
  • 做电影网站放抢先版怎么建造自己的网站
  • 如何做公司网站简介微信推广广告在哪里做
  • 外国做的中国动画视频网站关键词seo排名优化
  • 备案名称和网站logo不一致视频互联网推广选择隐迅推
  • 网站保护等级是企业必须做的么培训行业seo整站优化
  • 套模板做网站电话seo推广排名公司
  • 南京中小企业网站制作免费建站哪个网站最好
  • 南宁软件优化网站seo关键词布局技巧
  • 自备服务器做网站上海抖音推广
  • 东莞常平中学高中部广州seo排名优化服务
  • 重庆网站推广运营公司免费的精准引流软件
  • 触屏网站meta标签广告免费发布信息