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 粒子效果的更多相关文章

  1. CodePen 作品秀:Canvas 粒子效果文本动画

    作品名称——Shape Shifter,基于 Canvas 的粒子图形变换实验.在页面下方的输入框输入文本,上面就会进行变换出对应的粒子效果文本动画. CodePen 作品秀系列向大家展示来自 Cod ...

  2. 基于HTML5 Canvas粒子效果文字动画特效

    之前我们分享过很多超酷的文字特效,其中也有利用HTML5和CSS3的.今天我们要来分享一款基于HTML5 Canvas的文字特效,输入框中输入想要展示的文字,回车后即可在canvas上绘制出粒子效果的 ...

  3. canvas粒子效果-snow

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. Canvas + JavaScript 制作图片粒子效果

    首先看一下源图和转换成粒子效果的对比图:       左侧图片为源图,右侧图片为粒子效果图.该效果是在Canvas画布上制作的.将图片制作成粒子效果相对而言是比较简单的.重点了解两个知识点即可 1:图 ...

  5. canvas实现的粒子效果

    前言:我的这个share很简单,没什么技术水准,主要是我自己觉得canvas这个标签很cool!,简单实用又能装X,而且又能实现很多看起来很炫的东西. 一 关于canvas <canvas> ...

  6. 基于HTML5 Canvas生成粒子效果的人物头像

    前面我们分享过一个HTML5 Canvas实现的图像马赛克模糊效果,HTML5处理图片真的非常简单.今天我们要再利用HTML5 Canvas实现一个粒子效果的人物头像,你可以任意选择一张头像图片,接下 ...

  7. 超炫的HTML5粒子效果进度条 VS 如何规范而优雅地code

    最近瞎逛的时候发现了一个超炫的粒子进度效果,有多炫呢?请擦亮眼镜!   // _this.ch){ _this.particles.splice(i, 1); } }; this.Particle.p ...

  8. 打造高大上的Canvas粒子(一)

    HTML5 Canvas <canvas>标签定义图形,比如图表和其他图像,必须用脚本(javascript)绘制图形. 举例:绘制矩形 <script> var c = do ...

  9. 7个惊艳的HTML5 Canvas动画效果及源码

    HTML5非常强大,尤其是现在大部分浏览器都支持HTML5和CSS3,用HTML5制作的动画也多了起来.另外,Canvas上绘制图形非常简单,本文就分享了一些强大的HTML5 Cnavas动画,一起来 ...

随机推荐

  1. redis requires Ruby version >= 2.2.2问题

    最近在研究redis的集群,redis官方提供了redis-trib.rb工具,但是在使用之前 需要安装ruby,以及redis和ruby连接: yum -y install ruby ruby-de ...

  2. Scrapy框架--Requests对象

    Scrapy使用request对象来爬取web站点. request对象由spiders对象产生,经由Scheduler传送到Downloader,Downloader执行request并返回resp ...

  3. C#实现局域网内远程开机

    1.远程开机原理 远程开机Wake on LAN(WOL),俗称远程唤醒,远程唤醒的实现主要是向目标主机发送特殊格式的数据包,是AMD公司制作的MagicPacket这套软件以生成网络唤醒所需要的特殊 ...

  4. LINUX 笔记-ln 命令

    给文件创建软链接 命令:ln -s log2013.log link2013 给文件创建硬链接 命令:ln log2013.log ln2013

  5. Zookeeper 笔记-角色

    leader:提供读写服务,负责投票的发起和决议,更新系统状态 follower:为客户提供读服务,如果写服务则转发给leader,选举过程参与投票 observer:为客户端提供读服务,如果是写服务 ...

  6. h5样式初始化

    nav, header, section, article, aside, footer { display: block; } body, p, pre, hr, ul, dl, dd, h1, h ...

  7. C# 8.0的三个令人兴奋的新特性

    C# 语言是在2000发布的,至今已正式发布了7个版本,每个版本都包含了许多令人兴奋的新特性和功能更新.同时,C# 每个版本的发布都与同时期的 Visual Studio 以及 .NET 运行时版本高 ...

  8. JS框架设计读书笔记之-动画

    基础概念 CSS样式可分为两种,一种值接近无限的集合(color,width),一种值只有几种(display),可以进行计算的样式,产生了动画效果.\ 1. 动画的第一步是获得元素的精确样式值. 2 ...

  9. 使用jQuery判断元素是否在可视区域

    $("#app").offset().top; offset().top表示 绝对偏移值,比如说有一个很长的页面,#app这个元素 在最底下,  $("#app" ...

  10. Uncle Tom's Inherited Land*

    Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...