Browse Source

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

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

101
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,20 +106,33 @@ const luckysheetFreezen = {
} }
if (freezenverticaldata == null) { if (freezenverticaldata == null) {
let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); if (_this.freezenRealFirstRowColumn) {
let dataset_col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); let dataset_col_st = 0;
if (dataset_col_st == -1) { left = Store.visibledatacolumn[dataset_col_st] - 2 + Store.rowHeaderWidth;
dataset_col_st = 0; 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); _this.saveFreezen(null, null, freezenverticaldata, left);
} }
@ -372,35 +389,45 @@ 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; top = Store.visibledatarow[dataset_row_st] - 2 + Store.columnHeaderHeight;
// } freezenhorizontaldata = [
dataset_row_st = 0; Store.visibledatarow[dataset_row_st],
dataset_row_st + 1,
// top = Store.visibledatarow[dataset_row_st] - 2 - scrollTop + Store.columnHeaderHeight; 0,
top = Store.visibledatarow[dataset_row_st] - 2 + Store.columnHeaderHeight; _this.cutVolumn(Store.visibledatarow, dataset_row_st + 1),
freezenhorizontaldata = [ top
Store.visibledatarow[dataset_row_st], ];
dataset_row_st + 1, _this.saveFreezen(freezenhorizontaldata, top, null, null);
0, // todo: 没有下面代码 如果有滚动,冻结之后首行的行号仍显示的之前滚动的行号
_this.cutVolumn(Store.visibledatarow, dataset_row_st + 1), // todo: 不 setTimeout 这里直接刷新的话,冻结的首行显示有问题,没有列的分割线
top setTimeout(() => {
]; luckysheetFreezen.createAssistCanvas();
_this.saveFreezen(freezenhorizontaldata, top, null, null); luckysheetrefreshgrid();
// todo: 没有下面代码 如果有滚动,冻结之后首行的行号仍显示的之前滚动的行号 });
// todo: 不 setTimeout 这里直接刷新的话,冻结的首行显示有问题,没有列的分割线 } else {
setTimeout(() => { let scrollTop = $("#luckysheet-cell-main").scrollTop();
luckysheetFreezen.createAssistCanvas(); dataset_row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop);
luckysheetrefreshgrid(); 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; _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);
// $("#luckysheet-freezen-btn-horizontal").html('<i class="luckysheet-icon-img-container iconfont luckysheet-iconfont-dongjie1"></i> '+locale().freezen.freezenCancel); // $("#luckysheet-freezen-btn-horizontal").html('<i class="luckysheet-icon-img-container iconfont luckysheet-iconfont-dongjie1"></i> '+locale().freezen.freezenCancel);

83
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 = 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); top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight;
// if(row_st == -1){ freezenhorizontaldata = [
// row_st = 0; Store.visibledatarow[row_st],
// } row_st + 1,
let row_st = 0; 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); 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;
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); luckysheetFreezen.saveFreezen(null, null, freezenverticaldata, left);
if (luckysheetFreezen.freezenhorizontaldata != null) { if (luckysheetFreezen.freezenhorizontaldata != null) {

Loading…
Cancel
Save