PHP全站pjax影响收录,WordPress实现全站PJAX

什么是PJAX

pjax = pushState + ajax

pjax是一个Query插件,它通过ajax和pushState技术提供了极速的(无刷新ajax加载)浏览体验,并且保持了真实的地址、网页标题,浏览器的后退(前进)按钮也可以正常使用。

pjax的工作原理是通过ajax从服务器端获取HTML,在页面中用获取到的HTML替换指定容器元素中的内容。然后使用pushState技术更新浏览器地址栏中的当前地址。以下两点原因决定了pjax会有更快的浏览体验:

不存在页面资源(js/css)的重复加载和应用;

如果服务器端配置了pjax,它可以只渲染页面局部内容,从而避免服务器渲染完整布局的额外开销

安装PJAX

引入jQuery

WordPress有内置的jQuery版本,在header.php文件中的之前添加以下代码即可引用

引入PJAX

这里使用js引入的方法,在functions.php文件中添加以下代码:

function add_pjax() {

wp_register_script( 'pjax' , 'https://cdn.bootcss.com/jquery.pjax/2.0.1/jquery.pjax.min.js' );

wp_enqueue_script( 'pjax' );

add_action( 'wp_enqueue_scripts' , 'add_pjax' );

当然你也可以吧jquery.pjax.min.js文件下载到本地然后引入

使用PJAX

PJAX方法概述

$(document).pjax(selector, [container], options)

selector:string类型,用于click事件委托 的选择器。

container:string类型,用于标识唯一pjax容器的选择器。

options:object类型,这里列出部分选项。

timeout:ajax超时时间(毫秒),超时后强制刷新整个页面

pushtrue:使用 pushState 在浏览器中添加历史记录

container:被替换内容元素的CSS选择器

fragment:css选择器,提取ajax响应内容中指定的内容片段

全站PJAX

先附上一个最简单的版本

jQuery(document).ready(function($) {

$(document).pjax('a[target!=_blank][pjax!="no"]', '#main-container', {fragment:'#main-container', timeout:6000});

});

添加加载动画

pjax项目还提供了一些pjax事件。以便在pjax执行前后加载一些东西。

加载动画只需要使用这两个事件pjax:send和pjax:complete

比如添加一个淡入淡出的动画

jQuery(document).ready(function($) {

$(document).pjax('a[target!=_blank][pjax!="no"]', '#main-container', {fragment:'#main-container', timeout:6000});

$(document).on('pjax:send', function() {

$('#main-container').fadeTo(700,0.0);

});

$(document).on('pjax:complete', function() {

$('#main-container').fadeTo(700,1);

});

});

或者自己写一个加载动画,在加载时显现出来。

jQuery(document).ready(function($) {

$(document).pjax('a[target!=_blank][pjax!="no"]', '#main-container', {fragment:'#main-container', timeout:6000});

$(document).on('pjax:send', function() {

$("#loading").css('display','block');

});

$(document).on('pjax:complete', function() {

$("#loading").css('display','none');

});

});

关于js失效的问题

pjax采用的是异步请求资源,也就是每次请求数据不是重新获取整个页面的数据而是只会获取#main-container容器里面的数据。所以如果一个函数在容器外面,在A页面没有,B又需要的话,那么从A页面进入B页面,这个函数就不会执行。必须回调这个函数。

比如我使用的fancybox以及lazy load,就需要在pjax:complete事件里重载相关函数即可。

$(document).on('pjax:complete', function() {

$("#loading").css('display','none');

jQuery('[data-fancybox="gallery"]').fancybox();

jQuery(function() {

jQuery(".post-gallery img, div.lazy").lazyload({effect: "fadeIn"});

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值