From f265b631701b0ba6c5d505d27354e95285953f68 Mon Sep 17 00:00:00 2001 From: cdswyda Date: Fri, 12 Nov 2021 11:24:26 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=8A=A0=E4=B8=AA=E6=A0=87=E5=BF=97?= =?UTF-8?q?=E4=BD=8D=EF=BC=8C=E6=8E=A7=E5=88=B6=E5=86=BB=E7=BB=93=E9=A6=96?= =?UTF-8?q?=E8=A1=8C=E9=A6=96=E5=88=97=E5=88=B0=E5=BA=95=E6=98=AF=E6=8C=87?= =?UTF-8?q?=E5=8F=AF=E6=98=AF=E5=8C=BA=E5=9F=9F=E8=BF=98=E6=98=AF=E5=AE=9E?= =?UTF-8?q?=E9=99=85=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/freezen.js | 101 +++++++++++++++++++++++-------------- src/global/api.js | 83 +++++++++++++++++++----------- 2 files changed, 117 insertions(+), 67 deletions(-) diff --git a/src/controllers/freezen.js b/src/controllers/freezen.js index 2e2d48f..17e4ae4 100644 --- a/src/controllers/freezen.js +++ b/src/controllers/freezen.js @@ -25,6 +25,10 @@ const luckysheetFreezen = { windowWidth: null, freezenhorizontaldata: null, freezenverticaldata: null, + // 定义冻结首行、首列是实际的第一行第一列还是当前视图的第一行第一列 + // excel 为视图的第一行第一列,但此处实现有问题,如滚动到15行冻结首行,当前冻结了15行,保存再进去实际冻结了第一行 + // 冻结真实的第一行、第一列更符合直觉 + freezenRealFirstRowColumn: true, cutVolumn: function (arr, cutindex) { if(cutindex <= 0){ return arr; @@ -102,20 +106,33 @@ const luckysheetFreezen = { } if (freezenverticaldata == null) { - let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); - let dataset_col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); - if (dataset_col_st == -1) { - dataset_col_st = 0; + if (_this.freezenRealFirstRowColumn) { + let dataset_col_st = 0; + left = Store.visibledatacolumn[dataset_col_st] - 2 + Store.rowHeaderWidth; + freezenverticaldata = [ + Store.visibledatacolumn[dataset_col_st], + dataset_col_st + 1, + 0, + _this.cutVolumn(Store.visibledatacolumn, dataset_col_st + 1), + left + ]; + } else { + let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); + let dataset_col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); + if (dataset_col_st == -1) { + dataset_col_st = 0; + } + + left = Store.visibledatacolumn[dataset_col_st] - 2 - scrollLeft + Store.rowHeaderWidth; + freezenverticaldata = [ + Store.visibledatacolumn[dataset_col_st], + dataset_col_st + 1, + scrollLeft, + _this.cutVolumn(Store.visibledatacolumn, dataset_col_st + 1), + left + ]; } - left = Store.visibledatacolumn[dataset_col_st] - 2 - scrollLeft + Store.rowHeaderWidth; - freezenverticaldata = [ - Store.visibledatacolumn[dataset_col_st], - dataset_col_st + 1, - scrollLeft, - _this.cutVolumn(Store.visibledatacolumn, dataset_col_st + 1), - left - ]; _this.saveFreezen(null, null, freezenverticaldata, left); } @@ -372,34 +389,44 @@ const luckysheetFreezen = { } if (freezenhorizontaldata == null) { - // let scrollTop = $("#luckysheet-cell-main").scrollTop(); - // let dataset_row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); - // if (dataset_row_st == -1) { - // dataset_row_st = 0; - // } - dataset_row_st = 0; - - // top = Store.visibledatarow[dataset_row_st] - 2 - scrollTop + Store.columnHeaderHeight; - top = Store.visibledatarow[dataset_row_st] - 2 + Store.columnHeaderHeight; - freezenhorizontaldata = [ - Store.visibledatarow[dataset_row_st], - dataset_row_st + 1, - 0, - _this.cutVolumn(Store.visibledatarow, dataset_row_st + 1), - top - ]; - _this.saveFreezen(freezenhorizontaldata, top, null, null); - // todo: 没有下面代码 如果有滚动,冻结之后首行的行号仍显示的之前滚动的行号 - // todo: 不 setTimeout 这里直接刷新的话,冻结的首行显示有问题,没有列的分割线 - setTimeout(() => { - luckysheetFreezen.createAssistCanvas(); - luckysheetrefreshgrid(); - }); + let dataset_row_st; + if (_this.freezenRealFirstRowColumn) { + dataset_row_st = 0; + top = Store.visibledatarow[dataset_row_st] - 2 + Store.columnHeaderHeight; + freezenhorizontaldata = [ + Store.visibledatarow[dataset_row_st], + dataset_row_st + 1, + 0, + _this.cutVolumn(Store.visibledatarow, dataset_row_st + 1), + top + ]; + _this.saveFreezen(freezenhorizontaldata, top, null, null); + // todo: 没有下面代码 如果有滚动,冻结之后首行的行号仍显示的之前滚动的行号 + // todo: 不 setTimeout 这里直接刷新的话,冻结的首行显示有问题,没有列的分割线 + setTimeout(() => { + luckysheetFreezen.createAssistCanvas(); + luckysheetrefreshgrid(); + }); + } else { + let scrollTop = $("#luckysheet-cell-main").scrollTop(); + dataset_row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); + if (dataset_row_st == -1) { + dataset_row_st = 0; + } + + top = Store.visibledatarow[dataset_row_st] - 2 - scrollTop + Store.columnHeaderHeight; + freezenhorizontaldata = [ + Store.visibledatarow[dataset_row_st], + dataset_row_st + 1, + scrollTop, + _this.cutVolumn(Store.visibledatarow, dataset_row_st + 1), + top + ]; + _this.saveFreezen(freezenhorizontaldata, top, null, null); + } } _this.freezenhorizontaldata = freezenhorizontaldata; - - // $("#luckysheet-freezen-btn-horizontal").html(' '+locale().freezen.freezenCancel); diff --git a/src/global/api.js b/src/global/api.js index 77e7c16..dc858cc 100644 --- a/src/global/api.js +++ b/src/global/api.js @@ -609,23 +609,34 @@ export function frozenFirstRow(order) { // 冻结为当前sheet页 if (!order || order == getSheetIndex(Store.currentSheetIndex)) { - // let scrollTop = $("#luckysheet-cell-main").scrollTop(); + let freezenhorizontaldata, row_st, top; + if (luckysheetFreezen.freezenRealFirstRowColumn) { + let row_st = 0; + top = Store.visibledatarow[row_st] - 2 + Store.columnHeaderHeight; + freezenhorizontaldata = [ + Store.visibledatarow[row_st], + row_st + 1, + 0, + luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), + top + ]; + } else { + let scrollTop = $("#luckysheet-cell-main").scrollTop(); + row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); + if(row_st == -1){ + row_st = 0; + } - // let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); - // if(row_st == -1){ - // row_st = 0; - // } - let row_st = 0; + top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight; + freezenhorizontaldata = [ + Store.visibledatarow[row_st], + row_st + 1, + scrollTop, + luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), + top + ]; + } - // let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight; - let top = Store.visibledatarow[row_st] - 2 + Store.columnHeaderHeight; - let freezenhorizontaldata = [ - Store.visibledatarow[row_st], - row_st + 1, - 0, - luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), - top - ]; luckysheetFreezen.saveFreezen(freezenhorizontaldata, top, null, null); if (luckysheetFreezen.freezenverticaldata != null) { @@ -651,23 +662,35 @@ export function frozenFirstColumn(order) { // 冻结为当前sheet页 if (!order || order == getSheetIndex(Store.currentSheetIndex)) { - // let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); + let freezenverticaldata, col_st, left; + if (luckysheetFreezen.freezenRealFirstRowColumn) { + col_st = 0; + left = Store.visibledatacolumn[col_st] - 2 + Store.rowHeaderWidth; + freezenverticaldata = [ + Store.visibledatacolumn[col_st], + col_st + 1, + 0, + luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), + left + ]; + } else { + let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); - // let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); - // if(col_st == -1){ - // col_st = 0; - // } - let col_st = 0; + col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); + if(col_st == -1){ + col_st = 0; + } + + left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; + freezenverticaldata = [ + Store.visibledatacolumn[col_st], + col_st + 1, + scrollLeft, + luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), + left + ]; + } - // let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; - let left = Store.visibledatacolumn[col_st] - 2 + Store.rowHeaderWidth; - let freezenverticaldata = [ - Store.visibledatacolumn[col_st], - col_st + 1, - 0, - luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), - left - ]; luckysheetFreezen.saveFreezen(null, null, freezenverticaldata, left); if (luckysheetFreezen.freezenhorizontaldata != null) {