码迷,mamicode.com
首页 > 其他好文 > 详细

canvas粒子文字渐进渐出效果

时间:2014-09-03 19:42:17      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   color   io   ar   2014   div   

之前一直想做一个文字粒子效果的淡出淡进,这两天事情就写了一下代码,效果地址:http://www.mjix.com/code/canvas-text/   ,按F11进入全屏,做屏保还可以,预览图

bubuko.com,布布扣

 

主要是在粒子(文字像素点)的位移问题上的处理方法。淡进前需要先获取到像素点的初始位置极其透明度,这个东东运用到数学左边换算问题,要遇到数学有点头大就跳过吧,我学数学的/偷笑

 1     //获取渐进前的像素点位置
 2     getInData : function(data, min, offset){
 3         var xs = [],
 4             ys = [];
 5         this.each(data, function(info, index){
 6             xs.push(info[0]);
 7             ys.push(info[1]);
 8         });
 9 
10         var max = Math.max.apply(xs, xs),
11             mix = Math.min.apply(xs, xs),
12             may = Math.max.apply(ys, ys),
13             miy = Math.min.apply(ys, ys),
14             //找出近似中间点
15             midx = (max+mix) / 2, 
16             midy = (may+miy) / 2;
17 
18         var self = this,
19             dis  = 0,
20             len = 0,
21             prop = 0,
22             newData = [];
23         this.each(data, function(info, index){
24             alp = -self.random(0.1, 1);
25             len = min+self.random(offset);
26             dis = Math.sqrt(self.getDistance(info, [midx, midy]));
27 
28             prop = len/(dis+len);
29             newData.push([]);
30             var xy = Math.ceil((info[0]-prop*midx)/(1-prop));
31             newData[index][0] = xy; 
32             xy = Math.ceil((info[1]-prop*midy)/(1-prop));
33             newData[index][1] = xy; 
34             newData[index][2] = info[2].concat();
35             newData[index][2][3] = alp;
36         });
37         return newData;
38     },

 

然后是更新像素点位置,方法是,随机一个前进长度,根据当前点和目标点及移动不长确定下一个移动目标点的位置,如下

 1 //获取指定长度点目标点位置
 2     getDestDot : function(data1, data2, length){
 3         if(data2[1]==data1[1] && data2[0]==data1[0]){
 4             return data2;
 5         }
 6 
 7         var xdis = Math.sqrt(this.getDistance(data1, data2)),
 8             prop = length/xdis;
 9 
10         x = Math.ceil(prop*(data2[0]-data1[0])) + data1[0];
11         y = Math.ceil(prop*(data2[1]-data1[1])) + data1[1];
12         return [x, y];
13     },

 

直到所有的像素全部归位后,设置延迟,再淡出,淡出我就草草处理了,意思意思,效果自己看,源码就不说了。如所有的代码一样可能存在各种兼容性,BUG等等不可预料问题,留言反馈。

对于字体的加载,怎么检测是否加载完成,有知道的麻烦告知

canvas粒子文字渐进渐出效果

标签:des   style   blog   http   color   io   ar   2014   div   

原文地址:http://www.cnblogs.com/mjix/p/3954322.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!