利用Js+Css实现折纸动态导航效果实例源码


Posted in Javascript onJanuary 25, 2017

先来看看第一种实现方式

效果图如下:

利用Js+Css实现折纸动态导航效果实例源码

利用Js+Css实现折纸动态导航效果实例源码

不再采用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>

第二种实现方式

效果图如下:

利用Js+Css实现折纸动态导航效果实例源码

利用Js+Css实现折纸动态导航效果实例源码

这个原先是隐藏的,点击后才展开。

通过关键帧控制每个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>

总结

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

Javascript 相关文章推荐
【消息提示组件】,兼容IE6/7&amp;&amp;FF2
Sep 04 Javascript
基于jquery的固定表头和列头的代码
May 03 Javascript
基于JavaScript 声明全局变量的三种方式详解
May 07 Javascript
动态加载js、css等文件跨iframe实现
Feb 24 Javascript
JavaScript立即执行函数的三种不同写法
Sep 05 Javascript
jquery实现多条件筛选特效代码分享
Aug 28 Javascript
jQuery组件easyui对话框实现代码
Aug 25 Javascript
简单实现jQuery多选框功能
Jan 09 Javascript
AngularJS实用基础知识_入门必备篇(推荐)
Jul 10 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
Mar 01 Javascript
Webpack的dll功能使用
Jun 28 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
Nov 19 Javascript
jquery实现拖动效果(代码分享)
Jan 25 #Javascript
angular forEach方法遍历源码解读
Jan 25 #Javascript
three.js实现围绕某物体旋转
Jan 25 #Javascript
基于Marquee.js插件实现的跑马灯效果示例
Jan 25 #Javascript
angular和BootStrap3实现购物车功能
Jan 25 #Javascript
jquery 实现复选框的全选操作实例代码
Jan 24 #Javascript
谈谈JavaScript数组常用方法总结
Jan 24 #Javascript
You might like
php discuz 主题表和回帖表的设计
2009/03/13 PHP
PHP 进程锁定问题分析研究
2009/11/24 PHP
php数组声明、遍历、数组全局变量使用小结
2013/06/05 PHP
PHP随机生成随机个数的字母组合示例
2014/01/14 PHP
php四种定界符详解
2017/02/16 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
2017/09/29 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
2019/12/02 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
js通过更改按钮的显示样式实现按钮的滑动效果
2014/04/23 Javascript
javascript+canvas制作九宫格小程序
2014/12/28 Javascript
js实现发送验证码后的倒计时功能
2015/05/28 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
React性能优化系列之减少props改变的实现方法
2019/01/17 Javascript
JavaScript中的函数式编程详解
2020/08/22 Javascript
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
浅谈Python 集合(set)类型的操作——并交差
2016/06/30 Python
Python读取指定目录下指定后缀文件并保存为docx
2017/04/23 Python
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
Python数据分析之双色球中蓝红球分析统计示例
2018/02/03 Python
python去掉空白行的多种实现代码
2018/03/19 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
使用python编写一个语音朗读闹钟功能的示例代码
2020/07/14 Python
python爬虫搭配起Bilibili唧唧的流程分析
2020/12/01 Python
HTML5 audio标签使用js进行播放控制实例
2015/04/24 HTML / CSS
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
PREMIUM-MALL法国:行李、箱包及配件在线
2019/05/30 全球购物
教师自荐书
2013/10/08 职场文书
聚美优品广告词改编
2014/03/14 职场文书
文明礼貌演讲稿
2014/05/12 职场文书
口才训练演讲稿范文
2014/09/16 职场文书
师德师风个人整改措施
2014/10/27 职场文书
2015年社区计生工作总结
2015/04/21 职场文书