文字飞散,动画使用css3。效果图如下:
源码如下:
- //容器
- var dom = document.querySelector(‘.flyBox’);
- //按钮
- var btn = document.querySelector(‘.flyBtn’);
- //存放字符串
- var html = ”;
- //将容器的innerHTML,split成数组,在拼接成字符串
- dom.innerHTML.split(”).forEach(function(o){
- html+='<span class=“fly-span”>’+o+'</span>’
- });
- //替换内容
- dom.innerHTML = html;
- //随机数
- function random(min, max) {
- return Math.random() * (max – min) + min;
- };
- //点击
- btn.onclick = function(){
- init();
- };
- //获取所有飞散的元素
- var fly = dom.querySelectorAll(‘.fly-span’);
- function init(){
- //添加css3属性
- ;[].forEach.call(fly,function(o){
- o.style.cssText = ‘transform:translate3d(‘+ (off ? random(-500, 500) : 0)+’px,’+(off ? random(-500, 500) : 0)+’px,’+(off ? random(-500, 500) : 0)+’px) scale(‘+(off ? random(2, 1) : 1)+’);opacity:’+ (off ? 0 : 1) +’;transition:all ‘+random(2.5, 4)+’s ease ‘+random(0, 0.2)+’s’;
- });
- };
盖闻天地之数,有十二万九千六百岁为一元。将一元分为十二会,乃子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥之十二支也。每会该一万八百岁。且就一日而论:子时得阳气,而丑则鸡鸣;寅不通光,而卯则日出;辰时食后,而巳则挨排;日午天中,而未则西蹉;申时晡而日落酉;戌黄昏而人定亥。
可以稍微改造一下,让每个文字逐个分散。
- //定义一个变量i,然后通过定时器累加,来达到逐个分散的效果
- function init(){
- timer = setInterval(function(){
- //当变量i等于元素个数,或者等于0,清除定时器
- if((i>=fly.length && off) ||(i<=0 && !off)){
- clearInterval(timer);
- clickoff = true;
- return;
- };
- fly[i].style.cssText = ‘transform:translate3d(‘+ (off ? random(-500, 500) : 0)+’px,’+(off ? random(-500, 500) : 0)+’px,”+(off ? random(-500, 500) : 0)+’px) scale(‘+(off ? random(2, 1) : 1)+’);opacity:’+ (off ? 0 : 1) +’;transition:all ‘+random(2.5, 4)+’s ease ‘+random(0, 0.2)+’s’;
- //off为true的时候,从开头开始分散,为false的时候,从末尾开始出现
- off ? i++ : i–;
- },40)
- };
- btn.onclick = function(){
- if(clickoff){
- this.innerHTML = !off ? ‘还原’ :’打乱’;
- clearInterval(timer);
- if(!off){
- i=0;
- }else{
- i = fly.length-1;
- }
- off = !off;
- init();
- };
- clickoff = false;
- };
盖闻天地之数,有十二万九千六百岁为一元。将一元分为十二会,乃子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥之十二支也。每会该一万八百岁。且就一日而论:子时得阳气,而丑则鸡鸣;寅不通光,而卯则日出;辰时食后,而巳则挨排;日午天中,而未则西蹉;申时晡而日落酉;戌黄昏而人定亥。
口