首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【愚公系列】《微信小程序与云开发从入门到实践》022-canvas(画布)组件及应用

一、canvas(画布)组件及应用尽管小程序开发框架中提供了丰富的组件,也支持进行自定义组件,但是这些组件无法百分之百满足所有的业务场景。...type 用来设置使用 canvas 的类型,包括:2d: 使用 Canvas 2D 进行绘制webgl: 使用 WebGL 进行绘制通过 id 来获取到 canvas 对象,通过操作 canvas 对象的渲染上下文对象就可以实现自定义绘制...属性名 类型 意义 type 字符串 设置 canvas 的类型,支持:- 2d:...页面上已经放置了一个 canvas 组件,该组件将其理解为一个空白的画布,画布上要渲染什么完全取决于我们的操作。...URL 最后的绘制操作是由绘图上下文对象完成的,根据 canvas 类型的不同

12010

探究 canvas 绘图中撤销(undo)功能的实现方式

好吧,drawImage 操作后对画布的改变根本不存在于绘制状态中。所以,使用 resolve/save 无法实现我们需要的 undo 功能。...模拟栈实现 既然原生的 API 保存绘制状态的栈无法满足需求,那么自然我们会想到自己模拟一个保存操作的栈。随之而来的问题就是:每次绘制操作之后,应该保存什么数据进栈?...前面说过,我们想要的是每步绘制操作之后能够保存当前画布的快照,如果能拿到快照数据,同时能利用快照数据恢复画布的话,问题也就迎刃而解了。...在执行 undo 操作时,从栈中取出最新保存的快照,然后重新绘制画布,即可实现撤销操作。实际测试也符合预期。 性能优化 上一节中我们很粗犷地实现了 canvas 的撤销功能。为什么说粗犷呢?...之前说过,我们通过对整个画布保存快照的方式来记录每个操作,换个角度思考,如果我们把每次绘制的动作保存到一个数组中,在每次执行撤销操作时,首先清空画布,然后重绘这个绘图动作数组,也可以实现撤销操作的功能。

2.1K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    超级玛丽HTML5源代码学习------(四)

    策略: 帧动画控制类Animation // Animation类.动画类 // cfg为Object类型的参数集, 其属性会覆盖Animation原型中定义的同名属性. function..., 类型:数组 frames : null, // 包含的Frame数目 frameCount : -1 , // 所使用的图片id(在ImgCache中存放的Key), 字符串类型....如何控制绘制的帧的内容、图片大小: 帧内容:首先是一个数组 frames[],其次是当前播放的帧 currentFrame : null , 初始化时控制操作: this.currentFrame.../res/bg.png" } ], startDemo ); } // Animation类.动画类 // cfg为Object类型的参数集, 其属性会覆盖Animation原型中定义的同名属性..., 类型:数组 frames : null, // 包含的Frame数目 frameCount : -1 , // 所使用的图片id(在ImgCache中存放的Key), 字符串类型.

    1.5K10

    【实战】Canvas实现图片上标注、缩放、移动和保存历史状态

    wrap) return // 清除上一次设置的监听,以防获取参数错误 wrap.onmousedown = null wrap.onmousedown = function (event...这里监听的是容器的鼠标事件,而不是canvas画布的事件,因为这样子我们可以再移动超过边界的时候也可以进行移动操作 ?...,并且更新当前状态对应的下标,还需要处理一下一些细节 总结一下: 鼠标抬起时,获取当前canvas画布状态 添加进状态列表中,并且更新状态下标 如果当前处于撤销状态,若使用画笔更新状态,则将当前的最为最新的状态...canvas.onmouseup = null } } 画布状态的撤销与恢复 ok,其实现在关于画布状态的更新,我们已经完成了。...wrap) return // 清除上一次设置的监听,以防获取参数错误 wrap.onmousedown = null wrap.onmousedown = function

    6.8K40

    canvas中的getContext()方法 以及 webgl中的getContext()方法

    }); contextType为’2d’时的context 属性: alpha(boolean):表示canvas是否包含一个alpha通道,设为false则浏览器知道背景永远不透明,能加速对于透明场景和图像的绘制...willReadFrequently(Boolean):表示是否计划有大量的回读操作,频繁调用getImageData()方法时能节省内存,仅Gecko内核浏览器支持。...contextType为‘WebGL ’时的context 属性: alpha:Boolean类型,指示画布是否包含alpha缓冲区。...antialias:Boolean类型,指示是否执行抗锯齿。 depth:Boolean类型,表示绘图缓冲区的深度缓冲区至少为16位。...('myCanvas'); var gl = canvas.getContext('webgl'); 获得画布的WebGL渲染上下文后,可以在其中进行渲染。

    5.8K30

    Canvas基础教程(章节1)

    Canvas 对象的属性 height 属性:   画布的高度。和一幅图像一样,这个属性可以指定为一个整数像素值或者是窗口高度的百分比。当这个值改变的时候,在该画布上已经完成的任何绘图都会擦除掉。...width 属性:   画布的宽度。和一幅图像一样,这个属性可以指定为一个整数像素值或者是窗口宽度的百分比。当这个值改变的时候,在该画布上已经完成的任何绘图都会擦除掉。默认值是 300。...标签通常需要指定一个id属性 (脚本中经常引用),width 和 height 属性定义的画布的大小。可以参考下面的代码。...Canvas 最神奇的地方在于不断添加,当你绘制好一个不错的图形时,让它频繁的克隆自身,这样你就得到了 N 个绘制好的图形,这也是开头动画的原理。...("2d"); var x = 0; var y = 0; var timer = null; //清除画布 再次绘制(循环操作) function draw(

    1.2K51

    JavaScript 编程精解 中文第三版 十七、在画布上绘图

    你可以通过设置width与height属性来确定画布尺寸(单位为像素)。 新的画布是空的,意味着它是完全透明的,看起来就像文档中的空白区域一样。 标签允许多种不同风格的绘图。...下例创建了一个独立的元素,并且加载了一张图像文件。但我们无法马上使用该图片进行绘制,因为浏览器可能还没有完成图片的获取操作。...首先,我们需要将当前函数调用的所有图形变换信息保存起来。接着,函数完成其工作,并添加更多的变换。最后我们恢复之前保存的变换状态。 2D 画布上下文的save与restore方法执行这个变换管理。...最后,该对象会保存一个filpPlayer属性,确保即便玩家站立不动时,它面朝的方向也会与上次移动所面向的方向一致。...我们首先检查它的类型,来找到与正确的子画面的偏移值。

    3.8K30

    Canvas 从进阶到退学

    注意:平移 translate() 要写在 “绘制操作(本例是 fillRect)” 之前才有效。 如果在使用 translate 的前后都有渲染操作,画布会多次渲染,并不会自动清屏。...上图效果是 canvas 的默认效果,所以在执行 translate 之前可以执行 “清屏操作”。...当旋转角度小于 0 时,画布逆时针旋转;反之顺时针旋转。...前面讲到,通过 getImageData() 获取的是一个数组类型的数据,每4个元素代表1个像素,就是rgba,而 a 表示透明通道,所以只需修改每组像素的最后1个元素的值,就能修改图片的不透明度。...在 canvas 中,和阴影相关的属性主要有以下4个: shadowOffsetX: 设置或返回阴影与形状的水平距离。默认值是0。大于0时向正方向偏移。

    2.1K21

    媒体数据获取与播放

    使用到摄像头、麦克风时浏览器就会对用户提示并希望得到用户授权。...,要使用 srcObject 属性,这个属性是HTMLMediaElement 类的其中一员,所以我们在 TypeScript 编写代码的时候在泛型约束时指定了它: const video = ref 复制代码 截取视频流输入到画布:      在进行播放摄像头数据的过程中我们可以截取其中的一个画面输出到画布中...,这个案例工作前需要正常得到摄像头返回的媒体数据流:      因为我们要得到 video 标签的一个宽高来设置我们的画布尺寸,所以在泛型约束的时候我们增加一个HTMLVideoElement 类型约束...结语:      通过上面 4 个场景用例我们熟悉了在浏览器中通过规范的 API 来实现媒体数据的读取与播放,大大节省了音视频在 web 端开发的难度,明天继续学!

    97620

    H5学习之路之初识canvas,了解下?

    (i,0); cs.lineTo(i,400); } cs.stroke();//执行连接两点直线的方法 效果是这样的: ?...线条样式 属性 描述 lineCap 设置或返回线条的结束端点样式。 lineJoin 设置或返回两条线相交时,所创建的拐角类型。 lineWidth 设置或返回当前的线条宽度。...文本 属性 描述 font 设置或返回文本内容的当前字体属性。 textAlign 设置或返回文本内容的当前对齐方式。 textBaseline 设置或返回在绘制文本时使用的当前文本基线。...图像绘制 方法 描述 drawImage() 向画布上绘制图像、画布或视频。 像素操作 属性 描述 width 返回 ImageData 对象的宽度。...createEvent() 创建新的 Event 对象 getContext() 获得用于在画布上绘图的对象 toDataURL() 导出在 canvas 元素上绘制的图像

    1.1K20

    手把手教你利用JS给图片打马赛克

    ,该对象提供了用于在画布上绘图的方法和属性 本手册提供完整的 getContext("2d") 对象属性和方法,可用于在画布上绘制文本、线条、矩形、圆形等等 标记和 SVG 以及 VML 之间的差异:...指定了您想要在画布上绘制的类型。...0-255; 0 是透明的,255 是完全可见的) color/alpha 以数组形式存在,并存储于 ImageData 对象的 data 属性中 var imgData=context.getImageData...let ctx = canvas.getContext("2d"); //4.获得该画布的内容 canvas.setAttribute('width', width) //...没错,既然我们要在 canvas 上进行马赛克操作,那我们必然要给 canvas 元素添加这两个事件 考虑到我们创建 canvas 的过程复杂了一点,我们做一个模块封装吧!

    1.5K20

    HTML5中Canvas元素的使用总结 原

    HTML5中Canvas元素的使用总结     Canvas提供了开发者自定义绘图的接口,我们可以公国getContext()函数来获取绘图上下文进行绘制操作,这个函数中可以传入两个参数,其中第1个参数设置绘图上下文的类型...,想要在裁剪区域外绘制时使用restore函数来还原绘图上下文。...,因为图片的加载是需要时间的,直接渲染会无法获取图像数据。...3.绘制属性的设置     在绘制过程中,开发者可以对绘制的线条颜色,填充颜色,风格,阴影等进行设置。...4.进行画布转换     画布也可以进行一些简单的变换操作,例如旋转,缩放等等。需要注意,对画布的操作不会影响到已经绘制到画布上的内容,之后绘制的内容会受到影响。

    1.8K10

    Canvas两点连线及多点连线

    "); //简单地检测当前浏览器是否支持Canvas对象,以免在一些不支持html5的浏览器中提示语法错误 if(canvas.getContext){ //获取对应的CanvasRenderingContext2D...对象(画笔) var ctx = canvas.getContext("2d"); //注意,Canvas的坐标系是:Canvas画布的左上角为原点(0,0),向右为横坐标,向下为纵坐标,单位是像素..."); //简单地检测当前浏览器是否支持Canvas对象,以免在一些不支持html5的浏览器中提示语法错误 if(canvas.getContext){ //获取对应的CanvasRenderingContext2D...("myCanvas"); //简单地检测当前浏览器是否支持Canvas对象,以免在一些不支持html5的浏览器中提示语法错误 if(canvas.getContext){ //获取对应的CanvasRenderingContext2D...如果不这样做,对于绘制单个图形可能没什么影响,但是在绘制多个图形时(例如上面示例的两条直线),将会导致路径绘制或者颜色填充等操作出现任何意料之外的结果。

    9.4K20

    【javascript】谈谈HTML5: Web-Worker、canvas、indexedDB、拖拽事件

    ; //通过getContext()取得关键的上下文对象,2d表示画布是“平面”的 绘制基本形状 下面展现的是上下文对象的一些绘制图形的方法(它们都可以被ctx调用) fillRect(x, y, width...,并返回其base64编码格式的数据,这在保存图片的时候非常有用 toDataURL接受两个参数:图片类型和质量参数 canvas.toDataURL(图片类型,质量参数) canvas.toDataURL...,而indexedDB使得在离线的时候读取数据成为了可能。...,则打开已存在的那个数据库 需要说明的是, indexedDB里面绝大多数操作都是异步的, 上述的indexedDB.open并不会立即创建一个数据库, 你需要在异步的回调里面判断数据库是否创建成功,并对可能出现的错误做判断和处理...在操作期间,会触发一系列的拖放类型的事件 其中我们主要关心的事件有三个: 1. ondragstart 发生在可拖拽(draggable)的元素上, 在元素被拖动的时候调用 2. ondragover

    3.1K30
    领券