feat:增加 onBodyScroll 回调函数,在表体滚动时返回可视区最后一条数据的 index

This commit is contained in:
yangchch6 2019-08-27 11:10:47 +08:00
parent b927c3a5eb
commit bdde396727
14 changed files with 24906 additions and 229325 deletions

View File

@ -115,6 +115,7 @@ var propTypes = {
rowDraggAble: _propTypes2["default"].bool,
onDropRow: _propTypes2["default"].func,
onDragRowStart: _propTypes2["default"].func,
onBodyScroll: _propTypes2["default"].func,
bodyDisplayInRow: _propTypes2["default"].bool, // 表格内容超出列宽度时进行换行 or 以...形式展现
headerDisplayInRow: _propTypes2["default"].bool, // 表头内容超出列宽度时进行换行 or 以...形式展现
showRowNum: _propTypes2["default"].object // 表格是否自动生成序号,格式为{base:number || 0,defaultKey:string || '_index',defaultName:string || '序号'}
@ -165,6 +166,7 @@ var defaultProps = {
rowDraggAble: false,
onDropRow: function onDropRow() {},
onDragRowStart: function onDragRowStart() {},
onBodyScroll: function onBodyScroll() {},
bodyDisplayInRow: true,
headerDisplayInRow: true,
showRowNum: false
@ -1430,7 +1432,8 @@ var Table = function (_Component) {
scroll = _props9$scroll === undefined ? {} : _props9$scroll,
clsPrefix = _props9.clsPrefix,
handleScrollY = _props9.handleScrollY,
handleScrollX = _props9.handleScrollX;
handleScrollX = _props9.handleScrollX,
onBodyScroll = _props9.onBodyScroll;
var _refs = this.refs,
fixedColumnsBodyLeft = _refs.fixedColumnsBodyLeft,
fixedColumnsBodyRight = _refs.fixedColumnsBodyRight;
@ -1477,7 +1480,7 @@ var Table = function (_Component) {
}
this.lastScrollTop = e.target.scrollTop;
if (handleScrollY) {
(0, _utils.debounce)(handleScrollY(this.lastScrollTop, this.treeType), 300);
(0, _utils.debounce)(handleScrollY(this.lastScrollTop, this.treeType, onBodyScroll), 300);
}
}

View File

@ -224,6 +224,7 @@ function bigData(Table) {
*@description 根据返回的scrollTop计算当前的索引此处做了两次缓存一个是根据上一次的currentIndex计算当前currentIndex另一个是根据当前内容区的数据是否在缓存中如果在则不重新render页面
*@param 最新一次滚动的scrollTop
*@param treeType是否是树状表
*@param callback表体滚动过程中触发的回调
*/
@ -354,7 +355,7 @@ function bigData(Table) {
}
};
this.handleScrollY = function (nextScrollTop, treeType) {
this.handleScrollY = function (nextScrollTop, treeType, callback) {
//树表逻辑
// 关键点是动态的获取startIndex和endIndex
// 法子一子节点也看成普通tr最开始需要设置一共有多少行哪行显示哪行不显示如何确定
@ -446,6 +447,7 @@ function bigData(Table) {
_this4.startIndex = startIndex;
_this4.endIndex = endIndex;
_this4.setState({ needRender: !needRender });
callback(parseInt(currentIndex + rowsInView));
}
}
// 向上滚动当前的index是否已经加载currentIndex若干上临界值小于startIndex则重新渲染
@ -458,6 +460,7 @@ function bigData(Table) {
_this4.startIndex = startIndex;
_this4.endIndex = _this4.startIndex + loadCount;
_this4.setState({ needRender: !needRender });
callback(parseInt(currentIndex + rowsInView));
}
// console.log(
// "**index**" + index,

View File

@ -62,6 +62,14 @@ class Demo30 extends Component {
}
}
/**
* 表体滚动加载时触发的回调函数
* @param endIndex 可视区最后一条数据的 index 序号
*/
handleBodyScroll = endIndex => {
console.log('endIndex', endIndex);
}
render() {
return (
<div>
@ -72,6 +80,7 @@ class Demo30 extends Component {
onRowClick={(record, index, indent) => {
console.log('currentIndex--'+index);
}}
onBodyScroll={this.handleBodyScroll}
/>
</div>
);

File diff suppressed because one or more lines are too long

6
dist/demo.css.map vendored

File diff suppressed because one or more lines are too long

235127
dist/demo.js vendored

File diff suppressed because one or more lines are too long

10
dist/demo.js.map vendored

File diff suppressed because one or more lines are too long

View File

@ -371,7 +371,11 @@ const BigDataTable = bigData(Table);
#### API
Table 组件参数:
| 参数 | 说明 | 类型 | 返回值 |
| ------ | ---------- | -------- | ---- |
| onBodyScroll | 表体滚动加载时触发的回调函数 | function(endIndex) | `endIndex` : 可视区最后一条数据的 index 序号 |
#### bigData 使用示例
- [万行以上数据渲染](http://design.yonyoucloud.com/tinper-bee/bee-table#%E4%B8%87%E8%A1%8C%E4%BB%A5%E4%B8%8A%E6%95%B0%E6%8D%AE%E6%B8%B2%E6%9F%93)

View File

@ -59,6 +59,7 @@ const propTypes = {
rowDraggAble: PropTypes.bool,
onDropRow: PropTypes.func,
onDragRowStart: PropTypes.func,
onBodyScroll: PropTypes.func,
bodyDisplayInRow: PropTypes.bool, // 表格内容超出列宽度时进行换行 or 以...形式展现
headerDisplayInRow: PropTypes.bool, // 表头内容超出列宽度时进行换行 or 以...形式展现
showRowNum: PropTypes.object, // 表格是否自动生成序号,格式为{base:number || 0,defaultKey:string || '_index',defaultName:string || '序号'}
@ -100,6 +101,7 @@ const defaultProps = {
rowDraggAble:false,
onDropRow: ()=>{},
onDragRowStart: ()=>{},
onBodyScroll: ()=>{},
bodyDisplayInRow: true,
headerDisplayInRow: true,
showRowNum: false,
@ -1228,7 +1230,7 @@ class Table extends Component {
handleBodyScroll(e) {
const headTable = this.headTable;
const { scroll = {},clsPrefix,handleScrollY, handleScrollX} = this.props;
const { scroll = {},clsPrefix,handleScrollY, handleScrollX, onBodyScroll} = this.props;
const {fixedColumnsBodyLeft, fixedColumnsBodyRight } = this.refs;
// Prevent scrollTop setter trigger onScroll event
// http://stackoverflow.com/q/1386696
@ -1279,7 +1281,7 @@ class Table extends Component {
this.lastScrollTop = e.target.scrollTop;
if(handleScrollY){
debounce(
handleScrollY(this.lastScrollTop,this.treeType),
handleScrollY(this.lastScrollTop,this.treeType,onBodyScroll),
300)
}

View File

@ -212,8 +212,9 @@ export default function bigData(Table) {
*@description 根据返回的scrollTop计算当前的索引此处做了两次缓存一个是根据上一次的currentIndex计算当前currentIndex另一个是根据当前内容区的数据是否在缓存中如果在则不重新render页面
*@param 最新一次滚动的scrollTop
*@param treeType是否是树状表
*@param callback表体滚动过程中触发的回调
*/
handleScrollY = (nextScrollTop, treeType) => {
handleScrollY = (nextScrollTop, treeType, callback) => {
//树表逻辑
// 关键点是动态的获取startIndex和endIndex
// 法子一子节点也看成普通tr最开始需要设置一共有多少行哪行显示哪行不显示如何确定
@ -308,6 +309,7 @@ export default function bigData(Table) {
this.startIndex = startIndex;
this.endIndex = endIndex;
this.setState({ needRender: !needRender });
callback(parseInt(currentIndex + rowsInView));
}
}
// 向上滚动当前的index是否已经加载currentIndex若干上临界值小于startIndex则重新渲染
@ -320,6 +322,7 @@ export default function bigData(Table) {
this.startIndex = startIndex;
this.endIndex = this.startIndex + loadCount;
this.setState({ needRender: !needRender });
callback(parseInt(currentIndex + rowsInView));
}
// console.log(
// "**index**" + index,