使用 canvas 开发的项目,滚轮缩放画布的需求应该不算少数,比如地图。 Fabric.js 也提供了缩放画布的功能,本文主要讲解设置画布大小的几种方法。 动手实现 在动手前先查查文档。...我把和本文相关的文档放在这 mouse:wheel:滚轮事件 getZoom:获取画布当前缩放级别 setZoom:设置画布缩放级别 zoomToPoint:设置画布缩放比例及缩放原点 其中 setZoom...-- 引入 Fabric.js --> ...getZoom 可以获取画布当前缩放级别,用 setZoom 设置一个新的缩放级别。 所以我在页面上再加2个按钮,一个放大,一个缩小。...zoomToPoint 可以理解为 setZoom 的增强版,第一个参数是原点坐标,本例传入鼠标当前所在的坐标;第二个参数是缩放级别。 代码仓库 ⭐Fabric 滚轮缩放画布
本文简介 点赞 + 关注 + 收藏 = 学会了 使用 fabric.js 创建出来的画布默认是不能拖拽移动的。...不过我们可以利用一些小技巧让画布具有被拖拽的能力,fabric.js 官网也提供了一个 demo ,但文档上并没有详细的讲解拖拽画布的实现原理。 本文就粗略分析一下这个原理。.../js/fabric.js"> // 创建画布 let canvas = new fabric.Canvas('c', { allowTouchScrolling...viewportTransform 是 fabric.js 在画布上的一个属性。...以上就是在 fabric.js 中拖拽画布的方法。 代码仓库 ⭐拖拽移动画布
本文主要聊聊: 在 fabric.js 中如何清空画布; 和原生 canvas 对比,fabric.js 到底有多方便; 销毁 fabrci.js 创建的画布; 把 canvas 元素也销毁掉; 原生...方法,可以直接清空画布。...使用 clear 方法只会清空画布上的内容,并不会销毁画布。 可以看到清空画布后,fabric.js 的默认操作还是在的(可以框选),这证明画布只是被清空了,并没有被销毁。...销毁 fabric 实例:dispose 除了使用 clear 方法清空画布外,fabric.js 还提供了另一个更强的方法:dispose dispose 方法可以把 fabric.js 创建出来的实例销毁掉...创建出来的实例,再用 remove 方法把画布干掉就行。
分析 要实现上图的效果,需要考虑2中情况: 【情况1】元素的左边和上边不能超出画布的左边和上边。 【情况2】元素的右边和下边不能超出画布的右边和下边。...这两句话看上去很像一句话,但其实真实情况是有点不一样的。 元素的坐标和画布的坐标,都是以左上角为原点。所以【情况1】只需考虑元素的 xy坐标 有没有超过画布的左边和上边。...要获取画布的边界,我在文档中找到 calcViewportBoundaries 方法。 要获取被操作图形的边界,文档也给出了 getBoundingRect 方法。...最后得出的公式: 【公式1】超出画布左边:图形左上方x坐标 < 画布左上方x坐标,将图形的 left 设置成画布左上方x坐标的值。...【公式2】超出画布上边:图形左上方y坐标 < 画布左上方y坐标,将图形的 top 设置成画布左上方y坐标的值。
本文简介 学习 Fabric.js,我的建议是看文档不如看 demo。 本文实现的功能:将元素拖进到画布中并生成对应的图形或图片。...解2:Fabric.js 创建元素可看 《Fabric.js 从入门到膨胀》的基础图形篇,要创建图片可以看 图片篇。 解3:缩放画布我在 《Fabric.js 缩放画布》 里讲解过。...解4:移动画布我在 《Fabric.js 拖拽平移画布》 里讲解过。 解5:画布的左上角不一定在body的左上角,也就是鼠标当前位置可能和画布对应的坐标不一样,需要通过加减法计算一下。...解6:Fabric.js 提供了一个方法可以将鼠标当前坐标转换为画布对应的真实坐标,这个方法叫 restorePointerVpt 。 动手 我分几个步骤慢慢实现上述功能。...但画布有可能拖拽和缩放,所以需要通过 Fabric.js 提供的 restorePointerVpt() 方法将坐标转换一下。 于是有了下面的代码。 // 省略部分代码......
Canvas里面牵扯两种坐标系:Canvas自己的坐标系、绘图坐标系,当Canvas画布被创建时,Canvas的坐标系就被创建了,并且此坐标系是固定不变的,就是(0,0)到Canvas的宽高,而我们使用...Canvas的平移,旋转等方法时实际上操作的是绘图坐标系 Canvas的坐标系 它就在View的左上角,做坐标原点往右是X轴正半轴,往下是Y轴的正半轴,有且只有一个,唯一不变 绘图坐标系 它不是唯一不变的...,它与Canvas的Matrix有关系,当Matrix发生改变的时候,绘图坐标系对应的进行改变,同时这个过程是不可逆的(save和restore方法来保存和还原变化操作),Matrix又是通过我们设置translate...、rotate、scale、skew来进行改变的 由于绘图坐标系中Matrix的改变是不可逆的,所以产生了状态栈和Layer栈,它们分别运用于save方法和saveLayer方法,使得绘图坐标系恢复到保存时的状态...时 更新到对应的图层和画布上 正因为save方法不会创建图层,所以当我们使用Xfermode,ColorFilter,Alpha时应当使用saveLayer(刮刮卡效果)
本文简介 点赞 + 关注 + 收藏 = 学会了 在 《Fabric.js 使用纯色遮挡画布(前景色)》 中讲到使用纯色的方式遮盖画布。...如果你的常见需要使用图片来遮盖的话,fabric.js 也提供了相应的属性来配置。 相比起使用纯色遮盖画布,使用图片会更复杂。 因为图片本身是有尺寸大小的,所以可能会遇到缩放画布、平移画布等操作。...canvas.isDragging = false }) 感觉这和 《Fabric.js 锁定背景图,不受缩放和拖拽的影响》 里讲到的有点像,对吧~ 所以当看到 fabric.js...的相关属性和方法名称里出现 Vpt ,大概率就和 视口 有关。...更灵活的操作方法 setOverlayImage 使用 setOverlayImage 支持更多配置。
使用js将图片拷贝进画布 //将图片对象转化为画布,返回画布 function ImageToCanvas(image) { var canvas = document.createElement("...image.width; canvas.height = image.height; canvas.getContext("2d").drawImage(image, 0, 0);//0, 0参数画布上的坐标点...,图片将会拷贝到这个地方 return canvas; } 使用js将画布转化为图片 //将画布转化为图片 function canvasToImage(canvas) { var image =...new Image(); image.src = canvas.toDataURL("image/png"); //在此处也可以使用js的appendChild()方法将此img加入html页面
本文简介 使用 Fabric.js 创建画布时,可以在参数里配置画布的宽高。 除了初始化时设置之外,Fabric.js 还提供了其他 api 供后期修改画布宽高。...本文列举了 Fabric.js 的3个 api 设置画布宽高。 这3个 api 虽然简单,但在实际开发中可能很重要。比如监听浏览器窗口缩放,动态调整画布的宽高。...如果想入门 Fabric.js 可以看 《Fabric.js从入门到膨胀》 环境说明 Chrome浏览器版本:96.0.4664.45 Fabric.js版本:4.6.0 我是在原生环境下开发的,同时也提供了一份...Vue3 环境下开发的代码(文末有链接)。.../460/fabric.min.js"> let canvas = null // 设置画布宽度 function setWidth(width) {
本文简介 点赞 + 关注 + 收藏 = 学会了 如果要覆盖 canvas 里的所有内容你会用什么方法? 清空画布内容? 直接移除 canvas 元素? 创建一个新元素放在 canvas 的上一层?...如果你的项目使用到 fabric.js ,可以直接使用 fabric.js 提供的方法去遮盖画布,而且用法非常简单。...,再通过 setBackgroundImage 方法设置画布背景图。...更灵活的方法 setOverlayColor 除了在创建画布时设置 overlayColor 外,还可以使用 setOverlayColor() 方法在某个时刻设置画布遮罩颜色。...代码仓库 ⭐ Fabric.js 使用纯色遮盖画布 ⭐ Fabric.js setOverlayColor
画布裁剪:矩形裁剪、圆角矩形裁剪、路径裁剪。 ---- 一、画布变换和状态 画布变换主要通过一个 4*4 的变换矩阵。其中transform方法是最核心的,也是最难用的。...不过另外四个方法是为了简便使用,对 transform 的封装。 注意: 画布的变换是持久性的,变换之后所有的绘制会在变换后的画布上进行。...有更巧妙的方法: 如果是相同或者对称的对象,可以通过缩放进行对称变化。...,这里比较重要的是矩形的五种构造方法 。...你可以根据不同的场景选用不同的构造方法,有时可以让计算变的简单。
商家推广是互联网重点关注的方向之一,现在也有很多产品、解决方案存在。但对于小商家来说,要不流程复杂、要不成本、门槛较高,这些产品都没有照顾到小商家身上,小商家依然使用低效的推广方法。...精益画布 [小商家版精益画布] 产品原型设计 经过对比分析,决定通过墨刀来进行产品原型设计,目前免费。...“解决方案”尤其热心); 你的任务并不只是提供解决方案,而是形成一套完整的商业模式; 对于大部分创业公司来说,怕只怕做出的东西根本无人想要;思考下面3个问题: 你的解决方案是否是客户想要的?...独特卖点的设计公式:直白清晰的头条=客户想要的结果+限定的时间期限+做不到怎么办; 海盗指标组: 获取 (用户怎么找到你?) 激活 (用户的第一印象极好吗?) 留客 (有没有回头客?)...专注+调研-速度:资源耗尽 可证伪的假设=具体并且可重复的动作可以导致预期的可评估的目标或结果 系统地解决风险:1.
---- 本文介绍 我使用 Fabric.js 的版本是 4.6.0。 这次要实现的效果是:在本地上传一张图片,然后渲染到 canvas 里(当做背景图)。...我会用 原生 的方法实现一次,然后再在 Vue3 + Element-plus 环境下实现一次。 最后聊聊我在真实项目中的做法。...如果你的业务中需要限制文件类型,只需在本案例基础上添加限制的方法就行了。 本文所有代码都在文末给出的仓库里。...image.png 实现逻辑和原生方法一样。 唯一不同的是本例用了 el-upload 这个组件。 我将图片文件转成 base64 再放进画布。...在正式项目中,你可能还要考虑到背景图的大小和画布大小不匹配问题。 你可以参考 《Fabric.js 从入门到膨胀》 中 “拉伸背景图” 这小节。
-- 同级目录下的index.js --> 同级目录下的index.js: // 同级目录的index.js...'#F00' : '#000'; 为了后续调用的方便,我们将绘制操作封装为一个方法: /** * 画布渲染矩形的工具函数 * @param ctx * @param rect */ function...() - Web API 接口参考 | MDN (mozilla.org) 完成方法封装以后,我们需要该方法的调用点,一个最直接的方式就是在鼠标移动事件处理的内部进行: // 监听鼠标移动 canvasEle.addEventListener...**也就是说,上面的(drawRect)调用,不应该和mousemove事件相关联,而是应该在一套独立的循环中去做: 那么,在JS中,我们可以有哪些循环调用方法的方式来完成我们图像的渲染呢?...(); // 递归 }) })(); 必要的画布清空 目前为止这份代码还有一个问题:我们一直在不断循环调用drawRect方法在指定位置绘制矩形,但是我们从来没有清空过画布,也就是说我们不断在一个位置画着矩形
theme: smarblue 文章简介 之前在 《p5.js 光速入门》 里粗略讲过一下如何使用 p5.js 创建画布。 这次要介绍几个 p5.js 提供的画布相关的方法。 创建画布时的相关配置。...创建画布 在 p5.js 里创建画布的方法叫 createCanvas,但其实如果你不使用该方法一样可以创建画布。...让画布绑定指定元素 使用前面提到的方法创建画布,p5.js 默认会帮我们把画布添加到 标签的最后面。如下图所示。...预览图的gif体积比较大,稍等一下~ 此时我们可以使用 p5.js 提供的 windowResized 方法监听浏览器缩放,然后通过 resizeCanvas(width, height) 方法修改画布尺寸...设置画布位置的方法是 position(x, y) ,有需要的工友自己试试吧~ 删除画布 在下一篇文章我会介绍如何使用 p5.js 创建视频元素,此时需要隐藏 canvas 元素,不然它会在页面占位。
今天我们用最朴实的摆地摊儿方式把商业画布解释一下 参考文献:《The One Tool Startups Need to Brainstorm, Test and Win》 个人对商业模式的理解是: 1...、必须能够盈利 2、必须能自我保护 3、不是一成不变,必须是可调整的 现在我们将摆地摊和商业画布相继结合起来(叙述过程中会“串场”) 商业画布—— 地摊场景——准备摆地摊卖童装 1、用户细分 以用户为中心...我们的渠道通路需要什么样的核心资源? 我们的用户关系需要什么样的核心资源? 收入来源需要什么样的核心资源? 地摊场景: 在哪儿进货?哪儿有更低价的拿货价质量还更好?...这个就是我们的商业画布设计到的几个点,如果产品设计过程中设计到商业模式的梳理,可以一一填写并结合自己的思路梳理下新启动产品的应有的商业模式。...更多的商业模式都是需要不断试错、不断积累中去调整,去合理的定位 所以我们回去说,商业模式必须是可调整的,而不是一成不变的。 全文结束,现在花个十来分钟思考下,作为产品经理的我们,商业画布又是什么呢?
前言 apply() 的作用有两个: 1. 改变 this 指向 2....将数组入参变为一般入参 刚开始看到 apply() 时,对它的用法非常模糊,而且不易理解,通过查找相关文章,才慢慢的明白它的妙用 2....person.fullName() 调用 this.firstName 和 this.lastName 这两个属性,this 指向 person,但它没有这两个属性 使用 apply() 方法可以改变...this 的指向,将 this 的指向改为 person1,所以 person.fullName() 方法就可以成功访问到 this.firstName 和 this.lastName 这两个属性的值了...注意,这里的第一个参数值为 null,也就是没有改变 this 的指向 Math.max.apply(null, [, , ])
在onReady 执行 <template> <view class=""> <canvas style="" canvas-id="m...
领取专属 10元无门槛券
手把手带您无忧上云