利用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 相关文章推荐
文本框根据输入内容自适应高度的代码
Oct 24 Javascript
Prototype源码浅析 String部分(一)之有关indexOf优化
Jan 15 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
Jun 08 Javascript
node.js中的path.basename方法使用说明
Dec 09 Javascript
使用mini-define实现前端代码的模块化管理
Dec 25 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
Mar 10 Javascript
JavaScript简单获取页面图片原始尺寸的方法
Jun 21 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
Jan 20 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
Aug 04 Javascript
浅谈vue中数据双向绑定的实现原理
Sep 14 Javascript
vue 项目build错误异常的解决方法
Apr 22 Javascript
javascript使用链接跨域下载图片
Nov 01 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
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
使用swoole扩展php websocket示例
2014/02/13 PHP
JavaScipt基本教程之JavaScript语言的基础
2008/01/16 Javascript
JQuery Dialog的内存泄露问题解决方法
2010/06/18 Javascript
Javascript 按位取反运算符 (~)
2014/02/04 Javascript
JS实现点击按钮后框架内载入不同网页的方法
2015/05/05 Javascript
JavaScript实现算术平方根算法-代码超简单
2015/09/11 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
纯JS实现表单验证实例
2016/12/24 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
2017/03/21 Javascript
mui框架移动开发初体验详解
2017/10/11 Javascript
js提取中文拼音首字母的封装工具类
2018/03/12 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
小程序实现密码输入框
2020/11/16 Javascript
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
python文件读写操作与linux shell变量命令交互执行的方法
2015/01/14 Python
python使用fork实现守护进程的方法
2017/11/16 Python
使用Python处理Excel表格的简单方法
2018/06/07 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
Python对象与引用的介绍
2019/01/24 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
2019/07/03 Python
Python3+Appium实现多台移动设备操作的方法
2019/07/05 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
python实现图片转字符画
2021/02/19 Python
英国领先的亚洲旅游专家:Wendy Wu Tours
2018/01/21 全球购物
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
新闻记者实习自我鉴定
2013/09/19 职场文书
创先争优承诺书范文
2014/03/31 职场文书
2015年学校团委工作总结
2015/05/26 职场文书
暑期工社会实践报告
2015/07/13 职场文书
html5移动端禁止长按图片保存的实现
2021/04/20 HTML / CSS
jQuery ajax - getScript() 方法和getJSON方法
2021/05/14 jQuery