我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何在canvas中神通fabric.js插件

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何在canvas中神通fabric.js插件

这期内容当中小编将会给大家带来有关如何在canvas中神通fabric.js插件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

fabric.js是一个很好用的 canvas 操作插件,下面整理了一些平时项目中用到的知识点:

//1: 获得画布上的所有对象:var items = canvas.getObjects();//2: 设置画布上的某个对象为活动对象。canvas.setActiveObject(items[i]);//3:获得画布上的活动对象canvas.getActiveObject()//4:取消画布中的所有对象的选中状态。canvas.discardActiveObject();//5: 设置画布中的对象的某个属性值,比如第 0 个对象的 idvar items = canvas.getObjects();tems[0].id ="items_id0" 或 items[0].set("id","items_id0")//6:获得画布中对象的某个属性,比如 第0 个对象的 idvar items = canvas.getObjects();items[0].id;//或items[0].get("id");//7: 重新渲染一遍画布,当画布中的对象有变更,在最后显示的时候,需要执行一次该操作canvas.renderAll()//8: 清除画布中所有对象:canvas.clear();//9:清除画布中的活动对象: var t = canvas.getActiveObject(); t && canvas.remove(t);//10: 设置活动对象在画布中的层级var t = canvas.getActiveObject();canvas.sendBackwards(t) //向下跳一层canvas.sendToBack(t)  //向下跳底层:canvas.bringForward(t) //向上跳一层:canvas.bringToFront(t) //向上跳顶层://或者:t.sendBackwards();t.sendToBack();t.bringForward();t.bringToFront();//10:加载图片时图片缩放到指定的大小。fabric.Image.fromURL(image_class="lazy" data-src, function(oImg) {  oImg.set({    left:tmp_left,    top:tmp_top,    centeredScaling:true,    cornerSize: 7,    cornerColor: "#9cb8ee",    transparentCorners: false,  });  oImg.scaleToWidth(image_width);  oImg.scaleToHeight(image_height);  canvas.add(oImg).setActiveObject(oImg); });//11:当选择画布中的对象时,该对象不出现在顶层。canvas.preserveObjectStacking = true;// 12:为画布通过URL方式添加背景图片var bg_url = "http://www.xxxx.com/...../bg.png"      fabric.Image.fromURL( bg_url , function(oImg) {  oImg.set({  width: canvas_obj.width,   height: canvas_obj.height,  originX: 'left',   originY: 'top'  });  canvas_obj.setBackgroundImage(oImg, canvas_obj.renderAll.bind(canvas_obj));});//13: originx: originy:代表坐标系。

如何在canvas中神通fabric.js插件

//14: 画布对象居中设置:var t = canvas.getActiveObject();t.center();  //全部居中t.centerH();  //水平居中t.centerV();  //垂直居中t.setCoords(); //注:必须设coords以上设置才会有效。//15: 当对象移动时 限制对象的 不超出画布// canvas moving limit function objectMoving(e){  var obj = e.target;  if(obj.currentHeight > obj.canvas.height || obj.currentWidth > obj.canvas.width){      return;   }       obj.setCoords();        // top-left corner    if(obj.getBoundingRect().top < 0 || obj.getBoundingRect().left < 0){      obj.top = Math.max(obj.top, obj.top-obj.getBoundingRect().top);      obj.left = Math.max(obj.left, obj.left-obj.getBoundingRect().left);     }     // bot-right corner     if(obj.getBoundingRect().top+obj.getBoundingRect().height > obj.canvas.height      || obj.getBoundingRect().left+obj.getBoundingRect().width > obj.canvas.width){      obj.top = Math.min(obj.top, obj.canvas.height-obj.getBoundingRect().height+obj.top-obj.getBoundingRect().top);         obj.left = Math.min(obj.left, obj.canvas.width-obj.getBoundingRect().width+obj.left-obj.getBoundingRect().left);      }}//16:当画布对象放大时限制其操出边界://注意当创建对象到画布上时必须先加上: obj.saveState(); //在对象修改时方法里就可以调用了。 function objectModified (e) {  let obj = e.target;  let boundingRect = obj.getBoundingRect(true);  if (boundingRect.left < 0    || boundingRect.top < 0    || boundingRect.left + boundingRect.width > obj.canvas.getWidth()    || boundingRect.top + boundingRect.height > obj.canvas.getHeight()) {    obj.top = obj._stateProperties.top;    obj.left = obj._stateProperties.left;    obj.angle = obj._stateProperties.angle;    obj.scaleX = obj._stateProperties.scaleX;    obj.scaleY = obj._stateProperties.scaleY;    obj.setCoords();    obj.saveState();  }else{  obj.saveState();}  }//17:当生成json对象时,背景图片显示出来。fabric.Image.fromURL( bgImg, function(oImg) {   oImg.set({     width: 400,     height:400,     left:0,     top:0,     originX: 'left',     originY: 'top',     opacity:0   });   //当toObject方法时显示背景图片。   oImg.toObject = (function(toObject) {     return function() {      return fabric.util.object.extend(toObject.call(this), {        opacity:1      });     };  })(oImg.toObject);  canvas_obj.setBackgroundImage(oImg, canvas_obj.renderAll.bind(canvas_obj));  }, { crossOrigin: 'Anonymous' });//18:创建蒙版层//获取蒙版位置属性(非必要):var maskLayerTop  = parseInt($(this).attr("data-top"));var maskLayerLeft  = parseInt($(this).attr("data-left"));var maskLayerWidth = parseInt($(this).attr("data-width"));var maskLayerHeight = parseInt($(this).attr("data-height"));//创建蒙版var clipMask = new fabric.Rect({  originX: 'left',  originY: 'top',  left: maskLayerLeft,  top: maskLayerTop,  width: maskLayerWidth,  height: maskLayerHeight,  fill: 'rgba(0,0,0,0)',   strokeWidth:0,  selectable: false});  clipMask.set({  clipFor: 'pug'});canvas_obj.add(clipMask);                function degToRad(degrees) {  return degrees * (Math.PI / 180);}   function findByClipName(name){  return _(canvas_obj.getObjects()).where({    clipFor: name  }).first()}  canvas_obj.clipByName = function(ctx) {  this.setCoords();  var clipObj = findByClipName(this.clipName);  var scaleXTo1 = (1 / this.scaleX);  var scaleYTo1 = (1 / this.scaleY);  var skewXReverse = - this.skewX;  var skewYReverse = - this.skewY;  ctx.save();                    var ctxLeft = -( this.width / 2 ) + clipObj.strokeWidth;    var ctxTop = -( this.height / 2 ) + clipObj.strokeWidth;    var ctxWidth = clipObj.width - clipObj.strokeWidth;    var ctxHeight = clipObj.height - clipObj.strokeWidth;  ctx.translate( ctxLeft, ctxTop );  ctx.scale(scaleXTo1, scaleYTo1);  ctx.transform(1, skewXReverse, skewYReverse, 1, 0, 0);  ctx.rotate(degToRad(this.angle * -1));                    ctx.beginPath();                    ctx.rect(    clipObj.left - this.oCoords.tl.x,    clipObj.top - this.oCoords.tl.y,    clipObj.width,    clipObj.height  );  ctx.closePath();                    ctx.restore();} //调用的地方://文字层设置蒙版 var t = new fabric.Text("Your Text", {      id: first_level+"-text-input"+unique_id,      cornerSize: 7,      cornerColor: "#9cb8ee",      transparentCorners: false,      textAlign:"center",      clipName: 'pug',      clipTo: function(ctx) {       return _.bind(tmp_canvas_obj.clipByName, t)(ctx)       }});// 图片层设置蒙版:// add the forntimage to the canvasfabric.Image.fromURL(image_class="lazy" data-src, function(oImg) {  oImg.set({    id:first_level+"-image-input"+unique_id,    left:tmp_left,    top:tmp_top,    centeredScaling:true,    cornerSize: 7,    cornerColor: "#9cb8ee",    transparentCorners: false,    clipName: 'pug',    clipTo: function(ctx) {       return _.bind(tmp_canvas_obj.clipByName, oImg)(ctx)     }  });//19:生成的图片缩放到指定的尺寸。  oImg.scaleToWidth(image_width);  oImg.scaleToHeight(image_height);//20:to object 时添加 id属性。  oImg.toObject = (function(toObject) {       return function() {        return fabric.util.object.extend(toObject.call(this), {         id: this.id,        });       };  })(oImg.toObject);  oImg.id = first_level+"-image-input"+unique_id;                 oImg.saveState();  tmp_canvas_obj.add(oImg).setActiveObject(oImg);}, { crossOrigin: 'Anonymous' });tmp_canvas_obj.renderAll();

上述就是小编为大家分享的如何在canvas中神通fabric.js插件了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何在canvas中神通fabric.js插件

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何在canvas中神通fabric.js插件

这期内容当中小编将会给大家带来有关如何在canvas中神通fabric.js插件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。fabric.js是一个很好用的 canvas 操作插件,下面整理了一些平时项
2023-06-14

如何在IOS中使用Cordova插件

目录一、准备1:创建插件2:添加IOS平台3:创建package.json文件二、过程最后Cordova项目调用插件一、准备 插件功能:打开IOS相机 1:创建插件 plugman create --name [插件名称] --plugin
2022-05-23

如何在Eclipse中安装pydev插件

这篇文章主要介绍“如何在Eclipse中安装pydev插件”,在日常操作中,相信很多人在如何在Eclipse中安装pydev插件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何在Eclipse中安装pyde
2023-06-18

如何在eclipse中安装GitHub插件

近年来GitHub已成为开发者必备的版本控制工具之一。为了更好的将代码管理在GitHub上,我们需要将本地代码与GitHub进行集成,而eclipse IDE也是开发者们熟知的开发工具之一。因此,本文将会为您介绍如何在eclipse中安装G
2023-10-22

如何在IDEA中使用FindBugs插件

本篇文章为大家展示了如何在IDEA中使用FindBugs插件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。安装 安装完之后,重启studio,会发现左下角会出现findbugs的图标可以分析单个文件
2023-06-14

如何在Visual Studio中安装git插件

今天就跟大家聊聊有关如何在Visual Studio中安装git插件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在Visual Studio 中使用git——什么是Git(一)如果
2023-06-14

如何在canvas中使用环形倒计时组件

这篇文章将为大家详细讲解有关如何在canvas中使用环形倒计时组件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Canvas环形倒计时组件Canvas环形倒计时是基于Canvas实现的倒计时
2023-06-09

如何在Android应用中使用Jenkins插件

今天就跟大家聊聊有关如何在Android应用中使用Jenkins插件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、Jenkins插件功能介绍1、Jenkins任务列表图1、jen
2023-05-31

如何在html5中监听canvas内部元素点击事件

如何在html5中监听canvas内部元素点击事件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。像素法 像素检测法的思路是,将canvas中的多个图形(如果有多个的话)分别离屏
2023-06-09

如何在HTML5中使用video.js视频播放插件

本篇文章给大家分享的是有关如何在HTML5中使用video.js视频播放插件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。看下默认例子:controls表示控制条,prload
2023-06-09

如何在GitLab中集成第三方工具和插件

如何在GitLab中集成第三方工具和插件GitLab是一个开源的、用于管理远程代码仓库和项目的平台。它的强大之处不仅仅体现在代码管理上,还可以方便地与各种第三方工具和插件进行集成,进一步提升开发人员的工作效率。本篇文章将介绍如何在GitLa
2023-10-22

如何在laravel-admin中使用wang-editor富文本插件

本篇文章为大家展示了如何在laravel-admin中使用wang-editor富文本插件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。composer 添加“laravel-admin-ext/w
2023-06-15

如何在vue-cli 3中使用vue-bootstrap-datetimepicker日期插件

这期内容当中小编将会给大家带来有关如何在vue-cli 3中使用vue-bootstrap-datetimepicker日期插件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。首先,需要安装插件的依赖项,包
2023-06-06

在Linux系统中如何为Firefox安装最新版flash插件

这篇文章主要为大家展示了“在Linux系统中如何为Firefox安装最新版flash插件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“在Linux系统中如何为Firefox安装最新版flash插
2023-06-13

如何在Android应用中利用apk插件对内存进行释放

这期内容当中小编将会给大家带来有关如何在Android应用中利用apk插件对内存进行释放,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Android apk 插件启动内存释放问题插件中启动apk,一般情况
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录