利用JS实现文字的聚合动画效果


Posted in Javascript onJanuary 22, 2017

前言

所谓文字聚合效果,原理就是将容器分为若干的小块,然后每个小块设置 background-poisition ,最后添加css3动画就可以了,去掉注释,也就仅仅20行的代码。

先来看看效果图:

利用JS实现文字的聚合动画效果

利用JS实现文字的聚合动画效果

js代码如下:

//c为列数,r为行数,把box划分成多少个小块 
var box = document.querySelector('.boxWrap1'),c=4,r=8; 
//每个小块的宽高 
var w = box.offsetWidth/c,h = box.offsetHeight/r; 
//循环添加小块 
for(var i = 0;i < r;i++){ 
 for(var j = 0;j < c;j++) { 
  var _div=document.createElement('div'); 
  var _left = j * w,_top = i * h; 
  //添加css样式,并设置每个小块的背景 
  _div.style.cssText = 'width:'+w+'px;height:'+h+'px;left:'+_left+'px;top:'+_top+'px; opacity:0;background-position:'+(-_left) + 'px ' + (-_top) + 'px'; 
  //添加css动画时间 
  _div.style.transition = 'all '+ Random(1,1.8) +'s ease'; 
  //添加css的transform动画 
  _div.style.transform = 'perspective(800px) translate3d('+Random(-200,200)+'px, '+Random(-200,200)+'px,300px) rotate('+Random(-90,90)+'deg) scale('+ Random(0,2) +')' 
  //添加 
  box.appendChild(_div); 
 }; 
}; 
//延时添加动画 
setTimeout(function(){ 
 box.classList.add('set'); 
},100); 
//随机数 
function Random(start,end){ 
 return Math.random()*(end-start)+start; 
};

完整的示例如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>利用JS实现文字的聚合动画效果</title>
<style>
	.boxWrap1{width: 160px;height: 417px;position: relative;margin:0px auto;}
	.boxWrap1 img{width: 100%;}
	.boxWrap1 div{background: url(http://itakeo.com/wpimg/2_1.png) no-repeat;background-size: 160px auto; position: absolute; left: 0px;top: 0px;
	}
	.boxWrap1.set div{ opacity: 1!important;
			transform:perspective(800px) translate3d(0px,0px,0px) rotate(0deg) scale(1)!important;
			-moz-transform:perspective(800px) translate3d(0px,0px,0px) rotate(0deg) scale(1)!important;
			-webkit-transform:perspective(800px) translate3d(0px,0px,0px) rotate(0deg) scale(1)!important;
	}
	.boxSiteWrap{ width: 100%;overflow: hidden;height: auto; background: #000;padding: 140px 0}
	.boxSiteWrap button{cursor:pointer;display: block;font-size: 16px; width: 140px;height: 40px; background: #fff;color: #000;border:none;margin:30px auto;}
</style>
</head>

<body>
<div class="boxSiteWrap">
<div class="boxWrap1"></div>
<button>重新加载</button>
</div>

<script>
window.addEventListener('load',function(){
;(function(){
	function init(){
		var box = document.querySelector('.boxWrap1'),c=4,r=8;
		var w = box.offsetWidth/c,h = box.offsetHeight/r;
		for(var i=0;i<r;i++){
			for(var j=0;j<c;j++) { 
				var _div=document.createElement('div'); 
				var _left = j * w,_top = i * h;
				_div.style.cssText = 'width:'+w+'px;height:'+h+'px;left:'+_left+'px;top:'+_top+'px; opacity:0;background-position:'+(-_left) + 'px ' + (-_top) + 'px';
				_div.style.transition = _div.style.MozTransition = _div.style.WebkitTransition = 'all '+ Random(1,1.8) +'s ease';
				_div.style.transform = _div.style.MozTransform = _div.style.WebkitTransform = 'perspective(800px) translate3d('+Random(-200,200)+'px, '+Random(-200,200)+'px,300px) rotate('+Random(-90,90)+'deg) scale('+ Random(0,2) +')'
				box.appendChild(_div);
			};
		};
		setTimeout(function(){
			box.classList.add('set')
		},100);
		function Random(start,end){ 
		 return Math.random()*(end-start)+start; 
		};
	};
	init();
	var flag = true;
	document.querySelector('button').onclick = function(){
		if(flag){
			document.querySelector('.boxWrap1').classList.remove('set')
			setTimeout(function(){
				document.querySelector('.boxWrap1').innerHTML = '';
				init();
				flag = true;
			},1200);
			flag = false;
		};
	};
})();
});
</script>
</body>
</html>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
拖动Html元素集合 Drag and Drop any item
Dec 22 Javascript
javascript得到XML某节点的子节点个数的脚本
Oct 11 Javascript
通用javascript脚本函数库 方便开发
Oct 13 Javascript
使用百度地图api实现根据地址查询经纬度
Dec 11 Javascript
javascript性能优化之事件委托实例详解
Dec 12 Javascript
原生的强大DOM选择器querySelector介绍
Dec 21 Javascript
ajax分页效果(bootstrap模态框)
Jan 23 Javascript
使用canvas及js简单生成验证码方法
Apr 02 Javascript
使用angular帮你实现拖拽的示例
Jul 05 Javascript
小程序实现左滑删除功能
Oct 30 Javascript
基于vue写一个全局Message组件的实现
Aug 15 Javascript
小程序自定义轮播图圆点组件
Jun 25 Javascript
angularJS 指令封装回到顶部示例详解
Jan 22 #Javascript
jQuery实现的分页功能示例
Jan 22 #Javascript
jQuery加载及解析XML文件的方法实例分析
Jan 22 #Javascript
原生js实现类似fullpage的单页/全屏滚动
Jan 22 #Javascript
前端开发必知的15个jQuery小技巧
Jan 22 #Javascript
Vue.js学习之过滤器详解
Jan 22 #Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
Jan 22 #Javascript
You might like
PHP设计模式之迭代器模式的深入解析
2013/06/13 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
2015/02/10 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
2016/11/15 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
2017/08/18 PHP
Javascript注入技巧
2007/06/22 Javascript
JavaScript 函数惰性载入的实现及其优点介绍
2013/08/12 Javascript
js 删除数组的几种方法小结
2014/02/21 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
js实现透明度渐变效果的方法
2015/04/10 Javascript
基于ajax实现文件上传并显示进度条
2015/08/03 Javascript
JavaScript html5 canvas绘制时钟效果(二)
2016/03/27 Javascript
jQuery对象的链式操作用法分析
2016/05/10 Javascript
js 中获取制定的cook信息实现方法
2016/11/19 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
js的三种继承方式详解
2017/01/21 Javascript
仿京东快报向上滚动的实例
2017/12/13 Javascript
详解vue-admin和后端(flask)分离结合的例子
2018/02/12 Javascript
Vuex的基本概念、项目搭建以及入坑点
2018/11/04 Javascript
vue中实现图片压缩 file文件的方法
2020/05/28 Javascript
js简单粗暴的发布订阅示例代码
2021/01/23 Javascript
Python使用遗传算法解决最大流问题
2018/01/29 Python
Pipenv一键搭建python虚拟环境的方法
2018/05/22 Python
python3爬虫之设计签名小程序
2018/06/19 Python
Python用csv写入文件_消除空余行的方法
2018/07/06 Python
详解python中的闭包
2020/09/07 Python
html5中地理位置定位api接口开发应用小结
2013/01/04 HTML / CSS
意大利大型购物中心:Oliviero.it
2017/10/19 全球购物
自我反省检讨书
2014/01/23 职场文书
《学棋》教后反思
2014/04/14 职场文书
简易版租房协议书范本
2014/10/13 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
安全主题班会教案
2015/08/12 职场文书
初中信息技术教学反思
2016/02/16 职场文书
2019自荐信该如何写呢?
2019/07/05 职场文书
python自动化调用百度api解决验证码
2021/04/13 Python
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript