【边读码,边学习,技术也好,思路也罢】

【一款基于HTML5技术的文字像素爆炸重组动画特效,我们可以在输入框中指定任意文字,点击确定按钮后,就会将原先的文字爆炸散去,新的文字以像素点的形式组合起来,看起来非常棒。】

一开始想着,怎么在一个Canvas里获取文字的像素点位置。
还是说,有专门的Api获取文字的位置。
结果看了代码才发现,原来是用了那么个巧妙的办法[巧妙而超级简单]。
也就是说,所有的图片,都可以动态的用点来画出来了。
虽然说,扫描canvas的做法效率不高,但是似乎也只能这样了。


---
大致实现方法如下:
1.放两个canva,一个用于放置背景以及动态像素点[背景Canvas],另一个不可见的用于画文字[文字Canvas]
2.[背景Canvas]里生成像素圆点小球,使其自由移动。
3.当点击按钮时,先在[文字Canvas]里画上相应的文字。然后扫描[文字Canvas]里的像素,有内容的话,就将该位置指定给像素小球。
4.使用动画,移动小球到指定位置[需要flg来表明状态吧]
---
使用js库:
1.EasePack[渐变效果用]
2.TweenLite[渐变用]
3.easeljs
[Useful for creating games, generative art, and other highly graphical experiences.]

以上插件都整合在CreateJs里
http://createjs.com/
---
关键代码段:

1.创建[背景Canvas],[文字Canvas],[动态文本],[像素圆点]

  1. textStage = new createjs.Stage("text");
  2. stage = new createjs.Stage("stage");
  3. text = new createjs.Text("t", "80px 'Source Sans Pro'", "#eee");
  4. circle = new createjs.Shape();

2.移动像素点计算

  1. // c-元素点对象,dir-方向,in:向字聚集,out:打散
  2. // movement-jiggle:快速抖动,float:缓慢移动
  3. function tweenCircle(c, dir) {
  4. if(c.tween) c.tween.kill();
  5. if(dir == 'in') {
  6. //向字聚集
  7. c.tween = TweenLite.to(c, 0.4, {x: c.originX, y: c.originY, ease:Quad.easeInOut, alpha: 1, radius: 5, scaleX: 0.4, scaleY: 0.4, onComplete: function() {
  8. c.movement = 'jiggle';
  9. tweenCircle(c);
  10. }});
  11. } else if(dir == 'out') {
  12. //打散
  13. c.tween = TweenLite.to(c, 0.8, {x: window.innerWidth*Math.random(), y: window.innerHeight*Math.random(), ease:Quad.easeInOut, alpha: 0.2 + Math.random()*0.5, scaleX: 1, scaleY: 1, onComplete: function() {
  14. c.movement = 'float';
  15. tweenCircle(c);
  16. }});
  17. } else {
  18. if(c.movement == 'float') {
  19. //打散状态下的缓慢移动
  20. c.tween = TweenLite.to(c, 5 + Math.random()*3.5, {x: c.x + -100+Math.random()*200, y: c.y + -100+Math.random()*200, ease:Quad.easeInOut, alpha: 0.2 + Math.random()*0.5,
  21. onComplete: function() {
  22. tweenCircle(c);
  23. }});
  24. } else {
  25. //聚集状态下的快速抖动
  26. c.tween = TweenLite.to(c, 0.05, {x: c.originX + Math.random()*3, y: c.originY + Math.random()*3, ease:Quad.easeInOut,
  27. onComplete: function() {
  28. tweenCircle(c);
  29. }});
  30. }
  31. }
  32. }

3.创建文字,并扫描文字位置

  1. //text配置后,画到canvas
  2. textStage.addChild(text);
  3. textStage.update();
  4. //获取[文字Canvas]像素列表
  5. var ctx = document.getElementById('text').getContext('2d');
  6. var pix = ctx.getImageData(0,0,600,200).data;
  7. //获取的像素是RGBA4个表示一个像素点
  8. textPixels = [];
  9. for (var i = pix.length; i >= 0; i -= 4) {
  10. if (pix[i] != 0) {
  11. var x = (i / 4) % 600; // x轴位置,%600(行宽):用于计算多行
  12. var y = Math.floor(Math.floor(i/600)/4); // Y轴位置
  13. //下面的代码,各像素圆点之间的距离为8
  14. if((x && x%8 == 0) && (y && y%8 == 0)) textPixels.push({x: x, y: y});
  15. }
  16. }

4.赋值给像素圆点

  1. for(var i= 0, l=textPixels.length; i<l; i++) {
  2. circles[i].originX = offsetX + textPixels[i].x;
  3. circles[i].originY = offsetY + textPixels[i].y;
  4. tweenCircle(circles[i], 'in');
  5. }
  6. textFormed = true; // 是否已形成文字Flg
  7. //处理多余像素圆点,但是如果文字需要的像素圆点过多,会如何只有一半文字了吧。。。
  8. if(textPixels.length < circles.length) {
  9. for(var j = textPixels.length; j<circles.length; j++) {
  10. circles[j].tween = TweenLite.to(circles[j], 0.4, {alpha: 0.1});
  11. }
  12. }

5.文字爆炸效果

  1. for(var i= 0, l=textPixels.length; i<l; i++) {
  2. tweenCircle(circles[i], 'out');
  3. }
  4. if(textPixels.length < circles.length) {
  5. for(var j = textPixels.length; j<circles.length; j++) {
  6. circles[j].tween = TweenLite.to(circles[j], 0.4, {alpha: 1});
  7. }
  8. }

----

源码地址:
http://www.html5tricks.com/download/html5-text-pixel.rar

演示地址:
http://www.html5tricks.com/demo/html5-text-pixel/index.html

---

如果此效果用来显示图片,岂不更好玩。。。
似乎可以制作印象派作品了,哪天试试

[读码]HTML5像素文字爆炸重组的更多相关文章

  1. HTML5火焰文字特效DEMO演示

    效果展示:http://hovertree.com/texiao/html5/26/ 效果图: 扫描二维码查看效果:

  2. [读码][js,css3]能感知鼠标方向的图片遮罩效果

    效果图: 无意间看到过去流行的一个效果:[能感知鼠标方向的图片遮罩效果]近来不忙,就仔细的看了一看看到后来发现,网上有好多版本,谁是原著者似乎已经无法考证.读码就要读比较全面的,读像是原著的代码.代码 ...

  3. HTML5火焰文字特效DEMO演示---转载

    只有google支持 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...

  4. 基于HTML5自定义文字背景生成QQ签名档

    分享一款利用HTML5实现的自定义文字背景应用,首先我们可以输入需要显示的文字,并且为该文字选择一张背景图片,背景图片就像蒙版一样覆盖在文字上.点击生成QQ签名档即可将文字背景融为一体生成另外一张图片 ...

  5. 读《HTML5与CSS3权威指南(上册)》笔记

    第二章 1.内容类型:“text/html”.DOCTYPE声明:<!DOCTYPE html>.指定字符编码:<meta charset="utf-8"> ...

  6. HTML5 <Canvas>文字粒子化

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

  7. Unity 文字爆炸(风化)消失效果 粒子系统应用

    利用Unity的粒子系统,使用C#代码控制粒子的位置和速度,实现文字风化爆炸的效果. Unity的东西,不像flash,不能直接放到网页中,没办法了,只能放截图了.有兴趣的可以下载看看:text_ex ...

  8. JavaScript特效源码(1、文字特效)

    注:本文以及以下关于Javascript特效源码都是分享自JavaScript源码大全. 1.逐隐逐现的的特效 逐隐逐现的文字特效[推荐使用][适用于IE4++] (修改显示的文字后根据说明进行共2步 ...

  9. 大数据篇:一文读懂@数据仓库(PPT文字版)

    大数据篇:一文读懂@数据仓库 1 网络词汇总结 1.1 数据中台 数据中台是聚合和治理跨域数据,将数据抽象封装成服务,提供给前台以业务价值的逻辑概念. 数据中台是一套可持续"让企业的数据用起 ...

随机推荐

  1. js实现打开本地文件或文件夹

    原网址:http://blog.csdn.net/cofesun/article/details/7904887javascript有个特殊的对象ActiveXObject,通过它可以访问window ...

  2. HttpClient post json,可以是数组

    var json = JsonConvert.SerializeObject(obj); StringContent theContent = new StringContent(json, Enco ...

  3. java io系列16之 PrintStream(打印输出流)详解

    本章介绍PrintStream以及 它与DataOutputStream的区别.我们先对PrintStream有个大致认识,然后再深入学习它的源码,最后通过示例加深对它的了解. 转载请注明出处:htt ...

  4. 【Android】YUV使用总结 —— Android常用的几种格式:NV21/NV12/YV12/YUV420P的区别

    工作问题接触到图像这一块,需要对手机摄像头采集的原始帧做Rotate或者scale,但无奈对此的了解少之又少,于是网上搜了一顿,完事后将最近所学总结一下,以方便之后的人别踩太多坑.       首先想 ...

  5. Hyperledger fabric Client Node.js Hello World示例程序

    简介 Hyperledger fabric Client (HFC)提供了基于Node.js的应用接口来访问Hyperledger区块. 本文介绍了一个使用HFC访问IBM Bluemixr区块服务的 ...

  6. 安装thrift

    要求 thrift至少需要支持三种语言: Java PHP Go 预安装 基本教程: http://thrift.apache.org/docs/install/centos 使用最新的thrift, ...

  7. Java魔法堂:URI、URL(含URL Protocol Handler)和URN

    一.前言 过去一直搞不清什么是URI什么是URL,现在是时候好好弄清楚它们了!本文作为学习笔记,以便日后查询,若有纰漏请大家指正! 二.从URI说起    1. 概念 URI(Uniform Reso ...

  8. Git for Windows v2.11.0 Release Notes

    homepage faq contribute bugs questions Git for Windows v2.11.0 Release Notes Latest update: December ...

  9. WPF系列:样式

    一般简单的样式我们可以直接写在控件中 <Button Canvas.Left="20" Canvas.Top="30" Width="100&q ...

  10. web前端学习笔记---实现雪花飘落的效果

    看了javascript网页特效实例大全中的图片飘下的效果实例,觉得值得动手学习下. 就把图片改成雪花图,完成一个雪花飘下的效果. 并且,其中有些内容比较陈旧了,那么就学者改掉吧. 包括: 1.对le ...