利用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 相关文章推荐
JAVASCRIPT style 中visibility和display之间的区别
Jan 22 Javascript
基于JQuery实现鼠标点击文本框显示隐藏提示文本
Feb 23 Javascript
jquery方法+js一般方法+js面向对象方法实现拖拽效果
Aug 30 Javascript
对jQuery的事件绑定的一些思考(补充)
Apr 20 Javascript
使图片旋转的3种解决方案
Nov 21 Javascript
Javascript 实现复制(Copy)动作方法大全
Jun 20 Javascript
jQuery窗口、文档、网页各种高度的精确理解
Jul 02 Javascript
使用JS+plupload直接批量上传图片到又拍云
Dec 01 Javascript
JQuery节点元素属性操作方法
Jun 11 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
Sep 25 Javascript
使用JS location实现搜索框历史记录功能
Dec 23 Javascript
Vue组件化(ref,props, mixin,.插件)详解
May 15 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
PHP5+UTF8多文件上传类
2008/10/17 PHP
了解Joomla 这款来自国外的php网站管理系统
2010/03/11 PHP
PHP开发者常犯的10个MySQL错误更正剖析
2012/01/30 PHP
php处理文件的小例子(解压缩,删除目录)
2013/02/03 PHP
摘自织梦CMS中的图片处理类
2015/08/08 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
php+MySQL实现登录时验证登录名和密码是否正确
2016/05/10 PHP
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
jquery控制左右箭头滚动图片列表的实例
2013/05/20 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
2016/05/12 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
2020/02/05 Javascript
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
[02:07]DOTA2超级联赛专访BBC:难忘网吧超神经历
2013/06/09 DOTA
python实现代理服务功能实例
2013/11/15 Python
python3爬取淘宝信息代码分析
2018/02/10 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
记一次python 内存泄漏问题及解决过程
2018/11/29 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
使用Django简单编写一个XSS平台的方法步骤
2019/03/25 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
pytorch中的自定义反向传播,求导实例
2020/01/06 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
Python 代码调试技巧示例代码
2020/08/11 Python
详解CSS3 弹性布局快速入门
2019/06/06 HTML / CSS
浅谈h5自定义audio(问题及解决)
2016/08/19 HTML / CSS
解析浏览器的一些“滚动”行为鉴赏
2019/09/16 HTML / CSS
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python
Vue实现导入Excel功能步骤详解
2021/07/03 Vue.js