模仿完成选项卡(必须用模块)

编辑: admin 分类: 电脑知识 发布时间: 2023-06-14 来源:互联网

通过3月29日的学习,了解了模块化式编程,按老师的讲解,模仿完成了以下选项卡代码:

html页代码
  1. <div class="box">
  2. <!-- 栏目 -->
  3. <div class="type" style="display: flex;"></div>
  4. <!-- 内容 -->
  5. <div class="content"></div>
  6. </div>
  1. <script type="module">
  2. // tabs就是一个对象,把导入的成员作为它的属性,全部挂到它上面
  3. // tabs相当于命名空间
  4. import * as tabs from './tabs.js'
  5. //获取栏目元素
  6. const type = document.querySelector('.type')
  7. const content = document.querySelector('.content')
  8. //页面加载成功就自动渲染出来
  9. window.onload = tabs.createTab(type,content) //保证页面自动渲染
  10. //利用'事件代理'将每个按钮的点击全部委托给div.type来实现
  11. type.onclick = ev=>{
  12. //1. 设置栏目高亮
  13. tabs.setBtnStatus(ev)
  14. //2. 激活与当前栏目对应的新闻列表
  15. tabs.setContentStatus(ev,ev.target)
  16. }
  17. </script>
选项卡模块(1). 选项卡
  1. const cates = [
  2. { cid:1, cname:'中国新闻' },
  3. { cid:2, cname:'世界新闻' },
  4. { cid:3, cname:'本地新闻' },
  5. ]
(2). 其他js
  1. // 3. 创建栏目和栏目
  2. function createTab(type,content){
  3. //1. 生成栏目
  4. for(let i=0;i<cates.length;i++){
  5. // 生成按钮元素
  6. const btn = document.createElement('button')
  7. btn.textContent = cates[i].cname //为按钮赋值
  8. //第一个按钮高亮显示
  9. //为每个按钮添加自定义属性
  10. btn.dataset.key = cates[i].cid
  11. if(i==0){
  12. //当索引为0的时候为其添加class
  13. btn.classList.add('active')
  14. }
  15. type.append(btn) //将按钮添加到type元素中
  16. }
  17. //2. 生成内容
  18. for(let i=0;i<details.length;i++){
  19. //创建ul
  20. let ul = document.createElement('ul')
  21. //为每个ul添加自定义属性
  22. ul.dataset.key = details[i].cid
  23. // 全部内容加载时,默认全隐藏,只需显示第一组即可
  24. // ul.classList.add('hidden')
  25. // if(i==0){
  26. // ul.classList.replace('hidden','block')
  27. // }
  28. ul.classList.add(i==0?'active':'hidden')
  29. //循环,将与列表对应的内容渲染出来
  30. for(let j=0;j<details[i].content.length;j++){
  31. //给ul添加li
  32. let a = document.createElement('a')
  33. a.textContent = details[i].content[j].title
  34. a.href = details[i].content[j].url
  35. a.target ='_blank'
  36. let li = document.createElement('li')
  37. //给li赋值
  38. // li.textContent = details[i].content[j].title
  39. //append:父元素调用(追加)
  40. //textContent:当前元素,包括js,css 等隐藏内容html代码
  41. li.append(a)
  42. ul.append(li)
  43. content.append(ul)
  44. }
  45. // ul.append(li)
  46. }
  47. }
  48. // 4. 自动设置栏目高亮
  49. function setBtnStatus(ev){
  50. //1. 去掉所有按钮的激活样式
  51. // 遍历类数组(...变成真数组):forEach
  52. ;[...ev.currentTarget.children].forEach(btn=>btn.classList.remove('active'))
  53. //2. 为当前用户正在点击的按钮加上高亮active
  54. ev.target.classList.add('active')
  55. }
  56. // 5. 设置与栏目对应的内容激活状态
  57. /**
  58. * 参数:
  59. * 1 . 事件对象:event
  60. * 2.当天正在被点击的按钮(选项):currentBtn:
  61. */
  62. function setContentStatus(ev, currentBtn){
  63. //获取所有内容块ul
  64. const lists = document.querySelectorAll('.content > ul')
  65. // 1. 将激活的列表全部隐藏
  66. // lists.classList.replace('actice','hidden')
  67. // 2.将激活的列表全部隐藏,active->hidden
  68. // 遍历数组直接替换
  69. lists.forEach(list => list.classList.replace('active','hidden'))
  70. //2.为当前用户正在点击的按钮加上高亮
  71. // 找到与栏目ID相同的新闻ul
  72. //find()满足条件的第一个
  73. const currList = [...lists].find(list=>list.dataset.key==currentBtn.dataset.key)
  74. console.log(currList);
  75. // 3. 设置当前列表为激活状态active
  76. currList.classList.replace('hidden','active')
  77. }
导出方法
  1. export{cates,details,createTab,setBtnStatus, setContentStatus}
【本文由:高防cdn http://www.558idc.com/gfcdn.html 复制请保留原URL】