【问题标题】:jQuery function when clicked on button, then shows an animation and loads the new page单击按钮时的 jQuery 函数,然后显示动画并加载新页面
【发布时间】:2020-11-09 17:14:09
【问题描述】:

我正在开发我的新作品集网站,并试图弄清楚如何在转到另一个页面时制作一个简单的动画,这样看起来会更流畅一些。

我在页面上创建了一个div (.pageOverlay),带有opacity: 0 属性。当有人点击一个按钮/链接时,我希望它淡入,并在它完全淡入后加载新页面。

新页面也以黑色叠加开始,然后逐渐淡出,因此看起来很平滑。​

.

.

编辑:

这是经过一些建议后的新代码。 jQuery:

$(document).ready(function() {
    $(".pageOverlay").css("opacity","0");
    $("a.newPage").click(function(event) {
        event.preventDefault();
        $(".pageOverlay").css("opacity","1");

        var href = $(this).attr('href');

        setTimeout(function() {window.location = href}, 2000);
        return false;
    });
});

HTML 和 CSS :

<!DOCTYPE html>
<html>
<head>
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="/assets/css/main.css" type="text/css" rel="stylesheet">
    <link href="/assets/vendor/css/swiper.min.css" rel="stylesheet">
</head>

<body>
<div class="pageOverlay"></div>
<a href="/portfolio" class="newPage">Test</a>
    
    div.pageOverlay {
        position: fixed;
        width: 100vw;
        height: 100vh;
        z-index: 999;
        background-color: #000000;
        opacity: 0;
        pointer-events: none;
        transition: .35s all ease-in-out;
        left: 0;
        top: 0;
    }

页脚

    <script src="/assets/vendor/js/jquery.js"></script>
    <script src="/assets/js/initialize.js"></script>
    <script src="/assets/js/default.js"></script>
    <script src="/assets/js/pageload.js"></script>
    <script src="/assets/vendor/js/swiper.min.js"></script>
    </div>
</body>
</html>

它仍然会立即加载新页面,但是当我在新页面加载后立即返回时,它会再次进入新页面而无需我做任何事情。

我还发现,在我的移动设备上,延迟有效!只是由于某种原因,覆盖不显示。在我的笔记本电脑上,情况正好相反,覆盖显示,但延迟不起作用。

【问题讨论】:

  • 您的代码有什么问题?我认为问题在于正常的href url会立即执行,因为您没有在事件对象上使用preventDefault()。
  • @MarkBaijens 它只是立即加载新页面。我需要把preventDefault() 放在哪里?
  • 我用示例代码添加了答案。
  • 新代码似乎运行良好。会不会是旧代码被缓存了?尝试在隐身标签中打开此新代码。
  • @VladSolomon 我试过了,即使在不同的设备上,但仍然一样!

标签: jquery css animation href


【解决方案1】:

我在您的head 或body 中看不到任何script 标签。这可能是问题所在。

编辑

解决了这个问题。只是缺少一些类和一些多余的脚本标签。

【讨论】:

  • 我的页脚里有,我刚才也贴出来了
  • 页面加载时调试控制台是否有错误?
  • 你能在你的head中加入这一行,看看有没有变化? &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"&gt;&lt;/script&gt;
  • 我添加了该行,但仍然没有更改。我在我的网站上更多地使用 jQuery,所以效果很好。
  • 打赌我们现在开始一个聊天室,稍后再返回解决方案。
【解决方案2】:

我认为问题在于正常的 href url 会立即执行,因为您没有在事件对象上使用 preventDefault() 。尝试将event 参数添加到事件处理程序,并将event.preventDefault() 添加到处理程序本身。

$(document).ready(function() {
    $(".pageOverlay").css("opacity","0");
    $("a.newPage").click(function(event) {
        event.preventDefault();
        $(".pageOverlay").css("opacity","1");

        var href = $(this).attr('href');

        setTimeout(function() {window.location = href}, 1000);
        return false;
    });
});
div.pageOverlay {
    position: fixed;
    width: 100vw;
    height: 100vh;
    z-index: 999;
    background-color: #000000;
    opacity: 0;
    pointer-events: none;
    transition: .35s all ease-in-out;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="pageOverlay"></div>
<a class="newPage" href="http://www.stackoverflow.com">test</a>

【讨论】:

  • 另外一件好事是为pageOverlay 赋予top: 0 和left: 0 的属性,以确保覆盖覆盖整个页面。
  • 我做了这个确切的代码,它仍然会立即进入页面。奇怪的一件事是,如果我在新页面加载后立即返回该页面,它会再次进入新页面。
  • @VladSolomon 元素的样式与 OP 问题或此答案无关。但是,您的评论可能有用,具体取决于 OP html 结构。我建议将这样的 cmets 直接发布到问题而不是答案。
  • @rutgervs 您能否使用更新的 Javascript 代码和 html 更新您的答案,以便我们重现您的问题?
  • @MarkBaijens 我用新代码更新了我的答案!
猜你喜欢
  • 2013-02-23
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多