JavaScript 延迟后重定向页面

让我们详细了解如何在 JavaScript 延迟后重定向到另一个页面。

在 JavaScript 中使用 setTimeout() 方法在延迟后重定向页面

你有时希望在用户单击链接后在网页上显示一些内容,例如短信,然后再将用户重定向到另一个页面。锚标签是不能直接延迟重定向几秒钟然后转到另一个页面的。

为此,我们必须使用 setTimeout 方法。此方法添加延迟,然后将用户重定向到另一个页面。

但是仅仅使用 setTimeout 方法是行不通的。在使用 setTimeout 方法之前,你还必须阻止锚标记的默认行为。

JavaScript 中的 setTimeout() 方法允许你在一段时间后执行一段代码或一个函数。setTimeout() 函数有两个参数。

第一个参数是回调函数,第二个参数是要延迟代码执行的时间。

为了实现这一点,我们将首先创建两个网页,index.html 和 newpage.html。在 index.html 中,我们有一个标题文本的 h1 标签。

然后我们将有一个锚标签 a,它具有 link 和 href 属性的 id

锚链接的 href 将是 # 并且不会指向任何地方。我们将在 JavaScript 中设置 href 链接。

锚标记也将包含文本重定向我。最后,我们将使用 script 标签链接 JavaScript 文件,如下所示。

// index.html
<body>
    <h1>Home Page</h1>
    <a id="link" href="#">Redirect me</a>

    <script src="./script.js">
    </script>
</body>

在 newpage.html 中,我们将有一个 h1 文本,如下所示。我们的目标是在点击锚链接后将用户从 index.html 页面重定向到 newpage.html

// newpage.html
<body>
    <h1>Welcome to new page...</h1>
</body>

设置好我们的 HTML 代码之后,就该处理 JavaScript 代码了。我们将首先使用其 id 属性 link 在 JavaScript 中获取锚 HTML 元素,并将其存储在 url 变量中。

然后我们将使用 addEventListener() 方法在 url 变量上设置点击监听器。

在 click 事件监听器中,我们将首先在控制台上打印一条消息 url clicked...。这会让我们知道用户点击了链接。

然后我们将添加一个 setTimeout() 方法。

我们将在 3000 毫秒后执行该函数,即 3 秒后。我们将使用 window.location.href 属性在此方法中设置 URL。

成功重定向到新页面后,我们将在控制台上打印一条消息。

var url = document.getElementById('link');

url.addEventListener('click', ()=>{
    console.log("url clicked...")

    setTimeout(() =>{
        window.location.href = "http://127.0.0.1:5500/newpage.html";
        console.log("timeout executed...")
    }, 3000);
});

整个事情都在事件循环上工作。

setTimeout() 方法之前和之后的任何代码都将首先执行。完成代码执行后,它将开始执行 setTimeout 或 setInterval 方法。

要了解上述代码在内部是如何工作的,你必须了解 JavaScript 中的事件循环概念。

此时,如果你运行上面的代码,它现在就可以工作了。只要你单击该 URL,它就会立即将你重定向到我们不想要的下一页。

即使我们添加了 setTimeout() 方法,它也会立即切换到该链接而不会延迟。这是因为,默认情况下,每个 HTML 元素都有一些默认行为。

它的默认行为是单击锚链接后转到下一页。

在 JavaScript 中使用 preventDefault() 方法禁用 HTML 元素的默认行为

有时我们必须禁用 HTML 元素的这些默认行为。我们使用一种名为 preventDefault() 的方法来实现。

你必须将事件作为参数传递给你调用的函数。在这种情况下,我们将事件 e 传递给 click 事件,然后在该事件上,我们设置 preventDefault() 方法。

var url = document.getElementById('link');

url.addEventListener('click', (e)=>{
    e.preventDefault();

    console.log("url clicked...")

    setTimeout(() =>{
        window.location.href = "http://127.0.0.1:5500/newpage.html";
        console.log("timeout executed...")
    }, 5000);
});

如果你运行代码并单击链接,它将在 setTimeout() 方法中提到的时间延迟后将你带到下一页。

JavaScript 延迟后重定向页面

要在新标签页中打开 URL,你可以使用 window.open() 方法而不是 window.location.href()。在 window.open() 的第一个参数中,你可以传递 URL,在第二个参数中,你必须指定要打开链接的位置。

由于我们想在新标签页中打开延迟,我们将 _blank 传递给第二个参数。

window.open('http://127.0.0.1:5500/newpage.html', '_blank');

如果你运行代码,它将在新标签页中打开 URL。