Browse Source

fix: 修复存在滚动时 点击冻结首行 实际冻结的是当前视图第一行的bug

master
cdswyda 4 years ago
parent
commit
d192b3cf34
  1. 25
      src/controllers/freezen.js
  2. 37
      src/controllers/menuButton.js
  3. 16
      src/global/api.js

25
src/controllers/freezen.js

@ -9,6 +9,8 @@ import luckysheetDropCell from './dropCell';
import { rowLocationByIndex, colLocationByIndex } from '../global/location';
import Store from '../store';
import locale from '../locale/locale';
import { luckysheetrefreshgrid } from '../global/refresh';
const luckysheetFreezen = {
freezenHorizontalHTML: '<div id="luckysheet-freezebar-horizontal" class="luckysheet-freezebar" tabindex="0"><div class="luckysheet-freezebar-handle luckysheet-freezebar-horizontal-handle" ><div class="luckysheet-freezebar-handle-bar luckysheet-freezebar-horizontal-handle-title" ></div><div class="luckysheet-freezebar-handle-bar luckysheet-freezebar-horizontal-handle-bar" ></div></div><div class="luckysheet-freezebar-drop luckysheet-freezebar-horizontal-drop" ><div class="luckysheet-freezebar-drop-bar luckysheet-freezebar-horizontal-drop-title" ></div><div class="luckysheet-freezebar-drop-bar luckysheet-freezebar-horizontal-drop-bar" >&nbsp;</div></div></div>',
@ -370,25 +372,35 @@ 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) {
// 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 - scrollTop + Store.columnHeaderHeight;
top = Store.visibledatarow[dataset_row_st] - 2 + Store.columnHeaderHeight;
freezenhorizontaldata = [
Store.visibledatarow[dataset_row_st],
dataset_row_st + 1,
scrollTop,
0,
_this.cutVolumn(Store.visibledatarow, dataset_row_st + 1),
top
];
_this.saveFreezen(freezenhorizontaldata, top, null, null);
// todo: 没有下面代码 如果有滚动,冻结之后首行的行号仍显示的之前滚动的行号
// todo: 不 setTimeout 这里直接刷新的话,冻结的首行显示有问题,没有列的分割线
setTimeout(() => {
luckysheetFreezen.createAssistCanvas();
luckysheetrefreshgrid();
});
}
_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="luckysheet-icon-img-container iconfont luckysheet-iconfont-dongjie1"></i> '+locale().freezen.freezenCancel);
@ -414,6 +426,7 @@ const luckysheetFreezen = {
$("#luckysheet-freezen-btn-horizontal").html(freezeHTML);
$("#luckysheet-freezebar-horizontal").show().find(".luckysheet-freezebar-horizontal-handle").css({ "top": top }).end().find(".luckysheet-freezebar-horizontal-drop").css({ "top": top });
},
createAssistCanvas: function(){
let _this = this;

37
src/controllers/menuButton.js

@ -37,7 +37,7 @@ import { replaceHtml, getObjType, rgbTohex, mouseclickposition, luckysheetfontfo
import {openProtectionModal,checkProtectionFormatCells,checkProtectionNotEnable} from './protection';
import Store from '../store';
import locale from '../locale/locale';
import {checkTheStatusOfTheSelectedCells} from '../global/api';
import {checkTheStatusOfTheSelectedCells, frozenFirstRow} from '../global/api';
const menuButton = {
"menu": '<div class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-menuButton ${subclass} luckysheet-mousedown-cancel" id="luckysheet-icon-${id}-menuButton">${item}</div>',
@ -1624,24 +1624,25 @@ const menuButton = {
luckysheetFreezen.saveFrozen(itemvalue);
if(itemvalue == "freezenRow"){ //首行冻结
let scrollTop = $("#luckysheet-cell-main").scrollTop();
let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop);
if(row_st == -1){
row_st = 0;
}
let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight;
let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top];
luckysheetFreezen.saveFreezen(freezenhorizontaldata, top, null, null);
if (luckysheetFreezen.freezenverticaldata != null) {
luckysheetFreezen.cancelFreezenVertical();
luckysheetFreezen.createAssistCanvas();
luckysheetrefreshgrid();
}
frozenFirstRow();
// let scrollTop = $("#luckysheet-cell-main").scrollTop();
// let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop);
// if(row_st == -1){
// row_st = 0;
// }
// let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight;
// let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top];
// luckysheetFreezen.saveFreezen(freezenhorizontaldata, top, null, null);
// if (luckysheetFreezen.freezenverticaldata != null) {
// luckysheetFreezen.cancelFreezenVertical();
// luckysheetFreezen.createAssistCanvas();
// luckysheetrefreshgrid();
// }
luckysheetFreezen.createFreezenHorizontal(freezenhorizontaldata, top);
luckysheetFreezen.createAssistCanvas();
luckysheetrefreshgrid();
// luckysheetFreezen.createFreezenHorizontal(freezenhorizontaldata, top);
// luckysheetFreezen.createAssistCanvas();
// luckysheetrefreshgrid();
}
else if(itemvalue == "freezenColumn"){ //首列冻结
let scrollLeft = $("#luckysheet-cell-main").scrollLeft();

16
src/global/api.js

@ -609,18 +609,20 @@ export function frozenFirstRow(order) {
// 冻结为当前sheet页
if (!order || order == getSheetIndex(Store.currentSheetIndex)) {
let scrollTop = $("#luckysheet-cell-main").scrollTop();
// let scrollTop = $("#luckysheet-cell-main").scrollTop();
let 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;
let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight;
// 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,
scrollTop,
0,
luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1),
top
];

Loading…
Cancel
Save