canvas线条实践之运动的正方形
原理说明:
1、通过rect实现正方形的绘制;
2、save保存canvas面板的保存,restore回复保存的canvas面板到初始状态;
3、translate用于改变canvas坐标的起始位置;
4、transform用于旋转绘制的正方形;
5、正方形边框颜色通过随机数值组合rgb颜色来实现;
6、动画效果通过requestAnimationFrame来实现。
实例效果图如下:

外围边框正方形实现代码
function drawFrameRect() {
ctx.beginPath();
ctx.strokeStyle = rectColor;
ctx.rect(centerX - rectWidth / 2,centerY - rectHeight / 2,rectWidth,rectHeight);
ctx.stroke();
}
内部正方形实现代码
function drawInnerRect (x,y,width,height,index,direction) {
var length = width >= height ? height / range * 0.5 : width / range * 0.5;
var rate = 200 / width;
if (!colorObj[index]) {
colorObj[index] = [];
}
if (colorObj[index].length == 0) {
for (var i = 0; i < length; i ++) {
colorObj[index].push(rectColor);
}
}
var randomColor = 'rgb(' + parseInt(Math.random() * 255) + ',' + parseInt(Math.random() * 255) + ',' + parseInt(Math.random() * 255) + ')';
colorObj[index].shift();
colorObj[index].push(randomColor);
for (var i = 0; i < length; i ++) {
ctx.save();
ctx.translate(x + width / 2, y + height / 2);
ctx.rotate(range * 0.65 * i * rate * Math.PI / 180);
ctx.beginPath();
if (direction == 'outer') {
ctx.strokeStyle = colorObj[index][i];
} else {
var _length = colorObj[index].length;
ctx.strokeStyle = colorObj[index][_length - i];
}
ctx.rect(-width / 2 + range * i, -height / 2 + range * i,width - range * i * 2,height - range * i * 2);
ctx.stroke();
ctx.restore();
}
}
canvas画布定义和动画实现
function draw() {
width = $('body').innerWidth();
height = $('body').innerHeight();
ctx.clearRect(0,0,width,height);
centerX = width / 2;
centerY = height / 2;
canvas.width = width;
canvas.height = height;
drawFrameRect();
drawInnerRect(centerX - rectWidth / 2,centerY - rectHeight / 2,rectHeight/3,rectHeight/3,0,'outer');
drawInnerRect(centerX - rectWidth / 2,centerY - rectHeight / 6,rectHeight/3,rectHeight/3,1,'inner');
drawInnerRect(centerX - rectWidth / 2,centerY + rectHeight / 6,rectHeight/3,rectHeight/3,2,'outer');
drawInnerRect(centerX - rectWidth * 3 / 10,centerY - rectHeight / 2,rectHeight,rectHeight,3,'outer');
drawInnerRect(centerX + rectWidth * 3 / 10,centerY - rectHeight / 2,rectHeight/3,rectHeight/3,4,'inner');
drawInnerRect(centerX + rectWidth * 3 / 10,centerY - rectHeight / 6,rectHeight/3,rectHeight/3,5,'outer');
drawInnerRect(centerX + rectWidth * 3 / 10,centerY + rectHeight / 6,rectHeight/3,rectHeight/3,6,'inner');
requestAnimationFrame(draw);
}
实例预览地址:canvas线条实践之运动的正方形
canvas线条实践之运动的正方形的更多相关文章
- HTML5 Canvas彩色小球碰撞运动特效
脚本简介 HTML5 Canvas彩色小球碰撞运动特效是一款基于canvas加面向对象制作的运动小球动画特效. 效果展示 http://hovertree.com/texiao/html5/39/ ...
- canvas仿屏幕保护运动线条
canvas是H5中及其重要的一个新标签,它得出现不仅让前端做图形图表功能变得异常强大,还用极强的性能丰富前端渲染页面的能力. Life is not a problem to be solved, ...
- 基于canvas线条绘制图形
原理说明 绘制一个正方形,正放心每条边等比例均分,具体分配多少根据自身情况而定,按照最上边边顺时针方向依次绘制线条,相邻两条边上的点依次连接,知道所有的点全部连接完便绘制完成. 示例效果图图如下 具体 ...
- Canvas 最佳实践(性能篇)
Canvas 想必前端同学们都不陌生,它是 HTML5 新增的「画布」元素,允许我们使用 JavaScript 来绘制图形.目前,所有的主流浏览器都支持 Canvas. Canvas 最常见的用途是渲 ...
- canvas链式弹性运动
上一课我学习了相对于鼠标为目标点的弹性运动,这次就学习了如何以上一个球为目标点的弹性运动,这次的函数比较复杂,首先分成了如下几个函数,首先定义了一个球的model,之后添加了4个球,在加载中调用了动画 ...
- canvas 线条不清楚的问题
对于canvas 画出的1px线条不清楚的问题, 一般是坐标点+0.5像素的问题, 但是有时要考虑viewpoint的问题,让canvas的width = 980,同时viewpoint = 980 ...
- canvas动画:自由落体运动
经过前面的文章,我们已经能够在canvas画布上画出各种炫酷的图形和画面,但是这些画面都是禁止的,怎么样才能让他们动起来呢? 如何绘制基本图形可以参考:canvas基本图形绘制 如何对基本图形移动旋转 ...
- canvas线条的属性
一.线条的帽子lineCap 取值:butt(默认值),round圆头,square方头 var canvas=document.getElementById("canvas"); ...
- canvas线条笔帽及连接
1) 线条笔帽篇: 1 function draw (id) { 2 var canvas = document.getElementById(id); 3 context = canvas.getC ...
随机推荐
- python编程基础之三十四
面向对象:三大特征:封装,继承,多态 封装:隐藏对象的实现过程,对外仅仅公开接口,控制在程序中的读取和修改的访问级别 类,函数都是一种封装 属性私有化:当类里面的属性不想被外部访问,可以将这些属性设置 ...
- 点云之OpenMesh:error C1083:无法打开包括文件:“OpenMesh/Core/IO/MeshIO.hh”:No such file or directory
1.这是一个错误引发的惨案:错误提示如下: 在进行点云程序调试时,出现错误:[error C1083:无法打开包括文件:“OpenMesh/Core/IO/MeshIO.hh”:No such fil ...
- 合并果子(STL优先队列)
STL优先队列:priority_queue 定义:priority_queue<int>q; 从小到大:priority_queue<int,vector<int>,g ...
- Cohen-Sutherland算法
Cohen-Sutherland算法 本算法又称为编码裁剪算法,算法的基本思想是对每 条直线段分三种情况处理: (1)若点p1和p 2完全在裁剪窗口内 “简取”之 (2)若点p1(x1,y1)和p2( ...
- 【Python3爬虫】我爬取了七万条弹幕,看看RNG和SKT打得怎么样
一.写在前面 直播行业已经火热几年了,几个大平台也有了各自独特的“弹幕文化”,不过现在很多平台直播比赛时的弹幕都基本没法看的,主要是因为网络上的喷子还是挺多的,尤其是在观看比赛的时候,很多弹幕不是喷选 ...
- 代码审计-Beescms_V4.0
Beescms_V4.0代码审计源于一场AWD线下比赛的漏洞源码 看了别的师傅的文章发现这个源码也非常简单 ,所以今晚简单审计过一遍. 0x01 预留后门 awd首先备份源码,然后下载下来查杀后门, ...
- [Luogu3420][POI2005]SKA-Piggy Banks
题目描述 Byteazar the Dragon has NNN piggy banks. Each piggy bank can either be opened with its correspo ...
- 【Spring Cloud】服务容错保护:Hystrix(四)
一.雪崩效应 在微服务架构中,由于服务和服务之间可以互相调用,一项工作的完成可能会依赖调用多个微服务模块,但由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就 ...
- 9.Nginx常用模块
1.nginx开启目录浏览 提供下载功能 默认情况下,网站返回index指定的主页,若该网站不存在主页,则将请求交给autoindex模块 如果开启autoindex模块,则提供一个下载的页面, 如果 ...
- PostgreSQL使用安装
PostgreSQL使用安装 一. 安装 ubuntu安装: # 安装客户端 sudo apt-get install postgresql-client # 安装服务器 sudo apt-get i ...