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区域。