我有五个不同的页面。每个按钮都有一个可随机重定向到其他按钮的按钮。
我正在努力做到这一点,以使用户不会进入重复的页面(至少在遍历所有页面之后)。
我可以在同一个页面中添加一个函数来处理随机的,非重复的内容,但是我该如何使该函数在不同页面上工作,并记住已经访问过哪些页面呢?
我试图将该函数保存在一个外部js文件中,并在每个页面的开头部分调用它,但是它不起作用。
我也尝试使用localStorage,但没有结果。
我做错什么了吗?首先有可能吗?
这就是我正在使用的:
localStorage.getItem("currentRemainingPages");
var page1 = "0001.html"
var page2 = "0002.html"
var page3 = "0003.html"
var page4 = "0004.html"
var page5 = "0005.html"
const originalPages = [page1, page2, page3, page4, page5];
let remainingPages = [];
function randomize() {
if (remainingPages.length === 0) remainingPages = originalPages.slice();
localStorage.setItem("currentRemainingPages", remainingPages);
const {
length
} = remainingPages;
const [page] = remainingPages.splice(Math.floor(Math.random() * length), 1);
window.location.href = page;
}
<h1>Page 0</h1>
<p><button onclick="randomize()" type="button">Random Page</button></p>
答案 0 :(得分:1)
三个问题:
localStorage.getItem("currentRemainingPages");
,但对结果不做任何事情。相反,您总是使用空数组初始化let remainingPages
localStorage
仅存储字符串。您可以简单地通过定界符进行连接和拆分,或者使用JSON或其他一些自定义编码。localStorage.setItem("currentRemainingPages", remainingPages);
,然后从remainingPages
中选择(并删除)随机页面。代替使用
const originalPages = ["0001.html", "0002.html", "0003.html", "0004.html", "0005.html"]
let remainingPages = (() => {
try {
return JSON.parse(localStorage.getItem("currentRemainingPages"));
} catch(e) {
return null;
}
})();
if (!Array.isArray(remainingPages) || remainingPages.length == 0)
remainingPages = originalPages.slice();
function randomize() {
const i = Math.floor(Math.random() * remainingPages.length);
const [page] = remainingPages.splice(i, 1);
localStorage.setItem("currentRemainingPages", JSON.stringify(remainingPages));
window.location.href = page;
}