万圣节到了,写一个小例子了解一下canvas画图方法,canvas可以实现一些有趣的效果,动画实现。以一个简单的页面实现了解一下基础的画图方法。
原文链接

canvas可以实现一些有趣的效果,动画实现。以一个简单的页面实现了解一下基础的画图方法。

效果

万圣节快乐 ^_^

预备知识

let canvas = document.getElementById('canvas');
let context = canvas.getContext('2d');

## 开始路径

context.beginPath();

beginPath()方法在画布上开始一条绘制路径,或重置当前的路径。

移动路径

context.moveTo();

moveTo()方法把路径移动到画布中指定点,不创建线条。

添加线条

context.lineTo();

lineTo()方法添加一个新点,在画布中创建该点到指定点的线条。

画图drawImage


context.drawImage(image,x,y);

drawImage()方法可以在画布上绘制图像、画布或视频,也可以绘制图像的某些部分,增加/减少图像的尺寸。

获取像素数据

context.getImageData(x,y,width,height);

getImageData()方法可以获取画布imageData对象,该对象指定了矩形的像素数据。

在imageData对象中每个像素都存在rgba值,以数组形式存储在data属性中。

放回像素数据

context.putImageData(imageData,x,y);

putImageData()方法将获取的图像数据放回到画布上。

实现

html

<canvas id="canvas"></canvas>
<button id="click" class="switch">Click</button>

## css

html,
body,
canvas {width: 100%;height: 100%;margin: 0;
}.switch {position: absolute;top: 70%;right: 10%;width: 50px;height: 50px;border-radius: 50px;outline: none;cursor: pointer;animation: switch-animate alternate infinite ease 1s 0s;
}@keyframes switch-animate {from {box-shadow: 0 0 30px #ece9c5;}to {box-shadow: 0 0 100px #eae5a7;}
}

## js

(function () {class Halloween {constructor(id) {this.canvas = document.getElementById(id);this.ctx = this.canvas.getContext('2d');this.w = this.canvas.width;this.h = this.canvas.height;this.data = [];}//初始画布initDraw(img) {this.w = this.canvas.width = img.width;this.h = this.canvas.height = img.height;this.ctx.drawImage(img, 0, 0);this.data = this.ctx.getImageData(0, 0, this.w, this.h);}//显示文字drawText() {this.ctx.font = '60px Verdana';this.ctx.fillStyle = '#ffffff';this.ctx.fillText('万圣节快乐', 350, 280);}//闪电lightning() {let ctx = this.ctx;ctx.strokeStyle = '#fff';ctx.lineWidth = 2;ctx.beginPath();ctx.moveTo(800, 10);ctx.lineTo(600, 100);ctx.lineTo(500, 200);ctx.stroke();ctx.beginPath();ctx.moveTo(600, 100);ctx.lineTo(650, 170);ctx.stroke()}//打雷thunder() {let timer = Math.floor(800 * Math.random());this.reverse();this.lightning();this.drawText();setTimeout(() => {this.reset();}, timer);}//反转画布reverse() {let imgData = this.ctx.getImageData(0, 0, this.w, this.h);for (var i = 0, len = imgData.data.length; i < len; i += 4) {imgData.data[i] = 255 - imgData.data[i];imgData.data[i + 1] = 255 - imgData.data[i + 1];imgData.data[i + 2] = 255 - imgData.data[i + 2];imgData.data[i + 3] = 255;}this.ctx.putImageData(imgData, 0, 0);}//重置画布reset() {this.ctx.putImageData(this.data, 0, 0);}}
    let halloween = new Halloween('canvas');let canvas = document.getElementById('canvas');let ctx = canvas.getContext('2d');let img = new Image();img.src = '/images/halloween.png';img.onload = () => {halloween.initDraw(img);}document.getElementById('click').onclick = () => {halloween.thunder();}})();

# 总结

万圣节快乐?

万圣节动画-canvas像素点相关推荐

  1. H5 水球加载动画 - canvas应用篇

    水球加载动画 - canvas应用篇 效果图: html代码如下: <!doctype html> <html lang="en"> <head> ...

  2. html5 自动扣图,canvas像素点操作之视频绿幕抠图

    本文介绍了canvas像素点操作之视频绿幕抠图,分享给大家,具体如下: 用法: context.putimagedata(imgdata, x, y, dx, dy, dwidth, dheight) ...

  3. 最简单太阳系H5动画canvas详解 零基础可入

    最简单太阳系H5动画canvas详解 零基础可入 最终结果:(实际为动画效果,金星绕轨道转动) 页面准备/html 要使用canvas,需要首先在页面中要绘制的位置放入canvas标签元素,在后期的绘 ...

  4. html 像素 视频教程,canvas像素点操作之视频绿幕抠图

    本文介绍了canvas像素点操作之视频绿幕抠图,分享给大家,具体如下: 用法: context.putImageData(imgData, x, y, dX, dY, dWidth, dHeight) ...

  5. html5的canvas动画,Canvas HTML5简介 · Canvas动画教程

    Ch1 HTML5简介 前言 今后的一个月内会连载详细的Canvas教程,从零基础开始,到Canvas API,再到基本动画与高级动画的实现,还会介绍视音频的处理.移动应用,最后如果有时间会扩展说一说 ...

  6. 借场雪吧~ js下雪动画 canvas画布实现下雪特效

    这里我直接放在了app下面,因为我就下3秒.要一直下的建议换个位置哈. <div id="app"></div> <canvas id="c ...

  7. android 方块平移动画,Canvas 方块平移动画

    JavaScript 语言: JaveScriptBabelCoffeeScript 确定 var c = document.createElement("canvas"); do ...

  8. canvas实现粒子跟随鼠标动画

    canvas实现粒子跟随鼠标动画 canvas是前端绘制图形的好帮手,不少大牛的博客也会精心的用canvas绘制炫酷的背景.图形与可视化界面就是前端最好的名片,泡妞之前尚且知道要梳个靓头精心打扮,而c ...

  9. canvas基本动画--微信小程序

    如果看了我说的方法还没有做出来的,滴滴我,我给你发js代码.学习勤奋的精神!!! canvas动画 canvas动画 canvas动画 一.动画效果 1.图片: 2.页面代码设置 二.动画逻辑 1.w ...

最新文章

  1. modin pandas 加速
  2. 对PInvoke函数函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。...
  3. 图像滤镜艺术---图像滤镜晕影调节算法研究
  4. ue如何使用php文件,UltraEdit使用设置
  5. Oracle 数据表的管理
  6. 使用mac m1跑fortran代码hello world
  7. java中两任务并行运行_Java并行编程中的“可调用”与“可运行”任务
  8. 从javaagent迁移到JVMTI:我们的经验
  9. yaml格式,给Java类绑定数据
  10. Leetcode每日一题:167.two-sum-ii-input-array-is-sorted(两数之和Ⅱ-输入有序数组)
  11. 4比较三个数的大小输出最大的值并从小到大排序输出
  12. html5数组删除相同数据,js数组相减简单示例【删除a数组所有与b数组相同元素】...
  13. TensorFlow发布语音识别入门教程,附1GB数据集代码
  14. 常见的SQL优化面试题
  15. sed 批量替换字符串
  16. 【趣味实践】自动补帧算法——RIFE的使用
  17. 网站单页面优化的6个技巧
  18. 第四批入围企业公示——年度TOP100智能网联供应商评选
  19. esc键退出全屏 vue_解决了VUE在浏览器全屏下监听不到Esc键盘事件
  20. MMA8452加速传感器的应用(简)

热门文章

  1. 微信小程序的开发界面设计
  2. 2020年西山居SEED训练营开发方向记录
  3. 远距距离、大文件传输的选择
  4. SBA--以服务为基础的架构
  5. JS学习笔记 (四) 数组进阶
  6. 【独行秀才】macOS Big Sur 11.6.1正式版(20G224)原版镜像
  7. 当基因编辑遇上艺术家,CRISPR是否还令人害怕?
  8. z6青春版刷Android11,联想Z6青春版9.0固件rom系统线刷升级包:ZUI_11.1.048-刷机之家
  9. 蒙皮骨骼动画 unity_在Unity中沿航路点设置蒙皮网格动画
  10. Windows11下wsl的安装与卸载