canvas 粒子效果
var canvas = document.createElement('canvas');
var cxt = canvas.getContext('2d');
var W = canvas.width = 500;
var H = canvas.height = 200;
var str = 'Grewer,点击此处';
cxt.textBaseline = 'hanging';
cxt.font = '60px 宋体'
var sw = cxt.measureText(str).width;
if (sw > W) {
sw = W;
}
cxt.fillText(str, (W - sw) / 2, (H - 60) / 2, W);
canvas.style.border = '1px solid #ddd'
document.body.appendChild(canvas);
var imageData = cxt.getImageData(0, 0, W, H);
var getV = function(i,j) {
var v = Math.random() * 1;
v = v < 0.1 ? 0.1 : v;
var slope = (i-W/2) / (j-H/2);
slope = slope < 0 ? -slope :slope;
var x = v*slope;
var y = v;
if(i<W/2&&j<H/2){
x = -x;
y = -y;
};
if(i<W/2&&j>H/2){
x = -x;
};
if(i>W/2&&j<H/2){
y = -y;
};
return{x:x,y:y}
}
function getDots(imageData) {
//从imageData对象中取得粒子,并存储到dots数组中
var dots = [];
//dots的索引
var index = 0;
for (var i = 0; i < W; i++) {
for (var j = 0; j < H; j++) {
//data值中的红色值
var k = 4 * (i + j * W);
//data值中的透明度
if (imageData.data[k + 3] > 0) {
var v = getV(i,j);
dots[index++] = {
'index': index,
'x': i,
'y': j,
'red': k,
'vX': v.x,
'vY': v.y,
}
}
}
}
var newDots = [];
var len = dots.length;
for (var i = 0; i < len; i++) {
newDots.push(dots.splice(Math.floor(Math.random() * dots.length), 1)[0]);
}//打乱顺序
return newDots;
}
var dataArr = getDots(imageData)
var random = function() {
cxt.clearRect(0, 0, W, H);
for (var i = 0; i < dataArr.length; i++) {
var temp = dataArr[i];
temp.x += temp.vX;
temp.y += temp.vY
cxt.fillRect(temp.x, temp.y, 1, 1);
}
window.requestAnimationFrame(random);
}
document.onclick = function(e) {
e = e || event;
var x = e.clientX - canvas.getBoundingClientRect().left;
var y = e.clientY - canvas.getBoundingClientRect().top;
if ((0 <= x) && (x <= 500) && (0 <= y) && (y <= 200)) {
random();
}
}
参考文章:http://www.cnblogs.com/xiaohuochai/p/7452898.html
网页查看: https://grewer.github.io/JsDemo/canvasParticle/
canvas 粒子效果的更多相关文章
- CodePen 作品秀:Canvas 粒子效果文本动画
作品名称——Shape Shifter,基于 Canvas 的粒子图形变换实验.在页面下方的输入框输入文本,上面就会进行变换出对应的粒子效果文本动画. CodePen 作品秀系列向大家展示来自 Cod ...
- 基于HTML5 Canvas粒子效果文字动画特效
之前我们分享过很多超酷的文字特效,其中也有利用HTML5和CSS3的.今天我们要来分享一款基于HTML5 Canvas的文字特效,输入框中输入想要展示的文字,回车后即可在canvas上绘制出粒子效果的 ...
- canvas粒子效果-snow
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Canvas + JavaScript 制作图片粒子效果
首先看一下源图和转换成粒子效果的对比图: 左侧图片为源图,右侧图片为粒子效果图.该效果是在Canvas画布上制作的.将图片制作成粒子效果相对而言是比较简单的.重点了解两个知识点即可 1:图 ...
- canvas实现的粒子效果
前言:我的这个share很简单,没什么技术水准,主要是我自己觉得canvas这个标签很cool!,简单实用又能装X,而且又能实现很多看起来很炫的东西. 一 关于canvas <canvas> ...
- 基于HTML5 Canvas生成粒子效果的人物头像
前面我们分享过一个HTML5 Canvas实现的图像马赛克模糊效果,HTML5处理图片真的非常简单.今天我们要再利用HTML5 Canvas实现一个粒子效果的人物头像,你可以任意选择一张头像图片,接下 ...
- 超炫的HTML5粒子效果进度条 VS 如何规范而优雅地code
最近瞎逛的时候发现了一个超炫的粒子进度效果,有多炫呢?请擦亮眼镜! // _this.ch){ _this.particles.splice(i, 1); } }; this.Particle.p ...
- 打造高大上的Canvas粒子(一)
HTML5 Canvas <canvas>标签定义图形,比如图表和其他图像,必须用脚本(javascript)绘制图形. 举例:绘制矩形 <script> var c = do ...
- 7个惊艳的HTML5 Canvas动画效果及源码
HTML5非常强大,尤其是现在大部分浏览器都支持HTML5和CSS3,用HTML5制作的动画也多了起来.另外,Canvas上绘制图形非常简单,本文就分享了一些强大的HTML5 Cnavas动画,一起来 ...
随机推荐
- SQL Server2008安装教程
SQL Server2008安装教程 第一步,打开文件,点击开始安装: 第二步,打开后点击左边项的安装,选择右边第一项: 第三步,点击确定: 第四步,选择接受服务条款,点击下一步: 第五步,按着一 ...
- 【机器学习实战】第7章 集成方法 ensemble method
第7章 集成方法 ensemble method 集成方法: ensemble method(元算法: meta algorithm) 概述 概念:是对其他算法进行组合的一种形式. 通俗来说: 当做重 ...
- C#控件基础
在说控件之前,还是有必要说一下如何创建项目的. 现在我们就不用创建控制台应用程序了,而是文件>新建>C#>Windows窗体应用程序.名称,位置自己选择. 创建好了大致就是这样了,可 ...
- Linux入门(4)——Ubuntu16.04安装MATLAB2016b
通常有三个安装文件: Matlab 2016b Linux64 Crack.rar R2016b_glnxa64_dvd1.iso R2016b_glnxa64_dvd2.iso sudo apt i ...
- 如何利用Oracle VM Templates 在几分钟内部署Oracle Real Application Clusters (RAC)
本文未经授权,禁止一切形式的转载.如果对本文有任何疑问可以通过以下方式和我交流: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiang ...
- Linux系统用户管理
一.Linux账户 广义上讲,Linux的账户包括用户账户和组账户两种. Linux系统下的用户账户有两种,普通用户和超级用户.普通用户在系统中的任务就是普通工作,管理员在系统上的任务就是对普通用户和 ...
- 域名系统DNS
一.域名系统是什么 域名系统其实就是一个把主机名解析为IP地址的名字系统. 因特网使用层次树状结构的命名方法,并使用分布式的域名系统DNS.因特网的域名系统DNS被设计成一个联机分布式数据库系统,并采 ...
- LeetCode 624. Maximum Distance in Arrays (在数组中的最大距离)$
Given m arrays, and each array is sorted in ascending order. Now you can pick up two integers from t ...
- Excel 查找某列中的数据在另一列是否存在及输出第三例的数据
最近在操作Excel文件数据导入数据库时,经常需要检查Excel中哪些数据数据库中已经存在,哪些不存在,然后再将不存在数据库中的Excel数据导入:在此过程中,经常需要操作Excel中的数据,所以.也 ...
- [译]ASP.NET Core 2.0 路由引擎
问题 ASP.NET Core 2.0的路由引擎是如何工作的? 答案 创建一个空项目,为Startup类添加MVC服务和请求中间件: public void ConfigureServices(ISe ...