利用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 相关文章推荐
Jquery下判断Id是否存在的代码
Jan 06 Javascript
JavaScript对象之间的转换 jQuery对象和原声DOM
Mar 07 Javascript
javascript中自定义对象的属性方法分享
Jul 12 Javascript
JavaScript 基本概念
Jan 20 Javascript
js树插件zTree获取所有选中节点数据的方法
Jan 28 Javascript
标准的js无缝滚动效果
Aug 30 Javascript
原生js实现轮播图的示例代码
Feb 20 Javascript
在vue中读取本地Json文件的方法
Sep 06 Javascript
微信小程序之裁剪图片成圆形的实现代码
Oct 11 Javascript
layui弹出框Tab选项卡的示例代码
Sep 04 Javascript
es6数组的flat(),flatMap()函数用法实例分析
Apr 18 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
Dec 03 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中显示格式化的用户输入
2006/10/09 PHP
dedecms系统常用术语汇总
2007/04/03 PHP
初学PHP的朋友 经常问的一些问题。不断更新
2011/08/11 PHP
php利用反射实现插件机制的方法
2015/03/14 PHP
PHP实现微信发红包程序
2015/08/24 PHP
JavaScript实现找出字符串中第一个不重复的字符
2014/09/03 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
BootStrap智能表单实战系列(七)验证的支持
2016/06/13 Javascript
JavaScript的字符串方法汇总
2016/07/31 Javascript
JS ES6中setTimeout函数的执行上下文示例
2017/04/27 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
详解vue的双向绑定原理及实现
2019/05/05 Javascript
如何实现双向绑定mvvm的原理实现
2019/05/28 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
js+canvas实现转盘效果(两个版本)
2020/09/13 Javascript
[01:13]2015国际邀请赛线下观战现场
2015/08/08 DOTA
初学python数组的处理代码
2011/01/04 Python
python实现分析apache和nginx日志文件并输出访客ip列表的方法
2015/04/04 Python
Python中atexit模块的基本使用示例
2015/07/08 Python
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
Python实现的rsa加密算法详解
2018/01/24 Python
Python使用装饰器模拟用户登陆验证功能示例
2018/08/24 Python
解决Python中pandas读取*.csv文件出现编码问题
2019/07/12 Python
django数据模型(Model)的字段类型解析
2019/12/25 Python
python 读取串口数据的示例
2020/11/09 Python
html5需遵循的6个设计原则
2016/04/27 HTML / CSS
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
印度最大的旅游网站:MakeMyTrip
2016/10/05 全球购物
自动化专业个人求职信范文
2013/11/29 职场文书
学生期末评语大全
2014/04/30 职场文书
安全标兵事迹材料
2014/08/17 职场文书
个人求职自荐信范文
2015/03/06 职场文书
党支部考察意见范文
2015/06/02 职场文书
Golang 实现超大文件读取的两种方法
2021/04/27 Golang
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python