mirror of https://github.com/layui/layui
feat(flow): 新增 direction 选项 (#1638)
* feat(flow): 新增 direction 选项 * docs: 更新 flow 文档 * chore(flow): 优化注释描述 --------- Co-authored-by: 贤心 <3277200+sentsim@users.noreply.github.com>pull/1682/head
parent
4136f7af12
commit
e8dde4cc7f
|
@ -103,6 +103,18 @@ layui.each(data, function(index, item){
|
|||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>direction <sup>2.9.7+</sup></td>
|
||||
<td>
|
||||
|
||||
指定触发加载的方向,可选值:
|
||||
- `bottom` 滚动容器底部触发加载
|
||||
- `top` 滚动容器顶部触发加载
|
||||
|
||||
</td>
|
||||
<td>string</td>
|
||||
<td>'bottom'</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>done</td>
|
||||
<td colspan="3">
|
||||
|
||||
|
|
|
@ -17,9 +17,11 @@ layui.define('jquery', function(exports){
|
|||
|
||||
var elem = $(options.elem); if(!elem[0]) return;
|
||||
var scrollElem = $(options.scrollElem || document); // 滚动条所在元素
|
||||
var mb = options.mb || 50; //与底部的临界距离
|
||||
var isAuto = 'isAuto' in options ? options.isAuto : true; //是否自动滚动加载
|
||||
var threshold = 'mb' in options ? options.mb : 50; // 临界距离
|
||||
var isAuto = 'isAuto' in options ? options.isAuto : true; // 否自动滚动加载
|
||||
var end = options.end || '没有更多了'; // “末页”显示文案
|
||||
var direction = options.direction || 'bottom';
|
||||
var isTop = direction === 'top';
|
||||
|
||||
//滚动条所在元素是否为document
|
||||
var notDocument = options.scrollElem && options.scrollElem !== document;
|
||||
|
@ -29,18 +31,30 @@ layui.define('jquery', function(exports){
|
|||
,more = $('<div class="layui-flow-more"><a href="javascript:;">'+ ELEM_TEXT +'</a></div>');
|
||||
|
||||
if(!elem.find('.layui-flow-more')[0]){
|
||||
elem.append(more);
|
||||
elem[isTop ? 'prepend' : 'append'](more);
|
||||
}
|
||||
|
||||
//加载下一个元素
|
||||
var next = function(html, over){
|
||||
var scrollHeightStart = notDocument ? scrollElem.prop('scrollHeight') : document.documentElement.scrollHeight;
|
||||
var scrollTopStart = scrollElem.scrollTop();
|
||||
html = $(html);
|
||||
more.before(html);
|
||||
more[isTop ? 'after' : 'before'](html);
|
||||
over = over == 0 ? true : null;
|
||||
over ? more.html(end) : more.find('a').html(ELEM_TEXT);
|
||||
isOver = over;
|
||||
lock = null;
|
||||
lazyimg && lazyimg();
|
||||
if(isTop){
|
||||
var scrollHeightEnd = notDocument ? scrollElem.prop('scrollHeight') : document.documentElement.scrollHeight;
|
||||
if(page === 1){
|
||||
// 首次渲染后滑动到底部
|
||||
scrollElem.scrollTop(scrollHeightEnd);
|
||||
}else if(page > 1){
|
||||
var nextElementHeight = scrollHeightEnd - scrollHeightStart;
|
||||
scrollElem.scrollTop(scrollTopStart + nextElementHeight);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
//触发请求
|
||||
|
@ -64,6 +78,7 @@ layui.define('jquery', function(exports){
|
|||
lazyimg = that.lazyimg({
|
||||
elem: options.elem + ' img'
|
||||
,scrollElem: options.scrollElem
|
||||
,direction: options.direction
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -85,7 +100,7 @@ layui.define('jquery', function(exports){
|
|||
: document.documentElement.scrollHeight;
|
||||
|
||||
//临界点
|
||||
if(scrollHeight - top - height <= mb){
|
||||
if(!isTop ? scrollHeight - top - height <= threshold : top <= threshold){
|
||||
lock || done();
|
||||
}
|
||||
}, 100);
|
||||
|
@ -101,6 +116,8 @@ layui.define('jquery', function(exports){
|
|||
|
||||
var scrollElem = $(options.scrollElem || document); //滚动条所在元素
|
||||
var elem = options.elem || 'img';
|
||||
var direction = options.direction || 'bottom';
|
||||
var isTop = direction === 'top';
|
||||
|
||||
//滚动条所在元素是否为document
|
||||
var notDocument = options.scrollElem && options.scrollElem !== document;
|
||||
|
@ -113,7 +130,7 @@ layui.define('jquery', function(exports){
|
|||
}() : item.offset().top;
|
||||
|
||||
/* 始终只加载在当前屏范围内的图片 */
|
||||
if(elemTop >= start && elemTop <= end){
|
||||
if((isTop ? elemTop + item.height() : elemTop) >= start && elemTop <= end){
|
||||
if(item.attr('lay-src')){
|
||||
var src = item.attr('lay-src');
|
||||
layui.img(src, function(){
|
||||
|
|
Loading…
Reference in New Issue