Попытка получить доступ к localStorage с помощью приведенного ниже примера кода StackOverflow приведет к небезопасной операции. Я позволил себе создать пример, в котором по умолчанию будет использоваться пара ключей obj в случае, когда LS недоступен, поэтому вы можете увидеть его в действии.
Вы можете использовать localStorage
путем установки и получения пар ключ / значение для этого простого примера. Если вы планируете сохранять большие наборы данных с массивами и т. Д. c, тогда для чтения и сохранения с помощью LS будет целесообразно использовать JSON.stringify
и JSON.parse
.
Дополнительная информация о том, как установить / получить ключ Пары значений с использованием LS можно найти здесь: https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
Этот пример может быть дополнительно удален, чтобы также проверить, нажимает ли первая звезда, когда она уже выбрана, чтобы получить 0 звезд будучи оранжевым, et c. Кроме того, возможно, будет использована более современная структура ES6.
var exampleWithoutLS = false;
var testWithOutLS = {};
function saveStar(id) {
if (!exampleWithoutLS) {
localStorage.setItem('rating', id);
} else {
testWithOutLS.rating = id;
}
// Refresh our rating on screen
loadData();
}
function loadData() {
// Get stored rating on load
var rating;
if (!exampleWithoutLS) {
rating = localStorage.getItem('rating');
} else {
rating = testWithOutLS.rating;
}
if (!rating) {
return;
}
var s = parseInt(rating);
// Get all of our stars..
var stars = document.getElementsByClassName("star");
// Loop through, and based on rating int, apply style
for (var i = 0; i < stars.length; i++) {
if (i >= s) {
stars[i].classList.remove("active");
} else {
stars[i].classList.add("active");
}
}
// return s;
}
try {
// Check we can access localstorage
if (!window.localStorage) {
console.log('Unable to access LS');
}
} catch (e) {
// Can't access LS
exampleWithoutLS = true;
} finally {
loadData();
}
.rating {
font-size: 0;
}
.rating span {
font-size: 40px;
}
.rating span::before {
content: "☆";
color: black;
}
.rating span.active::before {
content: "★";
color: orange;
}
.rating span:hover {
cursor: pointer;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Star Rating</title>
</head>
<body>
<div class='rating'>
<span class='star' id="1" onclick="saveStar(this.id)"></span>
<span class='star' id="2" onclick="saveStar(this.id)"></span>
<span class='star' id="3" onclick="saveStar(this.id)"></span>
<span class='star' id="4" onclick="saveStar(this.id)"></span>
<span class='star' id="5" onclick="saveStar(this.id)"></span>
<span class='star' id="6" onclick="saveStar(this.id)"></span>
<span class='star' id="7" onclick="saveStar(this.id)"></span>
<span class='star' id="8" onclick="saveStar(this.id)"></span>
<span class='star' id="9" onclick="saveStar(this.id)"></span>
<span class='star' id="10" onclick="saveStar(this.id)"></span>
</div>
</body>
</html>