利用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 'ejs'的解决办法
利用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表名映射【步骤】

