利用 Pjax 实现网页无刷新加载的详细方法

2019年10月26日 14

前言

PJAX=PushState+Ajax
PJAX是一个jQuery插件,它使用Ajax和PushState来提供快速浏览体验,包括实际的permalinks、页面标题和工作回退按钮。

PJAX的工作方式是通过Ajax从服务器获取HTML,并用加载的HTML替换页面上容器元素的内容。然后,它使用PushState更新浏览器中的当前URL。这会导致更快的页面导航,原因有二:

没有页面资源(JS,CSS)得到重新执行或重新应用;
如果服务器配置为PJAX,它只能呈现部分页面内容,从而避免可能代价高昂的完整布局呈现。
该项目的现状
jQuery-PJax是很大程度上没有维护在这一点上。它可能会继续收到重要的bug修复,但是其特征集已冻结。它不太可能获得新的特性或增强。

加入 Pjax 后,我们的网站可以实现无刷新加载网页,加上一个良好的过度 loading 动画,这样用户的体验度会更好一些。

引入 jquery.pjax.js 资源

在网站的 head 双标签内加入如下资源引入代码:

<script src="http://rycdn.cn/jquery/pjax/jquery.pjax.js" type="text/javascript"></script>

包裹刷新区域

自己在网页需要无刷新效果的地方,比如网站的 body 标签下的一个<div id="wrap"></div>包裹着网站的全部内容,那么要刷新 wrap 包裹的内容区域。

下一步,就是在 标签前,添加如下的代码:

<script type="text/javascript">
$(document).pjax('a[target!=_blank]', '#wrap', {fragment: '#wrap',timeout: 8000}); //#wrap为刷新的id
    $(document).on('pjax:send', function() {
    $(".loading").css("display", "block");
    //预加载函数可写在这里
});

$(document).on('pjax:complete', function() {
    //回调函数
    if( $('pre').length ){ prettyPrint(); }        //回调函数解决文章页代码不高亮的问题
    $(".loading").css("display", "none");
    //pjax加载结束的回调函数 解决js无法定位的问题
    //重新定位容器内容的函数写在这里
});

过渡动画

在主要的样式文件,比如 main.css 文件中添加如下的 CSS 代码:

/*pjax 动画*/
.loading{display:none}
.loading{height:100%;width:100%;position:fixed;top:0;left:0;z-index:999999;background-color:rgba(250,250,250,.9)}
.loading img{width: 280px;height:210px;position: relative;top: 45%;left: 50%;margin-left:-140px;margin-top: -105px;}
#loader{display: block; position: relative; left: 50%; top: 50%; width: 150px; height: 150px; margin: -75px 0 0 -75px; border-radius: 50%; border: 3px solid transparent; border-top-color: #ff5a5a; -webkit-animation: spin 1s linear infinite; animation: spin 1s linear infinite;}
#loader:before{content: ""; position: absolute; top: 5px; left: 5px; right: 5px; bottom: 5px; border-radius: 50%; border: 3px solid transparent; border-top-color: #5af33f; -webkit-animation: spin 3s linear infinite; animation: spin 3s linear infinite;}
#loader:after{content: ""; position: absolute; top: 15px; left: 15px; right: 15px; bottom: 15px; border-radius: 50%; border: 3px solid transparent; border-top-color: #6dc9ff; -webkit-animation: spin 2s linear infinite; animation: spin 2s linear infinite;}
@-webkit-keyframes spin{0%{-webkit-transform: rotate(0deg); -ms-transform: rotate(0deg); transform: rotate(0deg);} 100%{-webkit-transform: rotate(360deg); -ms-transform: rotate(360deg); transform: rotate(360deg);}}
@keyframes spin{0%{-webkit-transform: rotate(0deg); -ms-transform: rotate(0deg); transform: rotate(0deg);} 100%{-webkit-transform: rotate(360deg); -ms-transform: rotate(360deg); transform: rotate(360deg);}}
1:如非特殊说明,本站对提供的源码不拥有任何权利,其版权归原著者拥有。请在下载后24小时之内自觉删除。
2:该资源只为研究、学习所提供,任何涉及商业盈利目的均不得使用,若需要,请购买正版,否则产生的一切后果将由您自己承担,与本站无关!
3:本网站所有资源均为作者提供和网友推荐收集整理而来,不保证其完整性以及安全性。如有侵犯你版权的,请来信(邮箱:lwvip_com@qq.com)指出,本站将立即改正。
本文地址:老巫源码 » 利用 Pjax 实现网页无刷新加载的详细方法

全屏

切换