利用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中confirm,alert,prompt函数使用区别分析
Apr 01 Javascript
Jquery实现简单的动画效果代码
Mar 18 Javascript
Javascript页面添加到收藏夹的简单方法
Aug 07 Javascript
jQuery实现表单提交时判断的方法
Dec 13 Javascript
jquery遍历函数siblings()用法实例
Dec 24 Javascript
JavaScript设计模式初探
Jan 07 Javascript
Django与Vue语法的冲突问题完美解决方法
Dec 14 Javascript
layui结合form,table的全选、反选v1.0示例讲解
Aug 15 Javascript
VueJS 组件参数名命名与组件属性转化问题
Dec 03 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
Jul 05 Javascript
JavaScript闭包相关知识解析
Oct 19 Javascript
vue实现图片按比例缩放问题操作
Aug 11 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 session_start()出错原因分析及解决方法
2013/10/28 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
2019/07/08 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
2013/06/04 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
jQuery创建DOM元素实例解析
2015/01/19 Javascript
js实现从中间开始往上下展开网页窗口的方法
2015/03/02 Javascript
JavaScript实现购物车基本功能
2017/07/21 Javascript
javascript cookie的基本操作(添加和删除)
2017/07/24 Javascript
JS使用百度地图API自动获取地址和经纬度操作示例
2019/04/16 Javascript
前端Vue项目详解--初始化及导航栏
2019/06/24 Javascript
Smartour 让网页导览变得更简单(推荐)
2019/07/19 Javascript
JS实现网页时钟特效
2020/03/25 Javascript
js+canvas实现五子棋小游戏
2020/08/02 Javascript
Python中datetime模块参考手册
2017/01/13 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
python生成tensorflow输入输出的图像格式的方法
2018/02/12 Python
Python3.5 处理文本txt,删除不需要的行方法
2018/12/10 Python
利用python numpy+matplotlib绘制股票k线图的方法
2019/06/26 Python
python 缺失值处理的方法(Imputation)
2019/07/02 Python
Python基于OpenCV实现人脸检测并保存
2019/07/23 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
深入了解Python 方法之类方法 &amp; 静态方法
2020/08/17 Python
CSS 说明横向进度条最后显示文字的实现代码
2020/11/10 HTML / CSS
Linux文件系统类型
2012/02/15 面试题
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
帮一个朋友写的求职信
2014/08/09 职场文书
MySQL 十大常用字符串函数详解
2021/06/30 MySQL
MySQL数据库中的锁、解锁以及删除事务
2022/05/06 MySQL
Python实现Matplotlib,Seaborn动态数据图
2022/05/06 Python