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

发布时间 - 2026-01-10 22:43:56    点击率:

前言

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

先来看看效果图:

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>

总结

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


# js  # 文字动画  # 粒子效果  # js文字动画  # js文字动画效果  # 实例介绍JavaScript中多种组合继承  # 15分钟深入了解JS继承分类、原理与用法  # JavaScript寄生组合式继承原理与用法分析  # JavaScript常见继承模式实例小结  # 彻底理解js面向对象之继承  # js中继承的几种用法总结(apply  # call  # prototype)  # JavaScript是如何实现继承的(六种方式)  # JavaScript继承与聚合实例详解  # 小块  # 随机数  # 也就  # 这篇文章  # 先来  # 多少个  # 就可以  # 行数  # 加载  # 有疑问  # translate3d  # rotate  # deg  # perspective  # ease  # position  # Random  # transform  # left  # transition 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  千库网官网入口推荐 千库网设计创意平台入口  如何快速生成可下载的建站源码工具?  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  如何选择PHP开源工具快速搭建网站?  个人网站制作流程图片大全,个人网站如何注销?  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  如何为不同团队 ID 动态生成多个非值班状态按钮  如何在建站之星网店版论坛获取技术支持?  如何自定义建站之星模板颜色并下载新样式?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  Laravel定时任务怎么设置_Laravel Crontab调度器配置  简历在线制作网站免费版,如何创建个人简历?  Linux系统命令中tree命令详解  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  昵图网官网入口 昵图网素材平台官方入口  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  微信小程序制作网站有哪些,微信小程序需要做网站吗?  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  如何在建站宝盒中设置产品搜索功能?  如何在云服务器上快速搭建个人网站?  Laravel用户密码怎么加密_Laravel Hash门面使用教程  JS实现鼠标移上去显示图片或微信二维码  php结合redis实现高并发下的抢购、秒杀功能的实例  企业网站制作这些问题要关注  微信小程序 五星评分(包括半颗星评分)实例代码  香港服务器WordPress建站指南:SEO优化与高效部署策略  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  node.js报错:Cannot find module &#39;ejs&#39;的解决办法  利用JavaScript实现拖拽改变元素大小  香港服务器租用费用高吗?如何避免常见误区?  如何在云指建站中生成FTP站点?  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  制作电商网页,电商供应链怎么做?  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  JavaScript Ajax实现异步通信  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  如何在阿里云域名上完成建站全流程?  太平洋网站制作公司,网络用语太平洋是什么意思?  如何确保FTP站点访问权限与数据传输安全?  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  详解CentOS6.5 安装 MySQL5.1.71的方法  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  Python面向对象测试方法_mock解析【教程】  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】