
批改狀態(tài):合格
老師批語:完成的很好, 繼續(xù)加油
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>選項卡</title>
<style>
.box >.nav{
display: grid;
grid-template-columns: repeat(10,1fr);
}
/*隱藏*/
.hidden{display: none}
/*顯示*/
.show{ background-color: lightgreen; }
</style>
</head>
<body>
<div class="box">
<!-- 欄目-->
<div class="nav"></div>
<!-- 內容部分-->
<div class="content"></div>
</div>
<script type="module">
// 1. 導入模塊
import {createTab,setBtnStatus, setContentStatus} from "./ceshimodules/mymodules.js";
// 獲取導航欄
let navs = document.querySelector('.nav');
// 獲取內容區(qū)
let content = document.querySelector('.content')
// console.log(content)
// 2. 頁面加載完成,創(chuàng)建欄目和對應的內容
// 游覽器加載完畢執(zhí)行js ,傳入導航欄和內容
window.onload = function (){
createTab(navs,content)
}
// 3. 點擊欄目時,設置按鈕的狀態(tài),與按鈕對應的內容的狀態(tài)
// 事件委托(事件冒泡)
navs.onclick = function (ev){
// console.log(ev.currentTarget)
// console.log(ev.target)
// 1.當前的按鈕設置高亮
setBtnStatus(ev)
// 2.與按鈕對應的內容顯示出來
setContentStatus(ev,ev.target)
}
</script>
</body>
</html>
// 欄目數(shù)據(jù)
const lanmu = [
{'cid': 1, t1: '廣東新聞'},
{'cid': 2, t1: '深圳新聞'},
{'cid': 3, t1: '佛山新聞'},
]
// 內容數(shù)據(jù)
const contentLists = [
{
id: 1,
cid: 1,
title: '標題1',
content: [
{
title: '內容1',
url: 'http://baidu.com'
},
{
title: '內容1',
url: 'http://baidu.com'
},
{
title: '內容1',
url: 'http://baidu.com'
}
]
},
{
id: 2,
cid: 2,
title: '標題2',
content: [
{
title: '內容2',
url: 'http://baidu.com'
},
{
title: '內容2',
url: 'http://baidu.com'
},
{
title: '內容2',
url: 'http://baidu.com'
}
]
},
{
id: 3,
cid: 3,
title: '標題3',
content: [
{
title: '內容3',
url: 'http://baidu.com'
},
{
title: '內容3',
url: 'http://baidu.com'
},
{
title: '內容3',
url: 'http://baidu.com'
}
]
},
]
function createTab(navs, content) {
// 1. 生成樣目
for (let i = 0; i < lanmu.length; i++) {
let but1 = document.createElement('button');
// 生成每一個button
// button 的文字
but1.textContent = lanmu[i]['t1'];
but1.dataset.key = lanmu[i].cid
if (i === 0) but1.classList.add('show')
navs.append(but1)
}
// 2. 生成內容
for (let i = 0; i < contentLists.length; i++) {
// (1) 創(chuàng)建列表 <ul>
let ul = document.createElement('ul');
// (2) 添加列表索引<ul data-key>
ul.dataset.key = contentLists[i]['cid']
// (3) 默認顯示第1個,其它隱藏
ul.classList.add(i === 0 ? 'show' : 'hidden')
// (4) 生成子元素<li><a>用于顯示每一條數(shù)據(jù)
for (let l = 0; l < contentLists[i].content.length; l++) {
// 1. 生成 <li>
let li = document.createElement('li');
// 2. 生成 <a>
let a = document.createElement('a')
// 3. a.href
// console.log('111',contentLists[i].content[l].url)
a.href = contentLists[i].content[l].url
// 4. a.textContent
a.textContent = contentLists[i].content[l].title
// console.log(contentLists[i].content[l].title)
// 5. 將<a>添加到<li>
li.append(a)
// 6. <li>添加到<ul>
ul.append(li)
// 7. <ul>添加到內容容器中.content
content.append(ul)
}
}
}
function setBtnStatus(ev){
// 1.當前的按鈕
let currentBtn = ev.target;
// console.log('當前的按鈕',currentBtn)
// 2. 去掉所有按鈕的show, 遍歷
// ev.currentTarget: 事件綁定主體 , 父元素
// console.log(ev.currentTarget.children);
// console.log(typeof [...ev.currentTarget.children]);
// console.log([...ev.currentTarget.children]);
[...ev.currentTarget.children].forEach(function (btn){btn.classList.remove('show')})
// 3.設置當前按鈕的亮度
currentBtn.classList.add('show')
}
function setContentStatus(ev,currentBtn){
// 1. 獲取所有列表
let lists = document.querySelectorAll('.content>ul')
// 2. 去掉所有列表show,換成hidden
lists.forEach( list=>list.classList.replace('show','hidden'))
// 3. 找到與欄目key對應的列表
const gongtongdain = [...lists].find(list => list.dataset.key == currentBtn.dataset.key);
// console.log(gongtongdain)
// 4. 將要顯示的列表,加上active,顯示出來
// gongtongdain.classList.replace()
gongtongdain.classList.replace('hidden','show')
}
export {createTab,setBtnStatus, setContentStatus}
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號