利用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 相关文章推荐
用js判断用户浏览器是否是XP SP2的IE6
Mar 08 Javascript
JavaScript 获取事件对象的注意点
Jul 29 Javascript
jQuery实现切换页面布局使用介绍
Oct 09 Javascript
五段实用的js高级技巧
Dec 20 Javascript
JQuery操作元素的css样式
Mar 09 Javascript
Jquery幻灯片特效代码分享--打开页面随机选择切换方式(3)
Aug 15 Javascript
JS实现的另类手风琴效果网页内容切换代码
Sep 08 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
May 27 Javascript
JavaScript使用readAsDataUrl方法预览图片
May 10 Javascript
vue计算属性及使用详解
Apr 02 Javascript
关于vue编译版本引入的问题的解决
Sep 17 Javascript
详解vuex commit保存数据技巧
Dec 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
基于mysql的bbs设计(四)
2006/10/09 PHP
php 在文件指定行插入数据的代码
2010/05/08 PHP
PHP自定义函数收代码
2010/08/01 PHP
使用php判断网页是否gzip压缩
2013/06/25 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
用js模拟JQuery的show与hide动画函数代码
2010/09/20 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
JS网页图片按比例自适应缩放实现方法
2014/01/15 Javascript
JavaScript闭包实例讲解
2014/04/22 Javascript
轻松创建nodejs服务器(10):处理上传图片
2014/12/18 NodeJs
基于JavaScript实现一定时间后去执行一个函数
2015/12/14 Javascript
Jquery组件easyUi实现选项卡切换示例
2016/08/23 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
2018/09/14 Javascript
利用d3.js制作连线动画图与编辑器的方法实例
2019/09/05 Javascript
python网络编程示例(客户端与服务端)
2014/04/24 Python
python获取各操作系统硬件信息的方法
2015/06/03 Python
Python实现批量转换文件编码的方法
2015/07/28 Python
基于Python函数的作用域规则和闭包(详解)
2017/11/29 Python
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
python字符串与url编码的转换实例
2018/05/10 Python
python实现雨滴下落到地面效果
2018/06/21 Python
Python 中Django验证码功能的实现代码
2019/06/20 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
将一个文本文件的内容按倒序打印出来
2015/01/05 面试题
统计岗位职责
2014/02/21 职场文书
企业演讲比赛主持词
2014/03/18 职场文书
森林病虫害防治方案
2014/06/02 职场文书
2015年信贷员工作总结
2015/04/28 职场文书
追悼会家属答谢词
2015/09/29 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书
JavaScript展开运算符和剩余运算符的区别详解
2022/02/18 Javascript