使用 localStorage 存储对象

Storing a object with localStorage

刷新浏览器时,我似乎找不到让localStorage记录点击变量的方法。

我试过使用 JSON.stringify 和 JSON.parse,但后来发现了 parseInt,这似乎是一个更好的选择(我只是想存储一个数字)。

我是编程新手,我检查的所有示例都是纯粹的 javascript,complicated/poorly 也有解释或已过时。希望你能帮帮我。一个多星期以来,我一直在努力解决这个问题。

更多信息:我将 Phaser 2.5.0 与 MAMP 结合使用。 Google Chrome v49.0.2623.112(64 位),OS X 10.8.5.

var game = new Phaser.Game(800, 600, Phaser.AUTO, 'phaser-example', { preload: preload, create: create, update: update });

var scoreText;
var clicks = 0;



function preload() {

    game.load.image('clickBox', 'assets/ClickMe.png');
    game.stage.backgroundColor = '#182d3b';
    game.stage.disableVisibilityChange = true; 
}


function create() {

    localStorage.setItem('clicks', parseInt('clicks'));
    localStorage.getItem('clicks');



    button = game.add.button(game.width/2, game.height/2, 'clickBox', upScoreText);


    scoreText = game.add.text(30, 30, "CLICKS: " + clicks, {font: "20px Arial", fill: "#ffffff", align: "left"});

    button.scale.x = 0.5;
    button.scale.y = 0.5;
    button.anchor.setTo(0.5);
    button.inputEnabled = true;
}


function update () {

            scoreText.setText("CLICKS: " + clicks);        
}


function upScoreText () {

     clicks++;
}

您使用的 parseInt 错误,即

localStorage.setItem('clicks', parseInt('clicks'));

你应该使用

localStorage.setItem('clicks', parseInt(clicks));/*removed the quotes for the clicks*/

而且我认为ypu应该首先检查localStorage中是否存在clicks变量,然后将变量clicks赋值,但这只是一个suggestion.you可以这样实现:-

var clicks=localStorage.getItem("clicks")||0;

不确定你是否想要这个:/

您不应存储文字 clicks,而应存储具有该名称的变量。在 clicks 上调用 parseInt 也没有意义,因为它已经是一个数字。此外,localStorage 将所有内容存储为字符串,因此无论您做什么,它最终都会存储为字符串。

存储:

localStorage.setItem('clicks', clicks); // is always stored as string

阅读中:

clicks = +localStorage.getItem('clicks'); // `+` makes it a number

现在你必须把上面的语句放在正确的地方。首先将值写入存储然后再次读出是没有意义的:显然该值将与之前相同,并且没有利用存储在之前你的任何内容做过这个。那么你不妨跳过这两行......

相反,您需要在 create 函数中读取一次该值,并在每次更改时写入该值,即在 upScoreText:

function create() {
    // Load. If not exists in localStorage, use 0. 
    // If it does, cast to number with `+`:
    clicks = +localStorage.getItem('clicks') || 0;
    // etc...
}

function upScoreText () {
    clicks++;
    // Save:
    localStorage.setItem('clicks', clicks);
}

现在您将拥有一个在页面重新加载后仍然存在的不断递增的点击次数变量,但您可能需要添加一种方法将值重置回 0。