JavaScript '分数计数器'工作在网站上的各个页面

4si2a6ki  于 2023-01-19  发布在  Java
关注(0)|答案(1)|浏览(116)

我正在尝试"游戏化"我的网站来吸引学习者。我对JavaScript还是一个令人难以置信的新手,所以我提前道歉。有几十篇类似的文章,但没有一篇能很好地满足我的需求,我也尝试过,但没有解决其他类似的问题-对不起(我已经很努力了!)
在大约10页的导航栏中,我想插入一个计数器。下面的代码使用ID "score-counter"来完成这一操作,我尝试使用localStorage来保留该学员在每一页中的分数。我设法让它工作(某种程度上),但它不是在原始值上添加10,而是创建一个全新的计数器,从头开始。
我希望每个按钮只能点击一次(每次页面刷新),所以我尝试在每个按钮被点击后删除eventListener。我还希望以直接的方式向计数器系统添加更多按钮,所以我尝试将其保留为两个简单的类'increment-button'和'first-click'。

<button class="first-click increment-button">Add 10 to the value!</button>
<div id="score-counter">0</div> <!-- DISPLAYS THE COUNT -->
let score = localStorage.getItem("score") || 0;
const incrementButtons = document.querySelectorAll(".increment-button");
const scoreCounter = document.getElementById("score-counter");
scoreCounter.textContent = score;

for (let button of incrementButtons) {
    button.addEventListener("click", function(){
        if(this.classList.contains("first-click")) {
            score += 10;
            localStorage.setItem("score", score);
            this.classList.remove("first-click");
        }
    });
}

输出当前保持此状态:201010101010
它成功地保存了输出,但不是在原始分数上加上一个值10,而是创建了一个全新的分数,并再次从0开始。
我尝试过将JavaScript更改为从值0开始递增计数

let score = localStorage.getItem("score") || 0;

我也试过调整分值

if(this.classList.contains("first-click")) {
            score = scoreCounter + 10;

我试着通过各种StackOverflow和其他网络资源寻找类似的问题,但一直很难找到任何适合我试图实现的答案。有人能提供任何建议吗?提前感谢!

rhfm7lfc

rhfm7lfc1#

你需要把从localStorage.getItem得到的字符串转换成一个数字,这可以用unary plus operator来完成。

let score = +localStorage.getItem("score") || 0;

相关问题