[{
"name": "乐多",
"total": "342",
"class":2,
"inviter": 6,
"state": 2
}, {
"name": "灰灰的",
"total": "900",
"class":3,
"inviter": 4,
"state": 1
}, {
"name": "聂聂脸",
"total": "223",
"class":3,
"inviter": 2,
"state": 2
}, {
"name": "acc",
"total": "343",
"class":2,
"inviter": 4,
"state": 1
}, {
"name": "每天都想吃好吃的(见过刘巍版",
"total": "532",
"class":3,
"inviter": 4,
"state": 1
}, {
"name": "别重复",
"total": "453",
"class":1,
"inviter": 6,
"state": 2
}, {
"name": "南山",
"total": "340",
"class":1,
"inviter": 3,
"state": 1
}, {
"name": "郭包肉",
"total": "360",
"class":2,
"inviter": 2,
"state": 2
}, {
"name": "一个芒果",
"total": "1220",
"class":3,
"inviter": 9,
"state": 1
}]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
* {
margin: 0;
padding: 0;
}
.page {
width: 100%;
height: 160px;
margin-bottom: 20px;
}
.page_black {
width: 100%;
height: 312px;
background-color: #000000;
}
.page_blacks {
width: 100%;
height: 233px;
background-color: #000000;
border-radius: 50%;
margin-top: -115px;
}
.page_orange {
width: 92%;
height: 450px;
background-color: rgba(251, 219, 194, 0.8);
margin-top: -350px;
margin-left: 4%;
border-radius: 25px;
}
.years {
width: 100%;
height: 50px;
font-size: 40px;
text-align: center;
line-height: 300px;
}
.zero {
width: 100%;
font-size: 40px;
text-align: center;
line-height: 350px;
}
.lines {
width: 100%;
height: 0.5px;
background-color: #686363;
margin-top: 450px;
}
.line {
width: 100%;
height: 0.5px;
background-color: #000000;
}
.linet {
width: 100%;
height: 0.5px;
background-color: #000000;
}
.tier {
width: 100%;
height: 85px;
display: flex;
}
.first {
width: 40%;
margin-left: 10%;
text-align: center;
font-size: 40px;
line-height: 90px;
z-index: 21;
}
.second {
width: 40%;
text-align: center;
font-size: 40px;
line-height: 90px;
}
.change {
width: 36%;
height: 2px;
margin-left: 27%;
margin-top: -6px;
background-color: #552822
}
.sum {
width: 100%;
height: 85px;
display: flex;
justify-content: space-around;
}
.sum_text {
width: 25%;
text-align: center;
font-size: 40px;
line-height: 80px;
z-index: 20;
}
.text_year {
width: 186px;
height: 53px;
line-height: 45px;
background-color: #E0FDFF;
display: none;
margin-left: 12%;
}
.sum_text:hover .text_year {
display: block;
}
.sum_vip {
width: 25%;
text-align: center;
font-size: 40px;
line-height: 80px;
z-index: 20;
}
.text_vip {
width: 130px;
height: 50px;
line-height: 50px;
background-color: #E0FDFF;
display: none;
margin-left: 24%;
}
.sum_vip:hover .text_vip {
display: block;
}
.sum_class {
width: 25%;
text-align: center;
font-size: 40px;
line-height: 80px;
z-index: 20;
}
.text_class {
width: 160px;
height: 45px;
line-height: 40px;
background-color: #E0FDFF;
display: none;
margin-left: 15%;
}
.text_member {
width: 160px;
height: 46px;
line-height: 42px;
background-color: #E0FDFF;
display: none;
margin-left: 15%;
}
.text_partner {
width: 160px;
height: 60px;
line-height: 60px;
background-color: #E0FDFF;
display: none;
margin-left: 15%;
}
.sum_class:hover .text_class {
display: block;
}
.sum_class:hover .text_member {
display: block;
}
.sum_class:hover .text_partner {
display: block;
}
.null {
width: 100%;
height: 15px;
}
.message {
width: 100%;
height: 160px;
}
.name {
width: 100%;
height: 65px;
line-height: 100px;
display: flex;
justify-content: space-around;
font-size: 40px;
}
.price {
width: 100%;
height: 1150px;
}
</style>
</head>
<body>
<body>
<!-- 样式 -->
<div class="page">
<div class="page_black"></div>
<div class="page_blacks"></div>
<div class="page_orange">
<div class="years">本月交易量</div>
<div class="zero">¥0</div>
</div>
</div>
<!-- 数据 -->
<div class="all">
<!-- 一级 二级 -->
<div class="lines"></div>
<div class="tier">
<div class="first" onclick="first_level()">一级
<div class="change"></div>
</div>
<div class="second" onclick="second_level()">二级
</div>
</div>
<div class="linet"></div>
<!-- 交易额 -->
<div class="sum">
<div class="sum_text">
交易额<div class="text_year" onclick="textYears()">本月累计</div>
</div>
<div class="sum_vip">
会员数<div class="text_vip" onclick="textVip()">会员数</div>
</div>
<div class="sum_class">
等级<div class="text_class" onclick="member(1)">会员</div>
<div class="text_member" onclick="member(2)">vip</div>
<div class="text_partner" onclick="member(3)">合伙人</div>
</div>
</div>
<div class="line"></div>
<div class="null"></div>
<div class="line"></div>
<!-- 数据 -->
<div class="price">
<div class="message">
<div class="name">
<div class="first_row">刘巍</div>
<div class="second_row">交易量:342</div>
</div>
<div class="name">
<div class="first_row">VIP</div>
<div class="second_row">邀请人:6</div>
</div>
</div>
<div class="line"></div>
</div>
</div>
<script src="./js/index.js"></script>
</body>
<script>
// 声明一个变量 data 用于存储从服务器获取的 JSON 数据
let data;
// 创建 XMLHttpRequest 对象
let xhr = new XMLHttpRequest();
// 使用 open 方法指定要请求的地址、类型和方式
xhr.open('get', 'js/team.json', true);
// 发送请求
xhr.send();
// 绑定 onreadystatechange 事件处理函数,处理响应的状态变化
xhr.onreadystatechange = function() {
// 当请求完成并且响应状态为成功时(状态码 200)
if (xhr.readyState == 4 && xhr.status == 200) {
// 获取响应文本
let text = xhr.responseText;
console.log(text);
// 将响应文本解析为 JSON 对象
data = JSON.parse(text);
console.log(data);
// 调用列表渲染函数
list(data);
}
};
// 初始化状态 j
let j = 1;
// 渲染函数,根据状态 j 过滤数据并生成 HTML 内容
function list(data) {
let str = '';
// 遍历数据数组
for (let i = 0; i < data.length; i++) {
// 根据状态 j 过滤数据
if (data[i].state == j) {
// 拼接 HTML 字符串
str += `<div class="message">
<div class="name">
<div class="first_row">${data[i].name}</div>
<div class="second_row">交易量:${data[i].total}</div>
</div>
<div class="name">
<div class="first_row">${data[i].class == 1 ? `会员` : data[i].class == 2 ? `VIP` : `合伙人`}</div>
<div class="second_row">邀请人:${data[i].inviter}</div>
</div>
</div>
<div class="line"></div>`;
}
}
// 将生成的 HTML 内容渲染到页面中
document.getElementsByClassName('price')[0].innerHTML = str;
}
// 状态切换点击事件处理函数
let change = document.getElementsByClassName("change")[0];
// 第一级状态点击事件
function first_level() {
change.style.marginLeft = "33%";
change.style.transition = "all 1s";
j = 1;
list(data); // 更新数据
}
// 第二级状态点击事件
function second_level() {
change.style.marginLeft = "133%";
change.style.transition = "all 1s";
j = 2;
list(data); // 更新数据
}
// 本月累计交易量点击事件处理函数
let a = 1;
function textYears() {
if (a == 1) {
a = 2;
// 冒泡排序,按交易量从小到大排序
for (let i = 0; i < data.length - 1; i++) {
for (let j = 0; j < data.length - 1 - i; j++) {
if (Number(data[j].total) > Number(data[j + 1].total)) {
let num = data[j];
data[j] = data[j + 1];
data[j + 1] = num;
}
}
}
} else if (a == 2) {
a = 1;
// 冒泡排序,按交易量从大到小排序
for (let i = 0; i < data.length - 1; i++) {
for (let j = 0; j < data.length - 1 - i; j++) {
if (Number(data[j].total) < Number(data[j + 1].total)) {
let num = data[j];
data[j] = data[j + 1];
data[j + 1] = num;
}
}
}
}
list(data); // 更新数据
}
// 按邀请人数排序点击事件处理函数
function textVip() {
if (a == 1) {
a = 2;
// 冒泡排序,按邀请人数从小到大排序
for (let i = 0; i < data.length - 1; i++) {
for (let j = 0; j < data.length - 1 - i; j++) {
if (data[j].inviter > data[j + 1].inviter) {
let num = data[j];
data[j] = data[j + 1];
data[j + 1] = num;
}
}
}
} else if (a == 2) {
a = 1;
// 冒泡排序,按邀请人数从大到小排序
for (let i = 0; i < data.length - 1; i++) {
for (let j = 0; j < data.length - 1 - i; j++) {
if (data[j].inviter < data[j + 1].inviter) {
let num = data[j];
data[j] = data[j + 1];
data[j + 1] = num;
}
}
}
}
list(data); // 更新数据
};
// 按照邀请人数排序 点击一下奇数 从小到大 点两下为偶数 从大到小
function textVip() {
if (a == 1) {
a = 2;
// 冒泡排序 从小到大
for (let i = 0; i < data.length - 1; i++) {
for (let j = 0; j < data.length - 1 - i; j++) {
if (data[j].inviter > data[j + 1].inviter) {
let num = data[j];
data[j] = data[j + 1];
data[j + 1] = num;
};
};
};
console.log(data);
} else if (a == 2) {
a = 1;
// 冒泡排序 从大到小
for (let i = 0; i < data.length - 1; i++) {
for (let j = 0; j < data.length - 1 - i; j++) {
if (data[j].inviter < data[j + 1].inviter) {
let num = data[j];
data[j] = data[j + 1];
data[j + 1] = num;
};
};
};
};
// 渲染数据
list(data);
};
// 会员 VIP 合伙人
// 给会员 VIP 合伙人绑定相同的点击事件名称为member 等级为k 设置不同的状态 1,2,3
// 点击会员 k=1 点击vip k=2 点击合伙人 k=3
// let声明新的变量为g g=空数组 用来装需要用的数据 不用重新渲染全部数据
// for循环
// 上面已经设置变量j为一级 二级
// if判断数据的等级为k 并且状态在j中
// 在空字符串中添加点击 k获取的数据
// 渲染新数组
function member(k) {
let g = [];
for (let i = 0; i < data.length; i++) {
if (data[i].class == k && data[i].state == j) {
g.push(data[i]);
};
};
console.log(g);
list(g);
};
</script>
</body>
</html>