HTML内容
<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="lines"></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>
css样式
<style>
* {
margin: 0;
padding: 0;
}
.page {
width: 100%;
height: 160px;
margin-bottom: 20px;
}
.page_black {
width: 100%;
height: 80px;
background-color: #000000;
}
.page_blacks {
width: 100%;
height: 60px;
background-color: #000000;
border-radius: 50%;
margin-top: -30px;
}
.page_orange {
width: 94%;
height: 130px;
background-color: rgba(255, 236, 208, 0.9);
margin-top: -90px;
margin-left: 3%;
border-radius: 5px;
}
.years {
width: 100%;
height: 50px;
font-size: 16px;
text-align: center;
line-height: 50px;
}
.zero {
width: 100%;
font-size: 16px;
text-align: center;
}
.lines {
width: 100%;
height: 0.5px;
background-color: #dfdfdf;
}
.line {
width: 100%;
height: 0.5px;
background-color: #000000;
}
.tier {
width: 100%;
height: 39px;
background-color: #D6FFF1;
display: flex;
}
.first {
width: 40%;
margin-left: 10%;
text-align: center;
font-size: 16px;
line-height: 40px;
z-index: 21;
}
.second {
width: 40%;
text-align: center;
font-size: 16px;
line-height: 40px;
}
.change {
width: 30%;
height: 2px;
margin-left: 30%;
margin-top: -3px;
background-color: #000000;
}
.sum {
width: 100%;
height: 35px;
background-color: #FFEBFD;
display: flex;
justify-content: space-around;
}
.sum_text {
width: 25%;
text-align: center;
font-size: 16px;
line-height: 35px;
background-color: #FFEBFD;
z-index: 20;
}
.text_year {
width: 80px;
height: 30px;
line-height: 30px;
background-color: #E0FDFF;
display: none;
}
.sum_text:hover .text_year {
display: block;
}
.sum_vip {
width: 25%;
text-align: center;
font-size: 16px;
line-height: 35px;
background-color: #FFEBFD;
z-index: 20;
}
.text_vip {
width: 80px;
height: 30px;
line-height: 30px;
background-color: #E0FDFF;
display: none;
}
.sum_vip:hover .text_vip {
display: block;
}
.sum_class {
width: 25%;
text-align: center;
font-size: 16px;
line-height: 35px;
background-color: #FFEBFD;
z-index: 20;
}
.text_class {
width: 80px;
height: 30px;
line-height: 30px;
background-color: #E0FDFF;
display: none;
}
.text_member {
width: 80px;
height: 30px;
line-height: 30px;
background-color: #E0FDFF;
display: none;
}
.text_partner {
width: 80px;
height: 30px;
line-height: 30px;
background-color: #E0FDFF;
display: none;
}
.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: 60px;
}
.name {
width: 100%;
height: 30px;
line-height: 30px;
display: flex;
justify-content: space-around;
}
.price {
width: 100%;
height: 1150px;
}
</style>
JS数据
// let声明变量data总数据
let data;
// 创建新的 XMLHttpRequest(可扩展超文本传输请求) 对象
let xhr = new XMLHttpRequest();
// 使用 open 方法指定要请求的地址、类型和方式
xhr.open('get', 'js/index.json', true);
// 发送数据
xhr.send();
// 绑定 onreadystatechange(定义响应执行函数) 事件,判断 readyState 和 status 的状态
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
// 响应文本(返回的数据)
let text = xhr.responseText;
console.log(text);
// 接收数据,通过 json 转换使用 把json数据转化为数据或对象
data = JSON.parse(text);
console.log(data);
// 渲染函数
list(data);
}
};
// 拼接
// let声明变量为j j是设置的一级 二级
let j = 1;
// 渲染函数
function list(data) {
// let声明str为空字符串
let str = '';
// 遍历数组
for (let i = 0; i < data.length; i++) {
// 判断当状态为j时 拼接框架
if (data[i].state == j) {
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">`;
// 判断等级 使用三元表达式 当等级为1时 是会员 等级为2时 是VIP 等级为3时 是合伙人
str += `<div class="first_row">${data[i].class == 1?`会员`:data[i].class == 2?`VIP`:`合伙人`}</div>`;
str += `
<div class="second_row">邀请人:${data[i].inviter}</div>
</div>
</div>
<div class="line"></div>`;
};
};
// 渲染数据
document.getElementsByClassName('price')[0].innerHTML = str;
};
// 状态1 点击事件
// 获取下面的跟着状态移动的线
let change = document.getElementsByClassName("change")[0];
function first_level() {
// 线距离左边距30% 加一个过渡效果
change.style.marginLeft = "33%";
change.style.transition = "all 1s";
j = 1;
// 渲染数据
list(data);
};
// 状态2 点击事件
function second_level() {
// 线距离左边距130% 加一个过渡效果
change.style.marginLeft = "133%";
change.style.transition = "all 1s";
j = 2;
// 渲染数据
list(data);
};
// 本月累计
// 给本月累计添加点击事件 获取所有交易量的数据
// if判断 点击的次数为奇数时 交易量从小到大排列 点击的次数为偶数时 交易量从大到小排列
// 使用冒泡排序对数值进行排序
// 按照交易量排序 点击一下奇数 从小到大 点两下为偶数 从大到小
// 本月累积的点击事件
// let声明变量a初始值为1 a是点击数据的奇偶 点1下是从小到大排列 点两下是从大到小排列
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;
};
};
};
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 (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;
};
};
};
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);
};