利用Js+Css实现折纸动态导航效果实例源码
发布时间 - 2026-01-10 22:47:46 点击率:次先来看看第一种实现方式

效果图如下:
不再采用ul li的布局方式
-webkit-transform-style:preserve-3d只对子元素有作用,所以每个div都加。
实例源码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style>
.wrap{margin:30px auto;width:302px;-webkit-perspective:800px; -webkit-transform-style:preserve-3d; position:relative;}
.wrap div{ position:absolute; top:52px;left:0;-webkit-transform-style:preserve-3d; -webkit-transform-origin:top;}
.wrap span{ display:block;width:300px;border:1px solid #000;height:50px; font:16px/50px "宋体"; background:#ccc;}
</style>
</head>
<body>
<input type="button" value="展开" />
<input type="button" value="收缩" />
<div class="wrap" id="list">
<span>第一项</span>
<div>
<span>第二项</span>
<div>
<span>第三项</span>
<div>
<span>第四项</span>
<div>
<span>第五项</span>
<div>
<span>第六项</span>
<div>
<span>第七项</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
window.onload=function()
{
var oList=document.getElementById("list");
var aDiv=oList.getElementsByTagName("div");
var aBtn=document.getElementsByTagName("input");
aBtn[1].onclick=function()
{
for(var i=0;i<aDiv.length;i++)
{
aDiv[i].style.transition="0.5s "+(aDiv.length-i)*100+"ms";
aDiv[i].style.WebkitTransform="rotateX(60deg)";
}
};
aBtn[0].onclick=function()
{
for(var i=0;i<aDiv.length;i++)
{
aDiv[i].style.transition="0.5s "+i*100+"ms";
aDiv[i].style.WebkitTransform="rotateX(0deg)";
}
};
};
</script>
</body>
</html>
第二种实现方式
效果图如下:
这个原先是隐藏的,点击后才展开。
通过关键帧控制每个div的展开状态,当要展开的时候给每个div添加className,但是这个className不是一下子全部添加上去的,而是有延时的,所以用到了定时器。
实例源码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style>
@-webkit-keyframes open{
0%
{
-webkit-transform:rotateX(-120deg);
}
40%
{
-webkit-transform:rotateX(30deg);
}
60%
{
-webkit-transform:rotateX(-20deg);
}
80%
{
-webkit-transform:rotateX(10deg);
}
100%
{
-webkit-transform:rotateX(0deg);
}
}
.wrap{margin:30px auto;width:300px;-webkit-perspective:800px;position:relative;}
.wrap h2{ height:50px;background:#F03; text-align:center; font:16px/50px "微软雅黑"; color:#fff; position:relative;z-index:2;}
.wrap div{ position:absolute; top:32px;left:0;-webkit-transform-style:preserve-3d; -webkit-transform-origin:top; -webkit-transform:rotateX(-120deg); transition:.5s;}
.wrap>div{ top:50px;}
.wrap .open{-webkit-animation:open 2s;-webkit-transform:rotateX(0deg);}
.wrap span{ display:block;width:300px;height:30px; font:14px/30px "宋体"; background:#6F3; text-indent:15px; color:#fff; transition:.5s; box-shadow:inset 0 0 30px 20px rgba(0,0,0,1);}
.wrap .open>span{box-shadow:inset 0 0 30px 10px rgba(0,0,0,0);}
.wrap span:hover{ background:#FF0;text-indent:30px;}
</style>
</head>
<body>
<input type="button" value="展开" />
<input type="button" value="收缩" />
<div class="wrap" id="list">
<h2>标题</h2>
<div>
<span>第一项</span>
<div>
<span>第二项</span>
<div>
<span>第三项</span>
<div>
<span>第四项</span>
<div>
<span>第五项</span>
<div>
<span>第六项</span>
<div>
<span>第七项</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
window.onload=function()
{
var oList=document.getElementById("list");
var aDiv=oList.getElementsByTagName("div");
var aBtn=document.getElementsByTagName("input");
var oTimer=null;
aBtn[1].onclick=function()
{
var i=aDiv.length-1;
clearInterval(oTimer);
oTimer=setInterval(function(){
aDiv[i].className="";
i--;
if(i<0)
{
clearInterval(oTimer);
}
},50);
};
aBtn[0].onclick=function()
{
var i=0;
clearInterval(oTimer);
oTimer=setInterval(function(){
aDiv[i].className="open";
i++;
if(i==aDiv.length)
{
clearInterval(oTimer);
}
},200);
};
};
</script>
</body>
</html>
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
# js如何实现动态导航
# js实现动态导航栏目
# css3
# 3d折纸动画效果
# JS+CSS实现鼠标滑过时动态翻滚的导航条效果
# javascript实现的鼠标悬停时动态翻滚的导航条
# JS实现移动端可折叠导航菜单(现代都市风)
# JS无限级导航菜单实现方法
# vuejs 切换导航条高亮(路由菜单高亮)的方法示例
# js实现水平滚动菜单导航
# 原生JS实现导航下拉菜单效果
# 如何使用wheelnav.js构建酷炫的动态导航菜单
# 宋体
# 无标题文档
# 六项
# 七项
# 第三项
# 第五项
# 第四项
# 是有
# 微软
# 第一项
# 这篇文章
# 后才
# 先来
# 第二种
# 第一种
# 有疑问
# origin
# left
# text
# block
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
如何在IIS管理器中快速创建并配置网站?
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
如何正确选择百度移动适配建站域名?
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
郑州企业网站制作公司,郑州招聘网站有哪些?
Laravel怎么调用外部API_Laravel Http Client客户端使用
iOS正则表达式验证手机号、邮箱、身份证号等
Android自定义控件实现温度旋转按钮效果
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
Android自定义listview布局实现上拉加载下拉刷新功能
再谈Python中的字符串与字符编码(推荐)
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
如何挑选最适合建站的高性能VPS主机?
西安专业网站制作公司有哪些,陕西省建行官方网站?
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何在阿里云虚拟服务器快速搭建网站?
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
Laravel怎么在Controller之外的地方验证数据
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
Linux系统命令中tree命令详解
Laravel如何生成API文档?(Swagger/OpenAPI教程)
活动邀请函制作网站有哪些,活动邀请函文案?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
深圳网站制作平台,深圳市做网站好的公司有哪些?
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
EditPlus中的正则表达式 实战(1)
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
北京网站制作公司哪家好一点,北京租房网站有哪些?
Laravel如何实现模型的全局作用域?(Global Scope示例)
油猴 教程,油猴搜脚本为什么会网页无法显示?
Laravel观察者模式如何使用_Laravel Model Observer配置
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
Laravel如何实现API资源集合?(Resource Collection教程)
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
JavaScript如何实现路由_前端路由原理是什么
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
使用PHP下载CSS文件中的所有图片【几行代码即可实现】

