android 画布心形,用CANVAS实现的心形动画效果
JavaScript
语言:
JaveScriptBabelCoffeeScript
确定
var c = document.getElementById("c");
var ctx = c.getContext("2d");
var cw = c.width = 400,
cx = cw / 2;
var ch = c.height = 400,
cy = ch / 2;
var frames = 0;
var R = 100; // for the heart path
var howMany = 300; // how many particles
var p = []; // particles array
var D = 25;
/*var colors = [170, 180, 190, 200, 210];*/
var colors = [340, 350, 360, 0, 10, 20];
ctx.fillStyle = "rgba(0,0,0,.05)";
var cx = [cw / 2, cw / 2 + R, cw / 2 - R];
var cy = [ch / 2, R, R];
function Particle() {
var a = (Math.random() * 2 * Math.PI);
var r = ~~(Math.random() * R);
var index = Math.floor(Math.random() * 3)
this.x = cx[index] + r * Math.cos(a);
this.y = cy[index] + r * Math.sin(a);
this.ix = (Math.random()) * (Math.random() < 0.5 ? -1 : 1); //positive or negative
this.iy = (Math.random()) * (Math.random() < 0.5 ? -1 : 1); //positive or negative
this.hue = colors[Math.round(Math.random() * colors.length) + 1]
}
function createParticle() {
var particle = new Particle();
p.push(particle);
}
for (var i = 0; i < howMany / 2; i++) {
createParticle();
}
function Draw() {
frames++
if (frames % 2 == 0 && p.length < howMany) {
createParticle();
}
ctx.fillRect(0, 0, cw, ch);
thePath(R, 1); // the current path for isPointInPath
ctx.strokeStyle = "hsla(0,50%,20%,.3)";
ctx.stroke();
for (var i = 0; i < p.length; i++) {
ctx.fillStyle = p[i].c;
if (ctx.isPointInPath(p[i].x, p[i].y)) {
p[i].x += p[i].ix;
p[i].y += p[i].iy;
} else {
p[i].ix = -1 * p[i].ix;
p[i].iy = -1 * p[i].iy;
p[i].x += p[i].ix;
p[i].y += p[i].iy;
}
}
compare();
window.requestAnimationFrame(Draw);
}
window.requestAnimationFrame(Draw);
function compare() {
for (var i = 0; i < p.length; i++) {
var a = p[i];
for (var j = i + 1; j < p.length; j++) {
var b = p[j];
var dist = distance(a, b);
if (dist < D) {
var c = {};
var alp = (D - dist) / D;
var hue = a.hue;
ctx.strokeStyle = "hsla(" + hue + ",87%, 44%," + alp + ")";
ctx.beginPath();
ctx.moveTo(a.x, a.y);
ctx.lineTo(b.x, b.y);
ctx.stroke();
}
}
}
}
function distance(a, b) {
var ac = b.y - a.y;
var bc = b.x - a.x;
var ab = Math.sqrt(ac * ac + bc * bc);
return ab;
}
function thePath(R, r) { //draw a heart
ctx.beginPath();
ctx.moveTo(200, R);
ctx.arc(300, R, R - r, Math.PI, Math.PI * 0.23);
ctx.lineTo(200, 350);
ctx.arc(100, R, R - r, Math.PI * 0.77, 0); // NO stroke!!!
}
function randomIntFromInterval(mn, mx) {
return ~~(Math.random() * (mx - mn + 1) + mn);
}
android 画布心形,用CANVAS实现的心形动画效果相关推荐
- Android中的popupwindow从底部进入和退出的动画效果
今天,简单讲讲android使用popupwindow时设置popupwindow进入和退出的动画效果. 其实这个很简单,之前设置popupwindow从底部进入和退出的效果时,当时记不清了,所以在网 ...
- android动画效果 translate,Android利用translate、scale、alpha、rotate实现动画效果
Android利用translate.scale.alpha.rotate实现动画效果 在Android中可以用animation实现动画效果,Android中的animation由四种类型组成: a ...
- php3D动画,html5的canvas实现几何模型3D运动动画效果
html5的canvas实现几何模型3D运动动画效果 JS片段: var {atan2,sqrt,sin,cos,PI,acos} = Math; function project3D(x,y,z,v ...
- Android画布和图形绘制---Canvas and Drawables(一)
注:本文译自:http://developer.android.com/guide/topics/graphics/2d-graphics.html Android框架API提供了一组2D描画API, ...
- 怎样用html制作动态心,HTML5使用Canvas动态绘制心型线和玫瑰线的教程
1html5的canvas元素提供了丰富的绘图功能,能够使我们制作出许多精美的动画.本次将运用canvas绘制心型线和玫瑰线. 1.心型线和玫瑰线 绘制这两种曲线,首先我们分别选用两个参数方程(心型线 ...
- Android 中通过Canvas 与线程结合实现动画效果
前段时间在公司做了一个模块,不使用第三方动画效果类,直接通过Canvas 进行图像的绘制,并通过Thread实现动画的效果 该模块主要是实现车辆运行时候的道路运行效果,在进行实施前做了一个相关的Dem ...
- 7 款基于 HTML5 Canvas 的超炫 3D 动画效果
在以前,想要在浏览器中实现3D动画效果是非常困难的,但是自从HTML5诞生之后,这就变得十分简单了.遗憾的是,目前的浏览器对3D渲染效果还不是非常理想,尤其是渲染速度,可能用chrome和safari ...
- 【Canvas】js用canvas绘制一个钟表时钟动画效果
学习JavaScript的看过来,有没有兴趣用Canvas画图呢,可以画很多有趣的事物,自由发挥想象,收获多多哦,旋转角度绘图这个重点掌握到了吗,这里有一个例子,如何用canvas画钟表时钟动图效果, ...
- html动画变圆,HTML5 canvas制作圆形的万花筒动画效果
Canvas圆形万花筒动画效果 window.οnlοad=function(){ var canvas = document.getElementById("canvas"); ...
- Android 实现录音和监听声音大小实现话筒动画效果
公司项目做的差不多了,,闲下来了,,就写一篇关于android利用MediaRecorder实现录音的文章吧,并且录音的时候声音的大小可以控制话筒实现动画效果, 效果如图所示: 录音的文件最后保存在S ...
最新文章
- RDKit | 基于最大公共子结构(MCS)的分子比对
- 【RocketMQ工作原理】消息的清理
- 调用script方法_自己撸一个代码生成器输入参数和方法
- VS2015 MFC属性页孙鑫笔记
- hdu oj1094题解
- 从零开始小说 html,从零开始的HTML生活
- waitpid最后以一个参数设为0_西门子MM440变频器参数设置
- FileWriter写入和Scanner录入的简单操作
- python 工程生成requirements
- java : JSR107缓存规范
- webstorm与Idea禁用自动保存
- linux整行剪切_云计算人员如何提高效率 要掌握哪些Linux命令
- 基于jenkins的自动化部署实现
- C#中的多线程 - 多线程的使用 z
- Python入门之经典函数实例
- 基于bootstrap 的AceAdmin 1.4版本(iframe修改)
- js解决m3u8视频无法播放问题
- gmail更改个人信息_如何在不创建新电子邮件地址的情况下更改Gmail名称
- python代码错误有哪些_Python常见十六个错误集合,你知道那些?
- [知识普及]世界知名洋酒
热门文章
- 关于一阶线性电路的零输入响应
- java和大数据开发该选择哪个好就业?
- linux怎么看系统内存多大内存频率,Linux 查看 CPU 型号及内存频率及其它信息的命令...
- java 主机字节序_java字节序、主机字节序和网络字节序扫盲贴
- ug电子产品计算机建模,UG10网格曲面咖啡壶
- 【android】Android Studio创建模拟手机虚拟机
- CSS实现最简洁的加载动画
- UE4 后期材质节点学习
- php批量上传代码,文件批量上传_php文件上传代码(支持文件批量上传)
- c语言游戏经典案例,C语言_编游戏案例精编.doc