很多朋友问我网站PJAX的问题,这里一篇文章来统一解决大家的问题!
加入 Pjax 后,我们的网站可以实现无刷新加载网页,加上一个良好的过度 loading 动画,这样用户的体验度会更好一些。
0x00 引入jquery.pjax.js资源
在网站的 head 双标签内加入如下资源引入代码:
<script src="https://api.dyboy.cn/static/js/jquery.min.js" type="text/javascript"></script> <script src="https://api.dyboy.cn/static/js/jquery.pjax.js" type="text/javascript"></script>
0x01 包裹刷新区域
自己在网页需要无刷新效果的地方,比如网站的 body 标签下的一个
包裹着网站的全部内容,那么要刷新 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() { //回调函数 $("img[src$=jpg],img[src$=jpeg],img[src$=png],img[src$=gif]").parent("a[class!=noview]").addClass("swipebox"); if( $('pre').length ){ prettyPrint(); } //回调函数解决文章页代码不高亮的问题 $(".loading").css("display", "none"); //pjax加载结束的回调函数 解决js无法定位的问题 //重新定位容器内容的函数写在这里 }); </script>
0x02 过渡动画
在主要的样式文件,比如 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);}}
动画效果是作者博客的效果,其他的大家自己改吧,这样就OK了~
PS: 本来我也想弄个 PJAX 无刷新效果的,奈何添加后有太多东西失效,需要一点点的去查看和排除,太麻烦,外加我博客加载速度已经非常非常快了,动画一闪而过感觉也是画蛇添足,因此最后又放弃了这个功能~
本文作者为dyboy,转载请注明,尊守博主劳动成果!
由于经常折腾代码,可能会导致个别文章内容显示错位或者别的 BUG 影响阅读; 如发现请在该文章下留言告知于我,thank you !