使用JQuery和Ajax的html页面褪色的问题

时间:2018-11-02 20:53:40

标签: javascript java jquery ajax fading

作为编码的初学者,我开始在大学学习,我试图完成我的第一个任务,其中包括使用CSS,HTML和JS在小故障上编码一个网站(我们必须使用$.getJSON()加载数据)

我一开始遇到的问题是,我试图在加载的第一个html页面之间创建平滑的淡入淡出过渡,在该页面上有一个应该导致第二个html的按钮,以及第二个html页面。我尝试按照本教程进行操作:

https://www.superhi.com/video/simple-page-transitions-with-jquery-and-javascript(将“ section”替换为“ body”),但要加载第二页,我需要刷新页面,它无法单独执行(即使看起来淡入/淡出效果也是如此)正常工作),尽管url确实发生了变化……任何人都可以告诉我我搞砸了吗?

这是我的第一个html页面的正文

<body>
<div class="content">
<h1><a href="index2.html" id="index2go">Welcome to Greendale</a></h1>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"> 
</script>
<script src="main.js"></script>
</body>

这是JS页面

$("#index2go").on("click", function(event){
event.preventDefault()
const href = $(this).attr("href")
window.history.pushState(null, null, href)
$.ajax({
url: href,
success : function(data){ 
$("body").fadeOut(300, function(){ 
const newPage = $(data).filter("body").html()
$("body").html(newPage)
$("body").fadeIn(250)
})
}
})
})

非常感谢您!

1 个答案:

答案 0 :(得分:0)

我不确定您的项目范围,因此可能超出了范围。使用FadeIn和FadeOut,您可以在转换结束时执行该功能。使用AJAX,并不完全相同。这有点复杂,但这意味着即使在AJAX处理请求时,也可能在返回数据之前执行其他代码。所以最好包装所有代码。

这是一个建议的示例:

$(function() {
  function getContent(u, target, fn) {
    var newPage;
    console.log("GET " + u);
    var req = $.ajax({
      url: u,
      cache: false,
      dataType: "html",
      success: function(data) {
        console.log("SUCCESS ", data);
        newPage = $(data).find("body").childern();
        target.html(newPage);
        fn();
      },
      error: function(xhr, stat, error) {
        console.log("ERROR ", xhr, stat, error);
        newPage = $("<div>", {
          class: "error"
        }).html("Error " + stat + ": " + error);
        target.html(newPage);
        fn();
      }
    });
  }
  $("a").on("click", function(event) {
    event.preventDefault();
    var href = $(this).attr("href");
    window.history.pushState(null, null, href);
    $("body").fadeOut(300, function() {
      $("body").html("");
      getContent(href, $("body"), function() {
        $("body").fadeIn(250);
      });
    });
  });
});
<script src="http://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>

<div class="content">
  <h1><a href="index2.html" id="index2go">Welcome to Greendale</a></h1>
</div>