利用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 相关文章推荐
向fckeditor编辑器插入指定代码的方法
May 25 Javascript
javascript函数中的arguments参数
Aug 01 Javascript
JS实现一键回顶功能示例代码
Oct 28 Javascript
js使用html()或text()方法获取设置p标签的显示的值
Aug 01 Javascript
js中window.open打开一个新的页面
Aug 10 Javascript
jQuery定义插件的方法
Dec 18 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
Feb 02 Javascript
Bootstrap表单组件教程详解
Apr 26 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
Aug 20 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
Nov 03 Javascript
vue实现简单瀑布流布局
May 28 Javascript
vue+flask实现视频合成功能(拖拽上传)
Mar 04 Vue.js
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
我的论坛源代码(九)
2006/10/09 PHP
php session和cookie使用说明
2010/04/07 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
2011/07/17 PHP
php调用google接口生成二维码示例
2014/04/28 PHP
php fread函数使用方法总结
2019/05/28 PHP
Display SQL Server Version Information
2007/06/21 Javascript
js 表格隔行颜色
2009/12/02 Javascript
关于ExtJS4.1:快捷键支持的问题
2013/04/24 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
浅谈js基本数据类型和typeof
2016/08/09 Javascript
判断js的Array和Object的实现方法
2016/08/29 Javascript
js拖拽功能实现代码解析
2016/11/28 Javascript
微信小程序 开发之快递查询功能的实现
2017/01/09 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
js判断手机系统是android还是ios
2017/03/07 Javascript
利用types增强vscode中js代码提示功能详解
2017/07/07 Javascript
Vue AST源码解析第一篇
2017/07/19 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
jquery实现拖拽添加元素功能
2020/12/01 jQuery
为Python的Tornado框架配置使用Jinja2模板引擎的方法
2016/06/30 Python
Python 描述符(Descriptor)入门
2016/11/20 Python
Python学习pygal绘制线图代码分享
2017/12/09 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
Python之NumPy(axis=0 与axis=1)区分详解
2019/05/27 Python
Numpy数组array和矩阵matrix转换方法
2019/08/05 Python
Pandas时间序列:重采样及频率转换方式
2019/12/26 Python
keras处理欠拟合和过拟合的实例讲解
2020/05/25 Python
python中def是做什么的
2020/06/10 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
css3 media 响应式布局的简单实例
2016/08/03 HTML / CSS
汉语专业毕业生自荐信
2014/07/06 职场文书
我是一名护士演讲稿
2014/08/28 职场文书
2014年党员整改措施
2014/10/24 职场文书
一次性工伤赔偿协议书范本
2014/11/25 职场文书
教师年度个人总结
2015/02/11 职场文书