MCBBS Wiki欢迎您共同参与编辑!在参与编辑之前请先阅读Wiki方针

如果在编辑的过程中遇到了什么问题,可以去讨论板提问。

为了您能够无阻碍地参与编辑 未验证/绑定过邮箱的用户,请尽快绑定/验证

MCBBS Wiki GitHub群组已上线!

您可以在回声洞中发表吐槽!

服务器状态监控。点击进入

本站由MCBBS用户自行搭建,与MCBBS及东银河系漫游指南(北京)科技有限公司没有从属关系。点此了解 MCBBS Wiki 不是什么>>

微件:SaltVoteContainer:修订间差异

来自MCBBS Wiki
跳到导航 跳到搜索
(编辑“微件:SaltVoteContainer” // 维基盐编辑器)
(编辑“微件:SaltVoteContainer” // 维基盐编辑器)
 
第1行: 第1行:
<noinclude>用于展示投票箱</noinclude><includeonly><script>
<noinclude>用于展示投票箱</noinclude><includeonly><script>
"use strict";
/**
/**
*
*
第16行: 第15行:
document.body.querySelectorAll("div.salt-vote-container.not-init")
document.body.querySelectorAll("div.salt-vote-container.not-init")
);
);
// const traceElements = getAllNotInitContainer();


const at = (arr, index) => {
const at = (arr, index) => {
第29行: 第27行:
};
};


/** 渲染条状图内容 @type {(collect: {name: string, set: string[]}[], color: string[]) => string} */
/** 渲染条状图内容 @type {(collect: {name: string, set: string[], li: HTMLElement, count: HTMLElement}[], color: string[], hasBar: boolean) => { barHTML: string }} */
const renderBar = (collect, color) => {
const renderPercent = (collect, color, hasBar) => {
const countAll = collect.reduce((prev, curr) => {
const countAll = collect.reduce((prev, curr) => {
return prev + curr.set.length;
return prev + curr.set.length;
}, 0);
}, 0);
// 计算百分比
const divList = collect.map(
({ name, set }, i) =>
const percent = collect.map(({ set, li, count }) => {
const res = Number(((set.length * 100) / countAll).toFixed(2));
`<div class="salt-vote-bar-item" title="${name.replace(
li.style.setProperty("--vote-percent", `${res}%`); // 顺便把百分比记录上去
/"/g,
count.textContent = `${set.length} (${res}%)`;
"'"
return res;
)}" style="--vote-color:${at(color, i)};width:${
});
set.length ? set.length * 100 : 0
const divList = hasBar
}%">${Number(((set.length * 100) / countAll).toFixed(2))}%</div>`
);
? collect.map(
({ name, set }, i) =>
return divList.join("");
`<div class="salt-vote-bar-item" title="${name.replace(
/"/g,
"'"
)}" style="--vote-color:${at(color, i)};width:${
set.length ? percent[i] : 0
}%">${Number(percent[i])}%</div>`
)
: [];
return { barHTML: divList.join("") };
};
};


第56行: 第63行:
const descUl = el.querySelector(".salt-vote-describe");
const descUl = el.querySelector(".salt-vote-describe");
const descLi = descUl && descUl.querySelectorAll("li");
const descLi = descUl && descUl.querySelectorAll("li");
/** 收集的投票信息 @type {{name: string, set: string[], li: HTMLElement, desc?: HTMLElement}[]} */
/** 收集的投票信息 @type {{name: string, set: string[], li: HTMLElement, count: HTMLElement, desc?: HTMLElement}[]} */
const collect = [];
const collect = [];
/** 收集的投票信息 @type {{name: string, desc: HTMLElement}[]} */
/** 收集的投票信息 @type {{name: string, desc: HTMLElement}[]} */
第96行: 第103行:
const title = option.textContent || "";
const title = option.textContent || "";
const voters = Array.from(voter.querySelectorAll("a"));
const voters = Array.from(voter.querySelectorAll("a"));
const count = document.createElement("div");
// if (title in collect) return;
const thisCollect = { name: title, set: [], li: li };
const thisCollect = { name: title, set: [], li: li, count };
voters.forEach((v) => {
voters.forEach((v) => {
const res = v.title
const res = v.title
第116行: 第123行:
});
});
collect.push(thisCollect);
collect.push(thisCollect);
// 配色
// 外观
li.appendChild(count);
li.style.setProperty("--vote-color", at(color, liIndex));
count.className = "salt-vote-option-count";
li.style.setProperty("--vote-color", at(color, liIndex)); // 配色
li.style.setProperty("--vote-count", `${thisCollect.set.length}`);
// 点击展开选项描述
// 点击展开选项描述
const desc = descCollect.find(({ name }) => name === title);
const desc = descCollect.find(({ name }) => name === title);
第139行: 第149行:
});
});
// 绘制图形
// 绘制图形
const { barHTML } = renderPercent(collect, color, !!barEl);
if (barEl) {
barEl.innerHTML = renderBar(collect, color);
if (barEl) barEl.innerHTML = barHTML;
}
};
};



2024年3月23日 (六) 19:38的最新版本

用于展示投票箱