klintlili/yii2-infinitescroll
Composer 安装命令:
composer require klintlili/yii2-infinitescroll
包简介
Infinite Scroll is a JavaScript plugin that automatically adds the next page, saving users from a full page load.
README 文档
README
yii2 widgets infinite-scroll,Infinite Scroll is a JavaScript plugin that automatically adds the next page, saving users from a full page load.
useful
<?php
echo ListView::widget([
'dataProvider' => $dataProvider,
'itemView' => '_item',//子视图
'layout' => "{summary}\n<div class='grid are-images-unloaded'><div class='grid__col-sizer'></div><div class='grid__gutter-sizer'></div>{items}</div>\n<div class='pager'>{pager}</div>",
'itemOptions' => ['tag' => false],
'pager' => [
'class' => \yiidoc\infinitescroll\InfiniteScrollWidget::class,
'contentSelector' => '.grid',
'pluginOptions' => [
'path' => new \yii\web\JsExpression('setPath'),
'append' => '.grid__item',
'outlayer' => new \yii\web\JsExpression('msnry'),
'status' => '.page-load-status',
'history' => false,
'debug' => true
],
'clientEvents' => [
'load' => 'function( response, path ) {
console.log(location.pathname)
console.log(infScrollIns.pageIndex);
}',
'history' => new \yii\web\JsExpression('function() {
console.log(520,location.pathname);
}'),
]
],
]);
?>
<?php
$customFilter = <<<EOF
function setPath() {
var currentPage = ($currenPage+1);
var next = currentPage+this.pageIndex;
if(next <= $pageCount){
return '/test/index2?page='+ next +'&per-page=15';
}
}
EOF;
$this->registerJs($customFilter, \yii\web\View::POS_END);
//-------------------------------------//
var grid = document.querySelector(\'.grid\');
var msnry = new Masonry( grid, {
itemSelector: \'none\', // select none at first
columnWidth: \'.grid__col-sizer\',
gutter: \'.grid__gutter-sizer\',
percentPosition: true,
stagger: 30,
// nicer reveal transition
visibleStyle: { transform: \'translateY(0)\', opacity: 1 },
hiddenStyle: { transform: \'translateY(100px)\', opacity: 0 },
});
// initial items reveal
imagesLoaded( grid, function() {
grid.classList.remove(\'are-images-unloaded\');
msnry.options.itemSelector = \'.grid__item\';
var items = grid.querySelectorAll(\'.grid__item\');
msnry.appended( items );
});
//-------------------------------------//
', \yii\web\View::POS_END);?>
css
body {
font-family: sans-serif;
line-height: 1.4;
font-size: 18px;
padding: 20px;
/*max-width: 640px;*/
margin: 0 auto;
}
.grid {
max-width: 1200px;
}
/* reveal grid after images loaded */
.grid.are-images-unloaded {
opacity: 0;
}
.grid__item,
.grid__col-sizer {
width: 32%;
}
.grid__gutter-sizer { width: 2%; }
/* hide by default */
.grid.are-images-unloaded .image-grid__item {
opacity: 0;
}
.grid__item {
margin-bottom: 20px;
float: left;
}
.grid__item--height1 { height: 140px; background: #EA0; }
.grid__item--height2 { height: 220px; background: #C25; }
.grid__item--height3 { height: 300px; background: #19F; }
.grid__item--width2 { width: 66%; }
.grid__item img {
display: block;
max-width: 100%;
}
.page-load-status {
display: none; /* hidden by default */
padding-top: 20px;
border-top: 1px solid #DDD;
text-align: center;
color: #777;
}
.loader-ellips {
font-size: 20px; /* change size here */
position: relative;
width: 4em;
height: 1em;
margin: 10px auto;
}
.loader-ellips__dot {
display: block;
width: 1em;
height: 1em;
border-radius: 0.5em;
background: #555; /* change color here */
position: absolute;
animation-duration: 0.5s;
animation-timing-function: ease;
animation-iteration-count: infinite;
}
.loader-ellips__dot:nth-child(1),
.loader-ellips__dot:nth-child(2) {
left: 0;
}
.loader-ellips__dot:nth-child(3) { left: 1.5em; }
.loader-ellips__dot:nth-child(4) { left: 3em; }
@keyframes reveal {
from { transform: scale(0.001); }
to { transform: scale(1); }
}
@keyframes slide {
to { transform: translateX(1.5em) }
}
.loader-ellips__dot:nth-child(1) {
animation-name: reveal;
}
.loader-ellips__dot:nth-child(2),
.loader-ellips__dot:nth-child(3) {
animation-name: slide;
}
.loader-ellips__dot:nth-child(4) {
animation-name: reveal;
animation-direction: reverse;
}
button{
font-size: 20px;
padding: 10px;
}
/* loader ellips in separate pen CSS */
.loader-wheel {
font-size: 64px; /* change size here */
position: relative;
height: 1em;
width: 1em;
padding-left: 0.45em;
overflow: hidden;
margin: 0 auto;
animation: loader-wheel-rotate 0.5s steps(12) infinite;
}
.loader-wheel i {
display: block;
position: absolute;
height: 0.3em;
width: 0.1em;
border-radius: 0.05em;
background: #333; /* change color here */
opacity: 0.8;
transform: rotate(-30deg);
transform-origin: center 0.5em;
}
@keyframes loader-wheel-rotate {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
klintlili/yii2-infinitescroll 适用场景与选型建议
klintlili/yii2-infinitescroll 是一款 基于 JavaScript 开发的 Composer 扩展包,目前已累计 3 次下载、GitHub Stars 达 0, 最近一次更新时间为 2020 年 06 月 13 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「extension」 「yii2」 「infinite scroll」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 klintlili/yii2-infinitescroll 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 klintlili/yii2-infinitescroll 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 klintlili/yii2-infinitescroll 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A custom URL rule class for Yii 2 which allows to create translated URL rules
With this extension you can read nearly every paginator and realize infinite scrolling
Iteration tools for PHP
The Yii2 extension uses jQuery jquery.carousel-1.1.min.js and makes image carousel from php array of structure defined.
TYPO3 CMS extension to create gallery content element with preset crop ratios and pagination
UI Kit 3 Extension for Yii2
统计信息
- 总下载量: 3
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 4
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2020-06-13