Blogger Information
Blog 27
fans 1
comment 2
visits 90419
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
只用JS写选项卡
          
Original
602 people have browsed it
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport"
  6. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  7. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  8. <title>选项卡</title>
  9. <style>
  10. .box >.nav{
  11. display: grid;
  12. grid-template-columns: repeat(10,1fr);
  13. }
  14. /*隐藏*/
  15. .hidden{display: none}
  16. /*显示*/
  17. .show{ background-color: lightgreen; }
  18. </style>
  19. </head>
  20. <body>
  21. <div class="box">
  22. <!-- 栏目-->
  23. <div class="nav"></div>
  24. <!-- 内容部分-->
  25. <div class="content"></div>
  26. </div>
  27. <script type="module">
  28. // 1. 导入模块
  29. import {createTab,setBtnStatus, setContentStatus} from "./ceshimodules/mymodules.js";
  30. // 获取导航栏
  31. let navs = document.querySelector('.nav');
  32. // 获取内容区
  33. let content = document.querySelector('.content')
  34. // console.log(content)
  35. // 2. 页面加载完成,创建栏目和对应的内容
  36. // 游览器加载完毕执行js ,传入导航栏和内容
  37. window.onload = function (){
  38. createTab(navs,content)
  39. }
  40. // 3. 点击栏目时,设置按钮的状态,与按钮对应的内容的状态
  41. // 事件委托(事件冒泡)
  42. navs.onclick = function (ev){
  43. // console.log(ev.currentTarget)
  44. // console.log(ev.target)
  45. // 1.当前的按钮设置高亮
  46. setBtnStatus(ev)
  47. // 2.与按钮对应的内容显示出来
  48. setContentStatus(ev,ev.target)
  49. }
  50. </script>
  51. </body>
  52. </html>

JS部分

  1. // 栏目数据
  2. const lanmu = [
  3. {'cid': 1, t1: '广东新闻'},
  4. {'cid': 2, t1: '深圳新闻'},
  5. {'cid': 3, t1: '佛山新闻'},
  6. ]
  7. // 内容数据
  8. const contentLists = [
  9. {
  10. id: 1,
  11. cid: 1,
  12. title: '标题1',
  13. content: [
  14. {
  15. title: '内容1',
  16. url: 'http://baidu.com'
  17. },
  18. {
  19. title: '内容1',
  20. url: 'http://baidu.com'
  21. },
  22. {
  23. title: '内容1',
  24. url: 'http://baidu.com'
  25. }
  26. ]
  27. },
  28. {
  29. id: 2,
  30. cid: 2,
  31. title: '标题2',
  32. content: [
  33. {
  34. title: '内容2',
  35. url: 'http://baidu.com'
  36. },
  37. {
  38. title: '内容2',
  39. url: 'http://baidu.com'
  40. },
  41. {
  42. title: '内容2',
  43. url: 'http://baidu.com'
  44. }
  45. ]
  46. },
  47. {
  48. id: 3,
  49. cid: 3,
  50. title: '标题3',
  51. content: [
  52. {
  53. title: '内容3',
  54. url: 'http://baidu.com'
  55. },
  56. {
  57. title: '内容3',
  58. url: 'http://baidu.com'
  59. },
  60. {
  61. title: '内容3',
  62. url: 'http://baidu.com'
  63. }
  64. ]
  65. },
  66. ]
  67. function createTab(navs, content) {
  68. // 1. 生成样目
  69. for (let i = 0; i < lanmu.length; i++) {
  70. let but1 = document.createElement('button');
  71. // 生成每一个button
  72. // button 的文字
  73. but1.textContent = lanmu[i]['t1'];
  74. but1.dataset.key = lanmu[i].cid
  75. if (i === 0) but1.classList.add('show')
  76. navs.append(but1)
  77. }
  78. // 2. 生成内容
  79. for (let i = 0; i < contentLists.length; i++) {
  80. // (1) 创建列表 <ul>
  81. let ul = document.createElement('ul');
  82. // (2) 添加列表索引<ul data-key>
  83. ul.dataset.key = contentLists[i]['cid']
  84. // (3) 默认显示第1个,其它隐藏
  85. ul.classList.add(i === 0 ? 'show' : 'hidden')
  86. // (4) 生成子元素<li><a>用于显示每一条数据
  87. for (let l = 0; l < contentLists[i].content.length; l++) {
  88. // 1. 生成 <li>
  89. let li = document.createElement('li');
  90. // 2. 生成 <a>
  91. let a = document.createElement('a')
  92. // 3. a.href
  93. // console.log('111',contentLists[i].content[l].url)
  94. a.href = contentLists[i].content[l].url
  95. // 4. a.textContent
  96. a.textContent = contentLists[i].content[l].title
  97. // console.log(contentLists[i].content[l].title)
  98. // 5. 将<a>添加到<li>
  99. li.append(a)
  100. // 6. <li>添加到<ul>
  101. ul.append(li)
  102. // 7. <ul>添加到内容容器中.content
  103. content.append(ul)
  104. }
  105. }
  106. }
  107. function setBtnStatus(ev){
  108. // 1.当前的按钮
  109. let currentBtn = ev.target;
  110. // console.log('当前的按钮',currentBtn)
  111. // 2. 去掉所有按钮的show, 遍历
  112. // ev.currentTarget: 事件绑定主体 , 父元素
  113. // console.log(ev.currentTarget.children);
  114. // console.log(typeof [...ev.currentTarget.children]);
  115. // console.log([...ev.currentTarget.children]);
  116. [...ev.currentTarget.children].forEach(function (btn){btn.classList.remove('show')})
  117. // 3.设置当前按钮的亮度
  118. currentBtn.classList.add('show')
  119. }
  120. function setContentStatus(ev,currentBtn){
  121. // 1. 获取所有列表
  122. let lists = document.querySelectorAll('.content>ul')
  123. // 2. 去掉所有列表show,换成hidden
  124. lists.forEach( list=>list.classList.replace('show','hidden'))
  125. // 3. 找到与栏目key对应的列表
  126. const gongtongdain = [...lists].find(list => list.dataset.key == currentBtn.dataset.key);
  127. // console.log(gongtongdain)
  128. // 4. 将要显示的列表,加上active,显示出来
  129. // gongtongdain.classList.replace()
  130. gongtongdain.classList.replace('hidden','show')
  131. }
  132. export {createTab,setBtnStatus, setContentStatus}

Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:完成的很好, 继续加油
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!