利用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 date对象的减法处理实现代码
Dec 28 Javascript
学习JavaScript设计模式之模板方法模式
Jan 20 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
Jul 27 Javascript
js获取上传文件的绝对路径实现方法
Aug 02 Javascript
javascript如何创建对象
Aug 29 Javascript
js 打开新页面在屏幕中间的实现方法
Nov 02 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
Mar 09 Javascript
微信小程序 图片绝对定位(背景图片)
Apr 05 Javascript
了解VUE的render函数的使用
Jun 08 Javascript
AngularJS表单验证功能
Oct 19 Javascript
分析JavaScript数组操作难点
Dec 18 Javascript
vue elementui el-form rules动态验证的实例代码详解
May 23 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的FTP学习(二)[转自奥索]
2006/10/09 PHP
一个php作的文本留言本的例子(六)
2006/10/09 PHP
PHP 验证码不显示只有一个小红叉的解决方法
2013/09/30 PHP
对PHP语言认识上需要避免的10大误区
2014/06/12 PHP
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
php转换上传word文件为PDF的方法【基于COM组件】
2019/06/10 PHP
IE 上下滚动展示模仿Marquee机制
2009/12/20 Javascript
一个javascript图片阅览组件
2010/11/09 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
全面解析Bootstrap中Carousel轮播的使用方法
2016/06/13 Javascript
XMLHttpRequest Level 2 使用指南
2016/08/26 Javascript
js实现带三角符的手风琴效果
2017/03/01 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
vue + element-ui实现简洁的导入导出功能
2017/12/22 Javascript
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
bootstrap中日历范围选择插件daterangepicker的使用详解
2018/04/17 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
vue2 设置router-view默认路径的实例
2018/09/20 Javascript
微信运维交互机器人的示例代码
2018/11/12 Javascript
JS实现根据数组对象的某一属性排序操作示例
2019/01/14 Javascript
javascript设计模式 ? 装饰模式原理与应用实例分析
2020/04/14 Javascript
vue和H5 draggable实现拖拽并替换效果
2020/07/29 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
逐行分析鸿蒙系统的 JavaScript 框架(推荐)
2020/09/17 Javascript
记一次vue跨域的解决
2020/10/21 Javascript
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
程序员写Python时的5个坏习惯,你有几条?
2018/11/26 Python
pandas数据拼接的实现示例
2020/04/16 Python
数以千计的折扣工业产品:ESE Direct
2018/05/20 全球购物
单位人事专员介绍信
2014/01/11 职场文书
车辆工程专业求职信
2014/06/14 职场文书
企业党建工作汇报材料
2014/08/19 职场文书
世界遗产导游词
2015/02/13 职场文书
员工辞职信范文
2015/03/02 职场文书
雷锋之歌观后感
2015/06/10 职场文书
sql server偶发出现死锁的解决方法
2022/04/10 SQL Server