MCBBS Wiki欢迎您共同参与编辑!在参与编辑之前请先阅读Wiki方针。
如果在编辑的过程中遇到了什么问题,可以去讨论板提问。
为了您能够无阻碍地参与编辑 未验证/绑定过邮箱的用户,请尽快绑定/验证。
MCBBS Wiki GitHub群组已上线!
您可以在回声洞中发表吐槽!
服务器状态监控。点击进入
本站由MCBBS用户自行搭建,与MCBBS及东银河系漫游指南(北京)科技有限公司没有从属关系。点此了解 MCBBS Wiki 不是什么>>
微件:SaltVoteContainer:修订间差异
跳到导航
跳到搜索
Salt lovely(留言 | 贡献) 小 (编辑“微件:SaltVoteContainer” // 维基盐编辑器) |
Salt lovely(留言 | 贡献) 小 (编辑“微件: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 |
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 percent = collect.map(({ set, li, count }) => { |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
count.textContent = `${set.length} (${res}%)`; |
|||
⚫ | |||
return res; |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
? collect.map( |
|||
({ name, set }, i) => |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
}%">${Number(percent[i])}%</div>` |
|||
) |
|||
: []; |
|||
⚫ | |||
}; |
}; |
||
第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); |
|||
⚫ | |||
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 = |
if (barEl) barEl.innerHTML = barHTML; |
||
⚫ | |||
}; |
}; |
||
2024年3月23日 (六) 19:38的最新版本
用于展示投票箱