利用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随即打乱数组实现代码
Dec 03 Javascript
jquery遍历checkbox的注意事项说明
Feb 21 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
Jul 08 Javascript
javascript判断网页是关闭还是刷新
Sep 12 Javascript
基于Node.js实现nodemailer邮件发送
Jan 26 Javascript
Bootstrap3 datetimepicker控件使用实例
Dec 13 Javascript
微信小程序实现列表下拉刷新上拉加载
Jul 29 Javascript
javascript实现抢购倒计时程序
Aug 26 Javascript
JS实现点餐自动选择框(案例分析)
Dec 10 Javascript
JavaScript中this函数使用实例解析
Feb 21 Javascript
微信小程序实现滑动操作代码
Apr 23 Javascript
JavaScript高级程序设计之基本引用类型
Nov 17 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 setcookie() cannot modify header information 的解决方法
2009/01/09 PHP
PHP删除HTMl标签的实现代码
2013/06/30 PHP
浅谈php命令行用法
2015/02/04 PHP
PHP读取zip文件的方法示例
2016/11/17 PHP
javascript 清空form表单中某种元素的值
2009/12/26 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
Bootstrap项目实战之子栏目资讯内容
2016/04/25 Javascript
js选择器全面解析
2016/06/27 Javascript
js实现类bootstrap模态框动画
2017/02/07 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
vue 中自定义指令改变data中的值
2017/06/02 Javascript
浅谈express 中间件机制及实现原理
2017/08/31 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
2019/04/10 Javascript
JS中call()和apply()的功能及用法实例分析
2019/06/28 Javascript
layui 选择列表,打勾,点击确定返回数据的例子
2019/09/02 Javascript
js实现无缝轮播图特效
2020/05/09 Javascript
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
Python编程之黑板上排列组合,你舍得解开吗
2017/10/30 Python
python实现批量按比例缩放图片效果
2018/03/30 Python
python定时检测无响应进程并重启的实例代码
2019/04/22 Python
python绘制地震散点图
2019/06/18 Python
python 一个figure上显示多个图像的实例
2019/07/08 Python
django自定义非主键自增字段类型详解(auto increment field)
2020/03/30 Python
Selenium元素定位的30种方式(史上最全)
2020/05/11 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
POP文化和音乐灵感的时尚:Hot Topic
2019/06/19 全球购物
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
实习生体会的自我评价范文
2013/11/28 职场文书
百度吧主申请感言
2014/01/12 职场文书
售后服务承诺书
2014/03/26 职场文书
大学生党员个人对照检查材料范文
2014/09/25 职场文书
学校三八妇女节活动总结
2015/02/06 职场文书
spring cloud gateway中如何读取请求参数
2021/07/15 Java/Android
SSM VUE Axios详解
2021/10/05 Vue.js