官网

http://fabricjs.com/ 一个canvas框架
项目地址

效果

代码

<template><div class="home"><p><label>Pattern left offset</label><input type="range" min="0" max="500" value="0" id="img-offset-x"></p><canvas id="canvas" width="1565" height="929"></canvas></div>
</template><script setup>
import {onMounted} from "vue";let canvas, rect, patternSourceCanvas, pattern;fabric.Sprite = fabric.util.createClass(fabric.Image, {type: 'sprite',spriteWidth:  50,spriteHeight: 72,spriteIndex: 0,frameTime: 100,initialize: function(element, options) {options || (options = { });options.width = this.spriteWidth;options.height = this.spriteHeight;this.callSuper('initialize', element, options);this.createTmpCanvas();this.createSpriteImages();},createTmpCanvas: function() {this.tmpCanvasEl = fabric.util.createCanvasElement();this.tmpCanvasEl.width = this.spriteWidth || this.width;this.tmpCanvasEl.height = this.spriteHeight || this.height;},createSpriteImages: function() {this.spriteImages = [ ];var steps = this._element.width / this.spriteWidth;for (var i = 0; i < steps; i++) {this.createSpriteImage(i);}},createSpriteImage: function(i) {var tmpCtx = this.tmpCanvasEl.getContext('2d');tmpCtx.clearRect(0, 0, this.tmpCanvasEl.width, this.tmpCanvasEl.height);tmpCtx.drawImage(this._element, -i * this.spriteWidth, 0);var dataURL = this.tmpCanvasEl.toDataURL('image/png');var tmpImg = fabric.util.createImage();tmpImg.src = dataURL;this.spriteImages.push(tmpImg);},_render: function(ctx) {ctx.drawImage(this.spriteImages[this.spriteIndex],-this.width / 2,-this.height / 2);},play: function() {var _this = this;this.animInterval = setInterval(function() {_this.onPlay && _this.onPlay();_this.dirty = true;_this.spriteIndex++;if (_this.spriteIndex === _this.spriteImages.length) {_this.spriteIndex = 0;}}, this.frameTime);},stop: function() {clearInterval(this.animInterval);}
});fabric.Sprite.fromURL = function(url, callback, imgOptions) {fabric.util.loadImage(url, function(img) {callback(new fabric.Sprite(img, imgOptions));});
};fabric.Sprite.async = true;function init() {canvas = new fabric.Canvas('canvas');rect = new fabric.Rect({top: 100,left: 100,width: 1565,height: 50, objectCaching: false,});canvas.add(rect);fabric.Image.fromURL('/img/road2.jpg', function(oImg) {patternSourceCanvas = new fabric.StaticCanvas();patternSourceCanvas.add(oImg);patternSourceCanvas.renderAll();pattern = new fabric.Pattern({source: patternSourceCanvas.getElement(),repeat: 'repeat',});rect.set('fill', pattern);canvas.requestRenderAll();document.getElementById('img-offset-x').oninput = function () {pattern.offsetX = parseInt(this.value, 10);console.log(pattern.offsetX)canvas.requestRenderAll();};})let createSprite = () => {return function(sprite) {sprite.set({left: 500,top: 500,});canvas.add(sprite);sprite.scale(4).setCoords();canvas.requestRenderAll();setTimeout(function() {sprite.set('dirty', true);sprite.play();}, fabric.util.getRandomInt(1, 10) * 100);};}fabric.Sprite.fromURL('/img/fire.png', createSprite(), {spriteWidth: 1200/15,spriteHeight: 85,});}function animal () {if (pattern && patternSourceCanvas){pattern.offsetX = pattern.offsetX + 2;canvas.requestRenderAll();}requestAnimationFrame(animal)
}onMounted(() => {init()animal()
})</script><style lang="less">
.home {height: 100%;
}
</style>

canvas火焰动画、管线流动动画-Fabric.js相关推荐

  1. Fabric.js 删除元素(带过渡动画)

    本文简介 Fabric.js 提供了2个方法删除对象. 一个是 直接删除,另一个方法是 带过渡动画 删除元素(淡出动画). 本文重点讲 带过渡动画 删除元素的方法,还会讲到设置 过渡时长 .删除后的 ...

  2. Canvas实用库Fabric.js使用手册

    简介 什么是Fabric.js? Fabric.js是一个可以简化Canvas程序编写的库. Fabric.js为Canvas提供所缺少的对象模型, svg parser, 交互和一整套其他不可或缺的 ...

  3. vue 创建图片坐标点_利用vue+fabric.js获取图片坐标,并实现图片拖拽、旋转、拉伸等功能...

    什么是Fabric.js? Fabric.js是一个可以简化Canvas程序编写的库. Fabric.js为Canvas提供所缺少的对象模型, svg parser, 交互和一整套其他不可或缺的工具. ...

  4. echarts中国地图线性流动动画js特效

    下载地址 使用百度的图表插件echarts.js制作的中国地图线性流动动画特效,可以在网页制作中实现总公司到分公司业务展示.物流.路线等网页设计内容. dd:

  5. 【FFH】Canvas实现帧动画及封装(OpenHarmony JS UI)

    目录C Demo展示 实现思路 代码封装 canvas绘制图像 动画播放 代码调用 Demo展示 这里以Tom猫(多年前热门的移动端互动小游戏)为例: 实现思路 首先要了解帧动画播放的原理--正如我们 ...

  6. 五十个html js特效动画,html5 canvas酷炫的月食动画特效

    特效描述:html5 canvas 月食动画特效.html5月食动画 代码结构 1. 引入JS 2. HTML代码 varying vec3 vNormal; void main() { vNorma ...

  7. 强大的Canvas开源库Fabric.js简介与开发指南

    什么是Fabric.js? Fabric.js 是一个强大且简单的Javascript HTML5 Canvas库. 官网地址:http://fabricjs.com/ 为什么要使用Fabric.js ...

  8. HTML5 Canvas JavaScript库 Fabric.js 使用经验

    首先,表明我的态度:采用 Flash 才是最优方案,不建议使用 HTML 5 的 Canvas 做一些生产/工业级的网页应用. Flash的优势一是浏览器支持好,二是代码成熟稳定.而HTML5 的 C ...

  9. html5 canvas雨点打到窗玻璃动画

    html5 canvas雨点打到窗玻璃动画 HTML5下雨效果 效果预览:http://hovertree.com/texiao/html5/4.htm 以下是代码: 1 <!doctype h ...

最新文章

  1. iOS进阶之底层原理-锁、synchronized
  2. UEditor使用报错Cannot set property 'innerHTML' of undefined
  3. BZOJ 1188: [HNOI2007]分裂游戏(multi-nim)
  4. java程序大笨钟怎么打,L1-018.大笨鍾(Java)PAT團體程序設計天梯賽-練習集
  5. 计算机网络严楠,安徽工程大学
  6. MSDN宇宙版到货!
  7. libcare Hello World测试例
  8. 如何设置Windows 8开始画面中瓷贴最大行数
  9. 数据结构与算法 —— 动态数组
  10. Jquery事件委托之Safari
  11. js--属性和方法(私有/公有)
  12. Oracle Primavera P6EPPM Mobile/App 安卓移动端分享(长期更新)
  13. Repast Simphony 模型发布及使用
  14. led数字字体_led电视质量排行榜
  15. 内存颗粒位宽和容量_高手进阶,终极内存技术指南(1)
  16. html 让360浏览器兼容模式,360浏览器兼容模式怎么设置?360浏览器兼容模式设置方法介绍...
  17. springboot集成openoffice实现office转PDF在线预览
  18. Hive 核心原理(hive-3.1.2)(转载)
  19. “校长”潘淳:侠之大者,一蓑烟雨任平生
  20. 论文阅读|Pre-trained Models for Natural language Processing: A Survey

热门文章

  1. python在excel表里如何新增一列或者一行?新增之后,公式和合并单元格会怎样变化?
  2. 原型对接工作流!摹客iDoc全面支持Mockplus、Axure原型
  3. Java学习-就业方向
  4. 少儿零基础编程 设计制作游戏 动画全搞定视频教程
  5. 5.29:题目及答案解析
  6. matlab实现字符识别,字符识别 - MATLAB Simulink Example - MathWorks 中国
  7. html中图片鼠标滑过偏移,jQuery和css3鼠标滑过网格相邻图片浮动效果
  8. 魅族手机如何无ROOT激活Xposed框架的经验
  9. 苹果手机备忘录内容如何迁移到华为手机?
  10. eclispe转 idea 快捷键设置(包括文件搜索运用)修改插入和改写模式