万圣节动画-canvas像素点
万圣节到了,写一个小例子了解一下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像素点相关推荐
- H5 水球加载动画 - canvas应用篇
水球加载动画 - canvas应用篇 效果图: html代码如下: <!doctype html> <html lang="en"> <head> ...
- html5 自动扣图,canvas像素点操作之视频绿幕抠图
本文介绍了canvas像素点操作之视频绿幕抠图,分享给大家,具体如下: 用法: context.putimagedata(imgdata, x, y, dx, dy, dwidth, dheight) ...
- 最简单太阳系H5动画canvas详解 零基础可入
最简单太阳系H5动画canvas详解 零基础可入 最终结果:(实际为动画效果,金星绕轨道转动) 页面准备/html 要使用canvas,需要首先在页面中要绘制的位置放入canvas标签元素,在后期的绘 ...
- html 像素 视频教程,canvas像素点操作之视频绿幕抠图
本文介绍了canvas像素点操作之视频绿幕抠图,分享给大家,具体如下: 用法: context.putImageData(imgData, x, y, dX, dY, dWidth, dHeight) ...
- html5的canvas动画,Canvas HTML5简介 · Canvas动画教程
Ch1 HTML5简介 前言 今后的一个月内会连载详细的Canvas教程,从零基础开始,到Canvas API,再到基本动画与高级动画的实现,还会介绍视音频的处理.移动应用,最后如果有时间会扩展说一说 ...
- 借场雪吧~ js下雪动画 canvas画布实现下雪特效
这里我直接放在了app下面,因为我就下3秒.要一直下的建议换个位置哈. <div id="app"></div> <canvas id="c ...
- android 方块平移动画,Canvas 方块平移动画
JavaScript 语言: JaveScriptBabelCoffeeScript 确定 var c = document.createElement("canvas"); do ...
- canvas实现粒子跟随鼠标动画
canvas实现粒子跟随鼠标动画 canvas是前端绘制图形的好帮手,不少大牛的博客也会精心的用canvas绘制炫酷的背景.图形与可视化界面就是前端最好的名片,泡妞之前尚且知道要梳个靓头精心打扮,而c ...
- canvas基本动画--微信小程序
如果看了我说的方法还没有做出来的,滴滴我,我给你发js代码.学习勤奋的精神!!! canvas动画 canvas动画 canvas动画 一.动画效果 1.图片: 2.页面代码设置 二.动画逻辑 1.w ...
最新文章
- modin pandas 加速
- 对PInvoke函数函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。...
- 图像滤镜艺术---图像滤镜晕影调节算法研究
- ue如何使用php文件,UltraEdit使用设置
- Oracle 数据表的管理
- 使用mac m1跑fortran代码hello world
- java中两任务并行运行_Java并行编程中的“可调用”与“可运行”任务
- 从javaagent迁移到JVMTI:我们的经验
- yaml格式,给Java类绑定数据
- Leetcode每日一题:167.two-sum-ii-input-array-is-sorted(两数之和Ⅱ-输入有序数组)
- 4比较三个数的大小输出最大的值并从小到大排序输出
- html5数组删除相同数据,js数组相减简单示例【删除a数组所有与b数组相同元素】...
- TensorFlow发布语音识别入门教程,附1GB数据集代码
- 常见的SQL优化面试题
- sed 批量替换字符串
- 【趣味实践】自动补帧算法——RIFE的使用
- 网站单页面优化的6个技巧
- 第四批入围企业公示——年度TOP100智能网联供应商评选
- esc键退出全屏 vue_解决了VUE在浏览器全屏下监听不到Esc键盘事件
- MMA8452加速传感器的应用(简)
热门文章
- 微信小程序的开发界面设计
- 2020年西山居SEED训练营开发方向记录
- 远距距离、大文件传输的选择
- SBA--以服务为基础的架构
- JS学习笔记 (四) 数组进阶
- 【独行秀才】macOS Big Sur 11.6.1正式版(20G224)原版镜像
- 当基因编辑遇上艺术家,CRISPR是否还令人害怕?
- z6青春版刷Android11,联想Z6青春版9.0固件rom系统线刷升级包:ZUI_11.1.048-刷机之家
- 蒙皮骨骼动画 unity_在Unity中沿航路点设置蒙皮网格动画
- Windows11下wsl的安装与卸载