模块练习-选项卡

编辑: admin 分类: 电脑知识 发布时间: 2023-06-14 来源:互联网
  1. <div class="box">
  2. <div class="type" display="flex"></div>
  3. <div class="content"></div>
  4. </div>
  1. <script type="module">
  2. // import {cates, details, createTab, setBtnStatus, setContentStatus} from './module.js'
  3. import * as tabs from './module.js'
  4. // 获取栏目元素
  5. const type = document.querySelector('.type')
  6. const content = document.querySelector('.content')
  7. // 页面加载时渲染内容
  8. window.onload = tabs.createTab(type, content)
  9. // 利用“事件代理”,将每个按钮点击事件交给父级
  10. type.onclick = ev=>{
  11. tabs.setBtnStatus(ev)
  12. tabs.setContentStatus(ev,ev.target)
  13. }
  14. </script>
  1. // 导航栏
  2. const cates = [
  3. {cid:1, cname:'工艺文件'},
  4. {cid:2, cname:'牌号列表'},
  5. {cid:3, cname:'研究进展'},
  6. ]
  7. // 内容 key必须与栏目的id绑定
  8. const details = [
  9. {
  10. },
  11. ]
  12. // 创建栏目
  13. function createTab(type, content){
  14. // 生成栏目
  15. for(let i=0;i<cates.length;i++){
  16. const btn = document.createElement('button')
  17. // 样式设定
  18. btn.style.fontSize = "30px"
  19. btn.style.margin = "10px"
  20. btn.style.padding = "10px 30px"
  21. btn.style.border = "none"
  22. btn.style.boxShadow = "2px 2px 2px #333" //inset为向内阴影
  23. btn.textContent = cates[i].cname
  24. // 给每个按钮添加一个自定义属性
  25. btn.dataset.key = cates[i].cid
  26. if(i==0){
  27. btn.classList.add('active')
  28. }
  29. type.append(btn)
  30. }
  31. // 生成内容
  32. for(let i=0;i<details.length;i++){
  33. const ul = document.createElement('ul')
  34. // 设置样式
  35. ul.style.margin = "20px 10px"
  36. ul.style.width = "100%"
  37. // 为ul添加自定义属性
  38. ul.dataset.key = details[i].cid
  39. // 默认隐藏,只激活1个
  40. ul.classList.add(i==0?'active':'hidden')
  41. // 循环加载数据
  42. for(let j=0;j<details[i].content.length;j++){
  43. const li = document.createElement('li')
  44. const a = document.createElement('a')
  45. a.style.textDecoration = "none"
  46. a.style.fontSize = "20px"
  47. a.style.padding = "10px"
  48. a.style.lineHeight = "40px"
  49. a.textContent = details[i].content[j].title
  50. a.href = details[i].content[j].url
  51. li.append(a)
  52. ul.append(li)
  53. content.append(ul)
  54. }
  55. }
  56. }
  57. // 设置栏目高亮
  58. function setBtnStatus(ev){
  59. // 去掉所有激活状态
  60. ;[...ev.currentTarget.children].forEach(btn=>btn.classList.remove('active'))
  61. // 激活点击按钮
  62. ev.target.classList.add('active')
  63. }
  64. // 设置栏目对应的内容高亮
  65. function setContentStatus(ev, currentBtn){
  66. const lists = document.querySelectorAll('.content > ul')
  67. lists.forEach(list=>list.classList.replace('active', 'hidden'))
  68. const currList = [...lists].find(list=>list.dataset.key==currentBtn.dataset.key)
  69. currList.classList.replace('hidden', 'active')
  70. }
  71. export {cates, details, createTab, setBtnStatus, setContentStatus}

选项卡效果图

总结:

前段时间学的知识点慢慢可以用起来了,还是很开心的;编程就要用模块,减少重复代码。

【文章原创作者:cc防御 http://www.558idc.com/gfip.html提供,感恩】