利用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 相关文章推荐
js判断浏览器的比较全的代码
Feb 13 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
Aug 21 Javascript
Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
js完美解决IE6不支持position:fixed的bug
Apr 24 Javascript
基于jquery实现表格无刷新分页
Jan 07 Javascript
jQuery内容折叠效果插件用法实例分析(附demo源码)
Apr 28 Javascript
对于input 框限定输入值为浮点型的js代码
Sep 25 Javascript
webpack配置导致字体图标无法显示的解决方法
Mar 06 Javascript
一种angular的方法级的缓存注解(装饰器)
Mar 13 Javascript
在vue中动态添加class类进行显示隐藏实例
Nov 09 Javascript
javascript实现图片轮换动作方法
Aug 07 Javascript
vue3引入highlight.js进行代码高亮的方法实例
Apr 08 Vue.js
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中设置index.php文件为只读的方法
2013/02/06 PHP
php+ajax实现的点击浏览量加1
2015/04/16 PHP
php判断表是否存在的方法
2015/06/18 PHP
使用Appcan客户端自动更新PHP版本号(全)
2015/07/31 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
PHP xpath提取网页数据内容代码解析
2020/07/16 PHP
JavaScript使用cookie
2007/02/02 Javascript
jQuery调用WebService的实现代码
2011/06/19 Javascript
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
node.js中的console.time方法使用说明
2014/12/09 Javascript
JavaScript中split与join函数的进阶使用技巧
2016/05/03 Javascript
jQuery实现点击查看大图并以弹框的形式居中
2016/08/08 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
2019/09/05 Javascript
layer.prompt使文本框为空的情况下也能点击确定的方法
2019/09/24 Javascript
Vue Cli3 打包配置并自动忽略console.log语句的方法
2020/04/23 Javascript
Linux环境下MySQL-python安装过程分享
2015/02/02 Python
Python队列的定义与使用方法示例
2017/06/24 Python
Python iter()函数用法实例分析
2018/03/17 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
2019/08/16 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
python 下载m3u8视频的示例代码
2020/11/11 Python
有关HTML5 Video对象的ontimeupdate事件(Chrome上无效)的问题
2013/07/19 HTML / CSS
办公室副主任岗位职责
2013/11/25 职场文书
党员干部承诺书范文
2014/03/25 职场文书
教师爱岗敬业演讲稿
2014/05/05 职场文书
商务经理岗位职责
2014/08/03 职场文书
2015年全国爱眼日活动小结
2015/02/27 职场文书
社区国庆节活动总结
2015/03/23 职场文书
幼儿园托班开学寄语(2016秋季)
2015/12/03 职场文书
关于企业的执行力标语大全
2020/01/06 职场文书
MySQL千万级数据表的优化实战记录
2021/08/04 MySQL
Go 语言中 20 个占位符的整理
2021/10/16 Golang
磁贴还没死, 微软Win11可修改注册表找回Win10开始菜单
2021/11/21 数码科技
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android