Minesweeper-2.0-test/scripts/menu/leaderBoard.js

121 lines
3.9 KiB
JavaScript
Raw Normal View History

2023-01-27 11:45:10 +00:00
/**************************************
文件名leaderBoard.js
功能该模块用于处理主菜单排行榜相关内容
版本2.0(23.01.08)
**************************************/
/**************************************
对象名LeaderBoard
参数lang: 传入语言
**************************************/
function LeaderBoard(lang){
//设置排行榜缓存标签
this.HighRankKey = 'MinesweeperRank';
//从缓存中获取排行榜
this.highRank = this.getRank();
//获取HTML中排行榜
this.leadList = document.querySelector(".leadList");
//获取排行榜下一页按钮
this.next = document.querySelector(".next");
//获取语言
this.lang = lang;
//在设置监听的匿名函数中“this”不是指代的leaderBoard对象必须单独获取
let self = this;
//下一页按钮事件监听
this.next.addEventListener("click", function(){
let nextDiff = self.next.innerHTML;
if(nextDiff == "Easy" || nextDiff == "简单" || nextDiff == "簡単"){
self.rankRender("easy");
}else if(nextDiff == "Hard" || nextDiff == "困难" || nextDiff == "難しい"){
self.rankRender("hard");
}else if(nextDiff == "Extra"){
self.rankRender("extra");
}
});
}
/**************************************
方式名getRank()
功能从缓存中获取排行榜
返回值返回排行榜对象
**************************************/
LeaderBoard.prototype.getRank = function(){
let newRank = {
easyRank: [],
hardRank: [],
extraRank: []
}
const rank = window.localStorage.getItem(this.HighRankKey);
//如果缓存中没有排行榜,返回空的排行榜对象
return rank ? JSON.parse(rank) : newRank;
}
/**************************************
方式名rankRender(difficulty)
参数difficulty: 游戏难度(easy为简单hard为困难extra为ex难度)
功能渲染排行榜
**************************************/
LeaderBoard.prototype.rankRender = function(difficulty){
let rank = null;
let diffCon = '';
let nextCon = '';
switch(difficulty){
case "easy":
rank = this.highRank.easyRank;
switch(this.lang){
case "zh_cn":
diffCon = "简单";
nextCon = "困难";
break;
case "en":
diffCon = "Easy";
nextCon = "Hard";
break;
case "jp":
diffCon = "簡単";
nextCon = "難しい";
break;
}
break;
case "hard":
rank = this.highRank.hardRank;
switch(this.lang){
case "zh_cn":
diffCon = "困难";
break;
case "en":
diffCon = "Hard";
break;
case "jp":
diffCon = "難しい";
break;
}
nextCon = "Extra";
break;
case "extra":
rank = this.highRank.extraRank;
switch(this.lang){
case "zh_cn":
nextCon = "简单";
break;
case "en":
nextCon = "Easy";
break;
case "jp":
nextCon = "簡単";
break;
}
diffCon = "Extra";
break;
}
this.leadList.innerHTML = '';
for (let i = 0; i < rank.length; i++){
let li = document.createElement("li");
li.innerHTML =
`<div>${i+1}</div><div>${rank[i].ID}</div><div>${rank[i].time}</div>`;
this.leadList.appendChild(li);
}
document.querySelector(".leaderDif").innerHTML = diffCon;
this.next.innerHTML = nextCon;
}