批改状态:合格
老师批语:
通过3月29日的学习,了解了模块化式编程,按老师的讲解,模仿完成了以下选项卡代码:
<div class="box"><!-- 栏目 --><div class="type" style="display: flex;"></div><!-- 内容 --><div class="content"></div></div>
<script type="module">// tabs就是一个对象,把导入的成员作为它的属性,全部挂到它上面// tabs相当于命名空间import * as tabs from './tabs.js'//获取栏目元素const type = document.querySelector('.type')const content = document.querySelector('.content')//页面加载成功就自动渲染出来window.onload = tabs.createTab(type,content) //保证页面自动渲染//利用'事件代理'将每个按钮的点击全部委托给div.type来实现type.onclick = ev=>{//1. 设置栏目高亮tabs.setBtnStatus(ev)//2. 激活与当前栏目对应的新闻列表tabs.setContentStatus(ev,ev.target)}</script>
const cates = [{ cid:1, cname:'中国新闻' },{ cid:2, cname:'世界新闻' },{ cid:3, cname:'本地新闻' },]
// 3. 创建栏目和栏目function createTab(type,content){//1. 生成栏目for(let i=0;i<cates.length;i++){// 生成按钮元素const btn = document.createElement('button')btn.textContent = cates[i].cname //为按钮赋值//第一个按钮高亮显示//为每个按钮添加自定义属性btn.dataset.key = cates[i].cidif(i==0){//当索引为0的时候为其添加classbtn.classList.add('active')}type.append(btn) //将按钮添加到type元素中}//2. 生成内容for(let i=0;i<details.length;i++){//创建ullet ul = document.createElement('ul')//为每个ul添加自定义属性ul.dataset.key = details[i].cid// 全部内容加载时,默认全隐藏,只需显示第一组即可// ul.classList.add('hidden')// if(i==0){// ul.classList.replace('hidden','block')// }ul.classList.add(i==0?'active':'hidden')//循环,将与列表对应的内容渲染出来for(let j=0;j<details[i].content.length;j++){//给ul添加lilet a = document.createElement('a')a.textContent = details[i].content[j].titlea.href = details[i].content[j].urla.target ='_blank'let li = document.createElement('li')//给li赋值// li.textContent = details[i].content[j].title//append:父元素调用(追加)//textContent:当前元素,包括js,css 等隐藏内容html代码li.append(a)ul.append(li)content.append(ul)}// ul.append(li)}}// 4. 自动设置栏目高亮function setBtnStatus(ev){//1. 去掉所有按钮的激活样式// 遍历类数组(...变成真数组):forEach;[...ev.currentTarget.children].forEach(btn=>btn.classList.remove('active'))//2. 为当前用户正在点击的按钮加上高亮activeev.target.classList.add('active')}// 5. 设置与栏目对应的内容激活状态/*** 参数:* 1 . 事件对象:event* 2.当天正在被点击的按钮(选项):currentBtn:*/function setContentStatus(ev, currentBtn){//获取所有内容块ulconst lists = document.querySelectorAll('.content > ul')// 1. 将激活的列表全部隐藏// lists.classList.replace('actice','hidden')// 2.将激活的列表全部隐藏,active->hidden// 遍历数组直接替换lists.forEach(list => list.classList.replace('active','hidden'))//2.为当前用户正在点击的按钮加上高亮// 找到与栏目ID相同的新闻ul//find()满足条件的第一个const currList = [...lists].find(list=>list.dataset.key==currentBtn.dataset.key)console.log(currList);// 3. 设置当前列表为激活状态activecurrList.classList.replace('hidden','active')}
export{cates,details,createTab,setBtnStatus, setContentStatus}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号