Pjax简明教程
作者:
秒速五厘米
下面是laravel 框架为例讲解
在 resources/plugin/pjax
目录下创建 pjax.js
与 pjax.css
内容如下
https://github.com/defunkt/jquery-pjax
pjax.js
//定义加载区域$(document).pjax('a','#pjax-container');//定义pjax有效时间,超过这个时间会整页刷新$.pjax.defaults.timeout = 1200;//显示加载动画$(document).on('pjax:click', function() { $("#loading").show(); });//隐藏加载动画$(document).on('pjax:end', function() { $("#loading").hide(); });
pjax.css
#loading { background-color: rgba(238, 238, 238, 0.6); display: none; position: absolute; left: 0; top: 0; right: 0; z-index: 2000; bottom: 0; padding-top: 10%; }#loading .spinner { margin: 100px auto; width: 50px; height: 60px; text-align: center; font-size: 10px; }#loading .spinner > div { background-color: rgba(0, 0, 0, 0.2); height: 100%; width: 6px; display: inline-block; -webkit-animation: stretchdelay 1.2s infinite ease-in-out; animation: stretchdelay 1.2s infinite ease-in-out; }#loading .spinner .rect2 { -webkit-animation-delay: -1.1s; animation-delay: -1.1s; }#loading .spinner .rect3 { -webkit-animation-delay: -1s; animation-delay: -1s; }#loading .spinner .rect4 { -webkit-animation-delay: -0.9s; animation-delay: -0.9s; }#loading .spinner .rect5 { -webkit-animation-delay: -0.8s; animation-delay: -0.8s; } @-webkit-keyframes stretchdelay { 0%, 40%, 100% { -webkit-transform: scaleY(0.4); } 20% { -webkit-transform: scaleY(1); } } @keyframes stretchdelay { 0%, 40%, 100% { transform: scaleY(0.4); -webkit-transform: scaleY(0.4); } 20% { transform: scaleY(1); -webkit-transform: scaleY(1); } }
修改 Laravel框架根目录下的 webpack.mix.js
文件,添加以下代码用于复制 plugin
目录
.mix.copyDirectory('resources/plugin', 'public/plugin')
js文件当加载完后,下次不会重新加载。这在使用 vue.js 时会造成第二次请求页面不效果。解决方法如下:
把这段代码放在 pjax 容器内,对 .js 文件设置了随机后缀,就可以让页面每次请求都进行加载了。
需要安装 https://github.com/spatie/laravel-pjax 用于实现后台处理
$ composer require spatie/laravel-pjax
在 app/Http/Kernel.php
文件添加
protected $middleware = [ ... \Spatie\Pjax\Middleware\FilterIfPjax::class,];
主模板中引入文件
定义 pjax加载区域
@yield('content')
pjax 异步加载数据后会替换 id="pjax-container" 的div区域。