03.二级菜单-过渡效果.html 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. * {
  10. margin: 0;
  11. padding: 0;
  12. list-style-type: none;
  13. }
  14. a,
  15. img {
  16. border: 0;
  17. text-decoration: none;
  18. }
  19. body {
  20. font: 12px/180% Arial, Helvetica, sans-serif, '新宋体';
  21. }
  22. </style>
  23. <link rel="stylesheet" type="text/css" href="css/sdmenu.css" />
  24. <script src="js/tools.js"></script>
  25. <script>
  26. window.onload = function () {
  27. /**
  28. * 我们的每一个菜单都是一个div
  29. * 当div具有collapsed这个类时,div就是折叠的状态
  30. * 当div没有这个类时,div就是展开的状态
  31. */
  32. /**
  33. * 点击菜单,切换菜单的显示状态
  34. */
  35. //获取所有的class为menuSpan的元素
  36. var menuSpan = document.querySelectorAll('.menuSpan');
  37. // alert(menuSpan.length);//4
  38. //定义一个变量,来保存当前打开的菜单
  39. var openDiv = menuSpan[0].parentNode;
  40. //为span绑定单击响应函数
  41. for (var i = 0; i < menuSpan.length; i++) {
  42. menuSpan[i].onclick = function () {
  43. //this代表当前点击的span
  44. //获取当前span的父元素
  45. var parentDiv = this.parentNode;
  46. //切换菜单的显示状态
  47. toggleMenu(parentDiv);
  48. //判断openDiv和parentDIV是否相同
  49. if (openDiv != parentDiv && !hasClass(openDiv, 'collapsed')) {
  50. //打开菜单以后,应该关闭之前打开的菜单
  51. // addClass(openDiv, 'collapsed');
  52. //为了可以统一处理动画效果,我们希望在这里将addClass改为toggleClass
  53. /**
  54. * 此处toggleClass()不需要有移除的功能
  55. * 所以在判断条件里需再增加一个条件,用来判断是否有collapsed
  56. * !hasClass(openDiv,'collapsed')
  57. */
  58. // toggleClass(openDiv, 'collapsed');
  59. //切换菜单的显示状态
  60. toggleMenu(openDiv);
  61. };
  62. //修改openDiv为当前打开的菜单
  63. openDiv = parentDiv;
  64. };
  65. };
  66. /**
  67. * 用来切换菜单的折叠和显示状态
  68. */
  69. function toggleMenu(obj) {
  70. //在切换类之前,获取元素的高度
  71. var begin = obj.offsetHeight;
  72. //切换parentDiv的显示
  73. toggleClass(obj, 'collapsed');
  74. //在切换类之后获取一个高度
  75. var end = obj.offsetHeight;
  76. // console.log('begin='+begin,'end='+end);
  77. //动画效果就是将高度从begin向end过渡
  78. //将元素的高度重置为begin
  79. obj.style.height = begin + 'px';
  80. //执行动画,从begin向end过渡
  81. move(obj, 'height', end, 20, function () {
  82. //动画执行完毕,内联样式已经没有存在的意义了,所以需要删除
  83. obj.style.height = '';
  84. });
  85. };
  86. };
  87. </script>
  88. </head>
  89. <body>
  90. <div id="my_menu" class="sdmenu">
  91. <div>
  92. <span class="menuSpan">在线工具</span>
  93. <a href="#">图像优化</a>
  94. <a href="#">收藏夹图标生成器</a>
  95. <a href="#">邮件</a>
  96. <a href="#">htaccess密码</a>
  97. <a href="#">梯度图像</a>
  98. <a href="#">按钮生成器</a>
  99. </div>
  100. <div class="collapsed">
  101. <span class="menuSpan">支持我们</span>
  102. <a href="#">推荐我们</a>
  103. <a href="#">链接我们</a>
  104. <a href="#">网络资源</a>
  105. </div>
  106. <div class="collapsed">
  107. <span class="menuSpan">合作伙伴</span>
  108. <a href="#">JavaScript工具包</a>
  109. <a href="#">CSS驱动</a>
  110. <a href="#">CodingForums</a>
  111. <a href="#">CCS例子</a>
  112. </div>
  113. <div class="collapsed">
  114. <span class="menuSpan">测试电流</span>
  115. <a href="#">Current or not</a>
  116. <a href="#">Current or not</a>
  117. <a href="#">Current or not</a>
  118. <a href="#">Current or not</a>
  119. </div>
  120. </div>
  121. </body>
  122. </html>