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. js将文字转化为语音并播放

    js将页面中的某些文字信息转化为语音并自动播放 <!DOCTYPE html><html lang="en"><head> <meta c ...

  2. [js常用]文字转化成语音

    使用百度语音接口,实现文字转化成语音播放 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" &qu ...

  3. HTML5 <Canvas>文字粒子化

    文字粒子化,额或者叫小圆圈化... 1 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> ...

  4. 微信小程序之canvas 文字断行和省略号显示

    文字的多行处理在dom元素中很好办.但是canvas中没有提供方法,只有通过截取指定字符串来达到目的. 那么下面就介绍我自己处理的办法: wxml: <canvas canvas-id='wor ...

  5. 移动端canvas文字图片合成并生成图片(canvas宽度自适应移动端屏幕)

    这是我之前做的一个关于文字图片合成的代码,供大家参考,不足支出还望体谅:具体的注释在代码里都有,有什么不懂了可以留言互相交流.<!DOCTYPE html> <html lang=& ...

  6. HTML5 Canvas ( 文字的度量 ) measureText

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

  7. HTML5 Canvas ( 文字横纵对齐 ) textAlign, textBaseLine

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

  8. HTML5 Canvas ( 文字的书写和样式控制 ) font, fillText, strokeText

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

  9. canvas文字自动换行、圆角矩形画法、生成图片手机长按保存、方形图片变圆形

    canvas的文字自动换行函数封装 // str:要绘制的字符串 // canvas:canvas对象 // initX:绘制字符串起始x坐标 // initY:绘制字符串起始y坐标 // lineH ...

随机推荐

  1. rsync+sersync自动同步备份数据

    一.为什么要用Rsync+sersync架构?1.sersync是基于Inotify开发的,类似于Inotify-tools的工具2.sersync可以记录下被监听目录中发生变化的(包括增加.删除.修 ...

  2. Ubuntu挂载硬盘,修改卷标

    Ubuntu挂载硬盘,修改卷标转载2016-03-06 17:03:21标签:ubuntu Ubuntu不像windows,硬盘插入电脑不会自动读取硬盘 数据,需要把硬盘挂载到文件夹上,然后才能访问硬 ...

  3. 洛谷 4768 LOJ 2718「NOI2018」归程

    [题解] 本题有多种做法,例如可持久化并查集.kruskal重构树等. kruskal重构树的做法是这样的:先把边按照海拔h从大到小的顺序排序,然后跑kruskal建立海拔的最大生成树,顺便建krus ...

  4. PAT 1138 Postorder Traversal

    Suppose that all the keys in a binary tree are distinct positive integers. Given the preorder and in ...

  5. 【13】AngularJS 模块

    AngularJS 模块 模块定义了一个应用程序.(魔芋:也就是说一个ng-app代表一个应用程序,也就是一个模块,module) 模块是应用程序中不同部分的容器. 模块是应用控制器的容器. 控制器通 ...

  6. idea结合git版本控制

    IntelliJ-IDEA和Git.GitHub.Gitlab的使用(五)----https://blog.csdn.net/milsevol/article/details/72792468

  7. Leetcode 68.文本左右对齐

    文本左右对齐 给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本. 你应该使用"贪心算法"来放置给定的单 ...

  8. HDU 1254 条件过程复杂的寻找最短路

    这里一看就是找箱子到终点的最短路 一开始还傻傻的以为人的位置给的很没有意思- -,然后果然错了 没过多久想明白了错误,因为你推箱子并不是你想去哪里推就能去哪推的,首先得考虑人能否过的去,因为可能人被箱 ...

  9. vue.js嵌套路由-------由浅入深

    嵌套路由就是路由里面嵌套他的子路由 子路由关键属性children 每一个子路由里面可以嵌套多个组件 子组件又有路由导航和路由容器 <router-link to="/父路由的地址名字 ...

  10. 最小生成树 I - Agri-Net

    Farmer John has been elected mayor of his town! One of his campaign promises was to bring internet c ...