Browse Source

fix: 加个标志位,控制冻结首行首列到底是指可是区域还是实际的

master
cdswyda 4 years ago
parent
commit
f265b63170
  1. 45
      src/controllers/freezen.js
  2. 63
      src/global/api.js

45
src/controllers/freezen.js

@ -25,6 +25,10 @@ const luckysheetFreezen = {
windowWidth: null, windowWidth: null,
freezenhorizontaldata: null, freezenhorizontaldata: null,
freezenverticaldata: null, freezenverticaldata: null,
// 定义冻结首行、首列是实际的第一行第一列还是当前视图的第一行第一列
// excel 为视图的第一行第一列,但此处实现有问题,如滚动到15行冻结首行,当前冻结了15行,保存再进去实际冻结了第一行
// 冻结真实的第一行、第一列更符合直觉
freezenRealFirstRowColumn: true,
cutVolumn: function (arr, cutindex) { cutVolumn: function (arr, cutindex) {
if(cutindex <= 0){ if(cutindex <= 0){
return arr; return arr;
@ -102,6 +106,17 @@ const luckysheetFreezen = {
} }
if (freezenverticaldata == null) { if (freezenverticaldata == null) {
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 scrollLeft = $("#luckysheet-cell-main").scrollLeft();
let dataset_col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); let dataset_col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft);
if (dataset_col_st == -1) { if (dataset_col_st == -1) {
@ -116,6 +131,8 @@ const luckysheetFreezen = {
_this.cutVolumn(Store.visibledatacolumn, dataset_col_st + 1), _this.cutVolumn(Store.visibledatacolumn, dataset_col_st + 1),
left left
]; ];
}
_this.saveFreezen(null, null, freezenverticaldata, left); _this.saveFreezen(null, null, freezenverticaldata, left);
} }
@ -372,14 +389,9 @@ const luckysheetFreezen = {
} }
if (freezenhorizontaldata == null) { if (freezenhorizontaldata == null) {
// let scrollTop = $("#luckysheet-cell-main").scrollTop(); let dataset_row_st;
// let dataset_row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); if (_this.freezenRealFirstRowColumn) {
// if (dataset_row_st == -1) {
// dataset_row_st = 0;
// }
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; top = Store.visibledatarow[dataset_row_st] - 2 + Store.columnHeaderHeight;
freezenhorizontaldata = [ freezenhorizontaldata = [
Store.visibledatarow[dataset_row_st], Store.visibledatarow[dataset_row_st],
@ -395,11 +407,26 @@ const luckysheetFreezen = {
luckysheetFreezen.createAssistCanvas(); luckysheetFreezen.createAssistCanvas();
luckysheetrefreshgrid(); 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;
} }
_this.freezenhorizontaldata = freezenhorizontaldata; 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('<i class="fa fa-list-alt"></i> '+locale().freezen.freezenCancel); // $("#luckysheet-freezen-btn-horizontal").html('<i class="fa fa-list-alt"></i> '+locale().freezen.freezenCancel);

63
src/global/api.js

@ -609,23 +609,34 @@ export function frozenFirstRow(order) {
// 冻结为当前sheet页 // 冻结为当前sheet页
if (!order || order == getSheetIndex(Store.currentSheetIndex)) { if (!order || order == getSheetIndex(Store.currentSheetIndex)) {
// let scrollTop = $("#luckysheet-cell-main").scrollTop(); let freezenhorizontaldata, row_st, top;
if (luckysheetFreezen.freezenRealFirstRowColumn) {
// let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop);
// if(row_st == -1){
// row_st = 0;
// }
let row_st = 0; let row_st = 0;
top = Store.visibledatarow[row_st] - 2 + Store.columnHeaderHeight;
// let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight; freezenhorizontaldata = [
let top = Store.visibledatarow[row_st] - 2 + Store.columnHeaderHeight;
let freezenhorizontaldata = [
Store.visibledatarow[row_st], Store.visibledatarow[row_st],
row_st + 1, row_st + 1,
0, 0,
luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1),
top top
]; ];
} else {
let scrollTop = $("#luckysheet-cell-main").scrollTop();
row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop);
if(row_st == -1){
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
];
}
luckysheetFreezen.saveFreezen(freezenhorizontaldata, top, null, null); luckysheetFreezen.saveFreezen(freezenhorizontaldata, top, null, null);
if (luckysheetFreezen.freezenverticaldata != null) { if (luckysheetFreezen.freezenverticaldata != null) {
@ -651,23 +662,35 @@ export function frozenFirstColumn(order) {
// 冻结为当前sheet页 // 冻结为当前sheet页
if (!order || order == getSheetIndex(Store.currentSheetIndex)) { 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); col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft);
// if(col_st == -1){ if(col_st == -1){
// col_st = 0; col_st = 0;
// } }
let col_st = 0;
// let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth;
let left = Store.visibledatacolumn[col_st] - 2 + Store.rowHeaderWidth; freezenverticaldata = [
let freezenverticaldata = [
Store.visibledatacolumn[col_st], Store.visibledatacolumn[col_st],
col_st + 1, col_st + 1,
0, scrollLeft,
luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1),
left left
]; ];
}
luckysheetFreezen.saveFreezen(null, null, freezenverticaldata, left); luckysheetFreezen.saveFreezen(null, null, freezenverticaldata, left);
if (luckysheetFreezen.freezenhorizontaldata != null) { if (luckysheetFreezen.freezenhorizontaldata != null) {

Loading…
Cancel
Save