Browse Source

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

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

29
src/controllers/freezen.js

@ -9,6 +9,8 @@ import luckysheetDropCell from './dropCell';
import { rowLocationByIndex, colLocationByIndex } from '../global/location'; import { rowLocationByIndex, colLocationByIndex } from '../global/location';
import Store from '../store'; import Store from '../store';
import locale from '../locale/locale'; import locale from '../locale/locale';
import { luckysheetrefreshgrid } from '../global/refresh';
const luckysheetFreezen = { 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>', 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,24 +372,34 @@ const luckysheetFreezen = {
} }
if (freezenhorizontaldata == null) { if (freezenhorizontaldata == null) {
let scrollTop = $("#luckysheet-cell-main").scrollTop(); // let scrollTop = $("#luckysheet-cell-main").scrollTop();
let dataset_row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); // let dataset_row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop);
if (dataset_row_st == -1) { // 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 - scrollTop + Store.columnHeaderHeight;
top = Store.visibledatarow[dataset_row_st] - 2 + Store.columnHeaderHeight;
freezenhorizontaldata = [ freezenhorizontaldata = [
Store.visibledatarow[dataset_row_st], Store.visibledatarow[dataset_row_st],
dataset_row_st + 1, dataset_row_st + 1,
scrollTop, 0,
_this.cutVolumn(Store.visibledatarow, dataset_row_st + 1), _this.cutVolumn(Store.visibledatarow, dataset_row_st + 1),
top top
]; ];
_this.saveFreezen(freezenhorizontaldata, top, null, null); _this.saveFreezen(freezenhorizontaldata, top, null, null);
// todo: 没有下面代码 如果有滚动,冻结之后首行的行号仍显示的之前滚动的行号
// todo: 不 setTimeout 这里直接刷新的话,冻结的首行显示有问题,没有列的分割线
setTimeout(() => {
luckysheetFreezen.createAssistCanvas();
luckysheetrefreshgrid();
});
} }
_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);
@ -414,6 +426,7 @@ const luckysheetFreezen = {
$("#luckysheet-freezen-btn-horizontal").html(freezeHTML); $("#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 }); $("#luckysheet-freezebar-horizontal").show().find(".luckysheet-freezebar-horizontal-handle").css({ "top": top }).end().find(".luckysheet-freezebar-horizontal-drop").css({ "top": top });
}, },
createAssistCanvas: function(){ createAssistCanvas: function(){
let _this = this; 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 {openProtectionModal,checkProtectionFormatCells,checkProtectionNotEnable} from './protection';
import Store from '../store'; import Store from '../store';
import locale from '../locale/locale'; import locale from '../locale/locale';
import {checkTheStatusOfTheSelectedCells} from '../global/api'; import {checkTheStatusOfTheSelectedCells, frozenFirstRow} from '../global/api';
const menuButton = { const menuButton = {
"menu": '<div class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-menuButton ${subclass} luckysheet-mousedown-cancel" id="luckysheet-icon-${id}-menuButton">${item}</div>', "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); luckysheetFreezen.saveFrozen(itemvalue);
if(itemvalue == "freezenRow"){ //首行冻结 if(itemvalue == "freezenRow"){ //首行冻结
let scrollTop = $("#luckysheet-cell-main").scrollTop(); frozenFirstRow();
let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); // let scrollTop = $("#luckysheet-cell-main").scrollTop();
if(row_st == -1){ // let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop);
row_st = 0; // 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]; // let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight;
luckysheetFreezen.saveFreezen(freezenhorizontaldata, top, null, null); // 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(); // if (luckysheetFreezen.freezenverticaldata != null) {
luckysheetFreezen.createAssistCanvas(); // luckysheetFreezen.cancelFreezenVertical();
luckysheetrefreshgrid(); // luckysheetFreezen.createAssistCanvas();
} // luckysheetrefreshgrid();
// }
luckysheetFreezen.createFreezenHorizontal(freezenhorizontaldata, top); // luckysheetFreezen.createFreezenHorizontal(freezenhorizontaldata, top);
luckysheetFreezen.createAssistCanvas(); // luckysheetFreezen.createAssistCanvas();
luckysheetrefreshgrid(); // luckysheetrefreshgrid();
} }
else if(itemvalue == "freezenColumn"){ //首列冻结 else if(itemvalue == "freezenColumn"){ //首列冻结
let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); let scrollLeft = $("#luckysheet-cell-main").scrollLeft();

20
src/global/api.js

@ -609,18 +609,20 @@ 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 scrollTop = $("#luckysheet-cell-main").scrollTop();
let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); // let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop);
if(row_st == -1){ // if(row_st == -1){
row_st = 0; // 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 = [ let freezenhorizontaldata = [
Store.visibledatarow[row_st], Store.visibledatarow[row_st],
row_st + 1, row_st + 1,
scrollTop, 0,
luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1),
top top
]; ];

Loading…
Cancel
Save