定制网站通过JavaScript、css、H5 实现简单的tab栏的切换和复用

目录


一、效果展示

二、定制网站实现的大致原理

1.定制网站我们先通过css 和h5定制网站布局得到最基本的tab栏样式(定制网站有代码参考)

2.定制网站在获得样式,定制网站给我们所需要点击的目标设置,定制网站在获取节点,定制网站设置一个自定义的节点属性index,定制网站通过它在获取点击出现样式的节点,在经过寻找元素,设置全取消,点击相应的节点出现的效果。这里获取节点方式,都是通过点击元素获取父元素,在获得子元素,同级获得兄弟元素,在获取兄弟元素的子元素(笼统的解释,细节部分看代码段的解释)

三、H5的布局

没有特殊的地方,都是基本的写法,只要给定一定的选择器就可以了

  1. <div class="tab">
  2. <div class="nav">
  3. <a href="javascript:;" class="hover">公司新闻</a>
  4. <a href="javascript:;">公司动态</a>
  5. <a href="javascript:;">行业新闻</a>
  6. </div>
  7. <div class="nav_con">
  8. <div>内容</div>
  9. <div>动态</div>
  10. <div>行业</div>
  11. </div>
  12. </div>
  13. <div class="tab">
  14. <div class="nav">
  15. <a href="javascript:;" class="hover">大学</a>
  16. <a href="javascript:;">中学</a>
  17. <a href="javascript:;">小学</a>
  18. </div>
  19. <div class="nav_con">
  20. <div>大学内容</div>
  21. <div>中学内容</div>
  22. <div>小学内容</div>
  23. </div>
  24. </div>

四、CSS样式

为了得到视屏中的样式,需要设置最基本的效果,通过浮动,是元素在同一行,浮动会脱离文档流,可以给设置宽高,可以设置一些外边距,使得好看一些。注意设置出现内容的消失,我们默认只出现第一个。

  1. a{
  2. text-decoration: none;
  3. width: 180px;
  4. height: 30px;
  5. line-height: 30px;
  6. text-align: center;
  7. color: #666;
  8. float: left;
  9. margin-right: 15px;
  10. }
  11. .nav a{
  12. background-color: beige;
  13. }
  14. .nav a.hover{
  15. background-color: blue;
  16. }
  17. .nav_con div:first-child~div{
  18. display: none;
  19. }
  20. .nav::after{
  21. content: '';
  22. display: block;
  23. clear: both;
  24. }
  25. .nav_con{
  26. margin-bottom: 50px;
  27. }

五、JS代码内容

按照顺序来,流程如下

获取元素

通过委派给父亲添加监听事件

先获得当前的父节点,在通过父节点获得所有的子节点

设置排他思想

给每一个子节点加上一个自定义属性 index

获取当前被点击的nav a上面的属性index

获取当前元素的父级元素,在获得父级的兄弟,在找到子元素

当前nav_con 显示内容

当前节点获得hover样式

  1. let navNodes = document.querySelectorAll('.nav');
  2. for(let i=0;i<navNodes.length;i++){
  3. //通过委派给父亲添加监听事件
  4. navNodes[i].addEventListener('click',function(e){
  5. //先获得当前的父节点,在通过父节点获得所有的子节点
  6. let navs = e.target.parentNode.children;
  7. //设置排他思想
  8. for(let j=0;j<navs.length;j++){
  9. navs[j].className='';
  10. //给每一个子节点加上一个自定义属性 index
  11. navs[j].setAttribute("index",j)
  12. }
  13. //获取当前被点击的nav a上面的属性index
  14. let thisIndex = e.target.getAttribute("index");
  15. //获取当前元素的父级元素,在获得父级的兄弟,在找到子元素
  16. let nav_cons = e.target.parentNode.nextElementSibling.children;
  17. for(let j=0;j<nav_cons.length;j++){
  18. nav_cons[j].style.display = "none";
  19. }
  20. //当前nav_con 显示内容
  21. nav_cons[thisIndex].style.display="block"
  22. //当前节点获得hover样式
  23. e.target.className = "hover"
  24. })
  25. }

六、完整代码

  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. a{
  10. text-decoration: none;
  11. width: 180px;
  12. height: 30px;
  13. line-height: 30px;
  14. text-align: center;
  15. color: #666;
  16. float: left;
  17. margin-right: 15px;
  18. }
  19. .nav a{
  20. background-color: beige;
  21. }
  22. .nav a.hover{
  23. background-color: blue;
  24. }
  25. .nav_con div:first-child~div{
  26. display: none;
  27. }
  28. .nav::after{
  29. content: '';
  30. display: block;
  31. clear: both;
  32. }
  33. .nav_con{
  34. margin-bottom: 50px;
  35. }
  36. </style>
  37. </head>
  38. <body>
  39. <div class="tab">
  40. <div class="nav">
  41. <a href="javascript:;" class="hover">公司新闻</a>
  42. <a href="javascript:;">公司动态</a>
  43. <a href="javascript:;">行业新闻</a>
  44. </div>
  45. <div class="nav_con">
  46. <div>内容</div>
  47. <div>动态</div>
  48. <div>行业</div>
  49. </div>
  50. </div>
  51. <div class="tab">
  52. <div class="nav">
  53. <a href="javascript:;" class="hover">大学</a>
  54. <a href="javascript:;">中学</a>
  55. <a href="javascript:;">小学</a>
  56. </div>
  57. <div class="nav_con">
  58. <div>大学内容</div>
  59. <div>中学内容</div>
  60. <div>小学内容</div>
  61. </div>
  62. </div>
  63. <script>
  64. let navNodes = document.querySelectorAll('.nav');
  65. for(let i=0;i<navNodes.length;i++){
  66. //通过委派给父亲添加监听事件
  67. navNodes[i].addEventListener('click',function(e){
  68. //先获得当前的父节点,在通过父节点获得所有的子节点
  69. let navs = e.target.parentNode.children;
  70. for(let j=0;j<navs.length;j++){
  71. navs[j].className='';
  72. //给每一个子节点加上一个自定义属性 index
  73. navs[j].setAttribute("index",j)
  74. }
  75. //获取当前被点击的nav a上面的属性index
  76. let thisIndex = e.target.getAttribute("index");
  77. //获取当前元素的父级元素,在获得父级的兄弟,在找到子元素
  78. let nav_cons = e.target.parentNode.nextElementSibling.children;
  79. for(let j=0;j<nav_cons.length;j++){
  80. nav_cons[j].style.display = "none";
  81. }
  82. //当前nav_con 显示内容
  83. nav_cons[thisIndex].style.display="block"
  84. //当前节点获得hover样式
  85. e.target.className = "hover"
  86. })
  87. }
  88. </script>
  89. </body>
  90. </html>

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发