import { getSheetIndex } from '../methods/get'; import { luckysheet_searcharray } from './sheetSearch'; import { selectHightlightShow } from './select'; import { createFilterOptions } from './filter'; import server from './server'; import menuButton from './menuButton'; import luckysheetPostil from './postil'; 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: '
 
', freezenVerticalHTML: '
 
', initialHorizontal: true, initialVertical: true, horizontalmovestate: false, horizontalmoveposition: null, verticalmovestate: false, verticalmoveposition: null, windowHeight: null, windowWidth: null, freezenhorizontaldata: null, freezenverticaldata: null, // 定义冻结首行、首列是实际的第一行第一列还是当前视图的第一行第一列 // excel 为视图的第一行第一列,但此处实现有问题,如滚动到15行冻结首行,当前冻结了15行,保存再进去实际冻结了第一行 // 冻结真实的第一行、第一列更符合直觉 freezenRealFirstRowColumn: true, cutVolumn: function (arr, cutindex) { if(cutindex <= 0){ return arr; } let pre = arr.slice(0, cutindex); let premax = pre[pre.length - 1]; let ret = arr.slice(cutindex); // for (let i = 0; i < ret.length; i++) { // ret[i] -= premax; // } return ret; }, cancelFreezenVertical: function (sheetIndex) { let _this = this; const _locale = locale(); const locale_freezen = _locale.freezen; $("#luckysheet-freezen-btn-vertical").html(' '+locale_freezen.freezenColumn); _this.freezenverticaldata = null; let isvertical = $("#luckysheet-freezebar-vertical").is(":visible"); $("#luckysheet-freezebar-vertical").hide(); if (sheetIndex == null) { sheetIndex = Store.currentSheetIndex; } let currentSheet = Store.luckysheetfile[getSheetIndex(sheetIndex)]; if (currentSheet.freezen != null) { currentSheet.freezen.vertical = null; } if(currentSheet.frozen != null && isvertical){ server.saveParam("all", sheetIndex, currentSheet.frozen, { "k": "frozen" }); } }, createFreezenVertical: function (freezenverticaldata, left) { let _this = this; if (_this.initialVertical) { _this.initialVertical = false; $("#luckysheet-grid-window-1").append(_this.freezenVerticalHTML); $("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-drop").hover(function () { $(this).parent().addClass("luckysheet-freezebar-hover"); }, function () { $(this).parent().removeClass("luckysheet-freezebar-hover"); }); $("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-drop").mousedown(function () { _this.verticalmovestate = true; _this.verticalmoveposition = $(this).position().left; _this.windowWidth = $("#luckysheet-grid-window-1").width(); $(this).parent().addClass("luckysheet-freezebar-active"); $("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-handle").css("cursor", "-webkit-grabbing"); }); let gridheight = $("#luckysheet-grid-window-1").height(); $("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-handle").css({ "height": gridheight - 10, "width": "4px", "cursor": "-webkit-grab", "top": "0px" }).end().find(".luckysheet-freezebar-vertical-drop").css({ "height": gridheight - 10, "width": "4px", "top": "0px", "cursor": "-webkit-grab" }); } 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 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 ]; } _this.saveFreezen(null, null, freezenverticaldata, left); } _this.freezenverticaldata = freezenverticaldata; // $("#luckysheet-freezen-btn-horizontal").html(' '+locale().freezen.freezenCancel); // 解决freeze 不垂直居中的问题 const freezeHTML = `
${locale().freezen.freezenCancel}
` $("#luckysheet-freezen-btn-horizontal").html(freezeHTML); $("#luckysheet-freezebar-vertical").show().find(".luckysheet-freezebar-vertical-handle").css({ "left": left }).end().find(".luckysheet-freezebar-vertical-drop").css({ "left": left }); }, saveFreezen: function (freezenhorizontaldata, top, freezenverticaldata, left) { let currentSheet = Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)]; if (currentSheet.freezen == null) { currentSheet.freezen = {}; } if (freezenhorizontaldata != null) { if (currentSheet.freezen.horizontal == null) { currentSheet.freezen.horizontal = {}; } currentSheet.freezen.horizontal.freezenhorizontaldata = freezenhorizontaldata; currentSheet.freezen.horizontal.top = top; } if (freezenverticaldata != null) { if (currentSheet.freezen.vertical == null) { currentSheet.freezen.vertical = {}; } currentSheet.freezen.vertical.freezenverticaldata = freezenverticaldata; currentSheet.freezen.vertical.left = left; } // if(currentSheet.freezen != null){ // server.saveParam("all", Store.currentSheetIndex, currentSheet.freezen, { "k": "freezen" }); // } // use new property frozen if(currentSheet.frozen != null){ server.saveParam("all", Store.currentSheetIndex, currentSheet.frozen, { "k": "frozen" }); } }, initialFreezen: function (sheetIndex) { let _this = this; // when init ,we get frozen, but here, we need freezen,so tranform it _this.frozenTofreezen(); let currentSheet = Store.luckysheetfile[getSheetIndex(sheetIndex)]; if (currentSheet.freezen != null && currentSheet.freezen.horizontal != null && currentSheet.freezen.horizontal.freezenhorizontaldata != null) { _this.createFreezenHorizontal(currentSheet.freezen.horizontal.freezenhorizontaldata, currentSheet.freezen.horizontal.top); } else { _this.cancelFreezenHorizontal(sheetIndex); } if (currentSheet.freezen != null && currentSheet.freezen.vertical != null && currentSheet.freezen.vertical.freezenverticaldata != null) { _this.createFreezenVertical(currentSheet.freezen.vertical.freezenverticaldata, currentSheet.freezen.vertical.left); } else { _this.cancelFreezenVertical(sheetIndex); } _this.createAssistCanvas(); }, changeFreezenIndex: function (originindex, type) { let _this = this; if (type == "v" && _this.freezenverticaldata != null) { let freezen_colindex = _this.freezenverticaldata[1]; let offset = luckysheet_searcharray(Store.visibledatacolumn, $("#luckysheet-cell-main").scrollLeft()); if (originindex - offset < freezen_colindex) { originindex = originindex - offset; } } else if (type == "h" && _this.freezenhorizontaldata != null) { let freezen_rowindex = _this.freezenhorizontaldata[1]; let offset = luckysheet_searcharray(Store.visibledatarow, $("#luckysheet-cell-main").scrollTop()); if (originindex - offset < freezen_rowindex) { originindex = originindex - offset; } } return originindex; }, scrollFreezen: function () { let _this = this; let row; let row_focus = Store.luckysheet_select_save[0]["row_focus"]; if(row_focus == Store.luckysheet_select_save[0]["row"][0]){ row = Store.luckysheet_select_save[0]["row"][1]; } else if(row_focus == Store.luckysheet_select_save[0]["row"][1]){ row = Store.luckysheet_select_save[0]["row"][0]; } let column; let column_focus = Store.luckysheet_select_save[0]["column_focus"]; if(column_focus == Store.luckysheet_select_save[0]["column"][0]){ column = Store.luckysheet_select_save[0]["column"][1]; } else if(column_focus == Store.luckysheet_select_save[0]["column"][1]){ column = Store.luckysheet_select_save[0]["column"][0]; } if (_this.freezenverticaldata != null) { let freezen_colindex = _this.freezenverticaldata[1]; let offset = luckysheet_searcharray(_this.freezenverticaldata[3], $("#luckysheet-cell-main").scrollLeft()); let top = _this.freezenverticaldata[4]; freezen_colindex += offset; if(column>=Store.visibledatacolumn.length){ column = Store.visibledatacolumn.length - 1; } if(freezen_colindex>=Store.visibledatacolumn.length){ freezen_colindex = Store.visibledatacolumn.length - 1; } let column_px = Store.visibledatacolumn[column], freezen_px = Store.visibledatacolumn[freezen_colindex]; if (column_px <= freezen_px+top) { setTimeout(function () { $("#luckysheet-scrollbar-x").scrollLeft(0); }, 100); } } if (_this.freezenhorizontaldata != null) { let freezen_rowindex = _this.freezenhorizontaldata[1]; let offset = luckysheet_searcharray(_this.freezenhorizontaldata[3], $("#luckysheet-cell-main").scrollTop()); let left = _this.freezenhorizontaldata[4]; freezen_rowindex += offset; if(row>=Store.visibledatarow.length){ row = Store.visibledatarow.length - 1; } if(freezen_rowindex>=Store.visibledatarow.length){ freezen_rowindex = Store.visibledatarow.length - 1; } let row_px = Store.visibledatarow[row], freezen_px = Store.visibledatarow[freezen_rowindex]; if (row_px <= freezen_px+left) { setTimeout(function () {$("#luckysheet-scrollbar-y").scrollTop(0);}, 100); } } }, cancelFreezenHorizontal: function (sheetIndex) { let _this = this; // $("#luckysheet-freezen-btn-horizontal").html(' '+locale().freezen.default); // 解决freeze 不垂直居中的问题 const freezeHTML = `
${locale().freezen.default}
` $("#luckysheet-freezen-btn-horizontal").html(freezeHTML); _this.freezenhorizontaldata = null; let ishorizontal = $("#luckysheet-freezebar-horizontal").is(":visible"); $("#luckysheet-freezebar-horizontal").hide(); if (sheetIndex == null) { sheetIndex = Store.currentSheetIndex; } let currentSheet = Store.luckysheetfile[getSheetIndex(sheetIndex)]; if (currentSheet.freezen != null) { currentSheet.freezen.horizontal = null; } if(currentSheet.frozen != null && ishorizontal){ server.saveParam("all", sheetIndex, currentSheet.frozen, { "k": "frozen" }); } }, createFreezenHorizontal: function (freezenhorizontaldata, top) { let _this = this; if (_this.initialHorizontal) { _this.initialHorizontal = false; $("#luckysheet-grid-window-1").append(_this.freezenHorizontalHTML); $("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-drop").hover(function () { $(this).parent().addClass("luckysheet-freezebar-hover"); }, function () { $(this).parent().removeClass("luckysheet-freezebar-hover"); }); $("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-drop").mousedown(function () { _this.horizontalmovestate = true; _this.horizontalmoveposition = $(this).position().top; _this.windowHeight = $("#luckysheet-grid-window-1").height(); $(this).parent().addClass("luckysheet-freezebar-active"); $("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-handle").css("cursor", "-webkit-grabbing"); }); let gridwidth = $("#luckysheet-grid-window-1").width(); $("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-handle").css({ "width": gridwidth - 10, "height": "4px", "cursor": "-webkit-grab", "left": "0px" }).end().find(".luckysheet-freezebar-horizontal-drop").css({ "width": gridwidth - 10, "height": "4px", "left": "0px", "cursor": "-webkit-grab" }); } if (freezenhorizontaldata == null) { 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); // $("#luckysheet-freezen-btn-horizontal").html(' '+locale().freezen.freezenCancel); const freezeHTML = `
${locale().freezen.freezenCancel}
` $("#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; _this.removeAssistCanvas(); if (_this.freezenverticaldata != null || _this.freezenhorizontaldata != null) { let freezen_horizon_px, freezen_horizon_ed, freezen_horizon_scrollTop; let freezen_vertical_px, freezen_vertical_ed, freezen_vertical_scrollTop; let drawWidth = Store.luckysheetTableContentHW[0], drawHeight = Store.luckysheetTableContentHW[1]; //双向freezen if (_this.freezenverticaldata != null && _this.freezenhorizontaldata != null) { freezen_horizon_px = _this.freezenhorizontaldata[0]; freezen_horizon_ed = _this.freezenhorizontaldata[1]; freezen_horizon_scrollTop = _this.freezenhorizontaldata[2]; freezen_vertical_px = _this.freezenverticaldata[0]; freezen_vertical_ed = _this.freezenverticaldata[1]; freezen_vertical_scrollTop = _this.freezenverticaldata[2]; //3 _this.createCanvas("freezen_3", freezen_vertical_px - freezen_vertical_scrollTop, freezen_horizon_px - freezen_horizon_scrollTop + 1, Store.rowHeaderWidth - 1, Store.columnHeaderHeight - 1); //4 _this.createCanvas("freezen_4", drawWidth - freezen_vertical_px + freezen_vertical_scrollTop, freezen_horizon_px - freezen_horizon_scrollTop + 1, freezen_vertical_px - freezen_vertical_scrollTop + Store.rowHeaderWidth - 1, Store.columnHeaderHeight - 1); //7 _this.createCanvas("freezen_7", freezen_vertical_px - freezen_vertical_scrollTop, drawHeight - freezen_horizon_px + freezen_horizon_scrollTop - Store.columnHeaderHeight, Store.rowHeaderWidth - 1, freezen_horizon_px - freezen_horizon_scrollTop + Store.columnHeaderHeight - 1); } //水平freezen else if (_this.freezenhorizontaldata != null) { freezen_horizon_px = _this.freezenhorizontaldata[0]; freezen_horizon_ed = _this.freezenhorizontaldata[1]; freezen_horizon_scrollTop = _this.freezenhorizontaldata[2]; _this.createCanvas("freezen_h", drawWidth, freezen_horizon_px - freezen_horizon_scrollTop + 1, Store.rowHeaderWidth - 1, Store.columnHeaderHeight - 1); } //垂直freezen else if (_this.freezenverticaldata != null) { freezen_vertical_px = _this.freezenverticaldata[0]; freezen_vertical_ed = _this.freezenverticaldata[1]; freezen_vertical_scrollTop = _this.freezenverticaldata[2]; _this.createCanvas("freezen_v", freezen_vertical_px - freezen_vertical_scrollTop, drawHeight, Store.rowHeaderWidth - 1, Store.columnHeaderHeight - 1); } _this.scrollAdapt(); } }, createCanvas: function(id, width, height, left, top){ let c = $("").appendTo("#luckysheet-grid-window-1").attr({ "id": id, "width": Math.ceil(width * Store.devicePixelRatio), "height": Math.ceil(height * Store.devicePixelRatio) }).css({ "user-select": "none", "postion": "absolute", "left": left, "top": top, "width": width, "height": height, "z-index": 10, "pointer-events": "none" }); }, removeAssistCanvas: function(){ $("#luckysheet-grid-window-1 > canvas").not($("#luckysheetTableContent")).remove(); $("#luckysheet-cell-selected").css("z-index", 15); }, scrollAdapt: function(){ let _this = this; //有冻结时 选区框 滚动适应 if(Store.luckysheet_select_save != null && Store.luckysheet_select_save.length > 0){ _this.scrollAdaptOfselect(); } //有冻结时 图表框 滚动适应 if($("#luckysheet-cell-main .luckysheet-data-visualization-chart").length > 0){ // 当前sheet有图表才需要滚动适应 const chart = Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)]["chart"]; if(chart != null && chart.length > 0){ _this.scrollAdaptOfchart(); } } //有冻结时 批注框 滚动适应 if($("#luckysheet-postil-showBoxs .luckysheet-postil-show").length > 0){ _this.scrollAdaptOfpostil(); } //有冻结时 下拉选区图标 滚动适应 if($("#luckysheet-dropCell-icon").length > 0){ _this.scrollAdaptOfdpicon(); } //有冻结时 筛选下拉按钮 滚动适应 if($("#luckysheet-filter-options-sheet"+ Store.currentSheetIndex +" .luckysheet-filter-options").length > 0){ _this.scrollAdaptOffilteroptions(); } }, scrollAdaptOfselect: function(){ let _this = this; if($("#luckysheet-row-count-show").is(":visible")){ $("#luckysheet-row-count-show").hide(); } if($("#luckysheet-column-count-show").is(":visible")){ $("#luckysheet-column-count-show").hide(); } $("#luckysheet-rows-h-selected").empty(); $("#luckysheet-cols-h-selected").empty(); let scrollTop = $("#luckysheet-cell-main").scrollTop(); let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); if (_this.freezenhorizontaldata != null && _this.freezenverticaldata != null) { let freezenTop = _this.freezenhorizontaldata[0]; let freezen_rowindex = _this.freezenhorizontaldata[1]; let offTop = scrollTop - _this.freezenhorizontaldata[2]; let freezenLeft = _this.freezenverticaldata[0]; let freezen_colindex = _this.freezenverticaldata[1]; let offLeft = scrollLeft - _this.freezenverticaldata[2]; for(let s = 0; s < Store.luckysheet_select_save.length; s++){ let obj = $.extend(true, {}, Store.luckysheet_select_save[s]); let r1 = obj.row[0], r2 = obj.row[1]; let row = Store.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : Store.visibledatarow[r1 - 1]; let top_move = row_pre; let height_move = row - row_pre - 1; let rangeshow = true; if(r1 >= freezen_rowindex){//原选区在冻结区外 if(top_move + height_move < freezenTop + offTop){ rangeshow = false; } else if(top_move < freezenTop + offTop){ $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({ "top": freezenTop + offTop, "height": height_move - (freezenTop + offTop - top_move) }); } else{ $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({ "top": top_move, "height": height_move }); } } else if(r2 >= freezen_rowindex){//原选区有一部分在冻结区内 if(top_move + height_move < freezenTop + offTop){ $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({ "top": top_move + offTop, "height": freezenTop - top_move }); } else{ $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({ "top": top_move + offTop, "height": height_move - offTop }); } } else{//原选区在冻结区内 $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css("top", top_move + offTop); } let c1 = obj.column[0], c2 = obj.column[1]; let col = Store.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : Store.visibledatacolumn[c1 - 1]; let left_move = col_pre; let width_move = col - col_pre - 1; if(c1 >= freezen_colindex){//原选区在冻结区外 if(left_move + width_move < freezenLeft + offLeft){ rangeshow = false; } else if(left_move < freezenLeft + offLeft){ $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({ "left": freezenLeft + offLeft, "width": width_move - (freezenLeft + offLeft - left_move) }); } else{ $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({ "left": left_move, "width": width_move }); } } else if(c2 >= freezen_colindex){//原选区有一部分在冻结区内 if(left_move + width_move < freezenLeft + offLeft){ $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({ "left": left_move + offLeft, "width": freezenLeft - left_move }); } else{ $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({ "left": left_move + offLeft, "width": width_move - offLeft }); } } else{//原选区在冻结区内 $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css("left", left_move + offLeft); } if(!rangeshow){ $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).hide(); } if(s == Store.luckysheet_select_save.length - 1){ let rf = obj.row_focus == null ? r1 : obj.row_focus; let cf = obj.column_focus == null ? c1 : obj.column_focus; let row_f = Store.visibledatarow[rf], row_pre_f = rf - 1 == -1 ? 0 : Store.visibledatarow[rf - 1]; let col_f = Store.visibledatacolumn[cf], col_pre_f = cf - 1 == -1 ? 0 : Store.visibledatacolumn[cf - 1]; let margeset = menuButton.mergeborer(Store.flowdata, rf, cf); if(!!margeset){ row_f = margeset.row[1]; row_pre_f = margeset.row[0]; col_f = margeset.column[1]; col_pre_f = margeset.column[0]; } let top = row_pre_f; let height = row_f - row_pre_f - 1; let left = col_pre_f; let width = col_f - col_pre_f - 1; let focuscell = true; if(top >= freezenTop){ if(top + height < freezenTop + offTop){ focuscell = false; } else if(top < freezenTop + offTop){ $("#luckysheet-cell-selected-focus").show().css({ "top": freezenTop + offTop, "height": height - (freezenTop + offTop - top) }) } else{ $("#luckysheet-cell-selected-focus").show().css({ "top": top, "height": height }); } } else if(top + height >= freezenTop){ if(top + height < freezenTop + offTop){ $("#luckysheet-cell-selected-focus").show().css({ "top": top + offTop, "height": freezenTop - top }) } else{ $("#luckysheet-cell-selected-focus").show().css({ "top": top + offTop, "height": height - offTop }) } } else{ $("#luckysheet-cell-selected-focus").show().css("top", top + offTop); } if(left >= freezenLeft){ if(left + width < freezenLeft + offLeft){ focuscell = false; } else if(left < freezenLeft + offLeft){ $("#luckysheet-cell-selected-focus").show().css({ "left": freezenLeft + offLeft, "width": width - (freezenLeft + offLeft - left) }) } else{ $("#luckysheet-cell-selected-focus").show().css({ "left": left, "width": width }); } } else if(left + width >= freezenLeft){ if(left + width < freezenLeft + offLeft){ $("#luckysheet-cell-selected-focus").show().css({ "left": left + offLeft, "width": freezenLeft - left }) } else{ $("#luckysheet-cell-selected-focus").show().css({ "left": left + offLeft, "width": width - offLeft }) } } else{ $("#luckysheet-cell-selected-focus").show().css("left", left + offLeft); } if(!focuscell){ $("#luckysheet-cell-selected-focus").hide(); } } } } else if (_this.freezenhorizontaldata != null) { let freezenTop = _this.freezenhorizontaldata[0]; let freezen_rowindex = _this.freezenhorizontaldata[1]; let offTop = scrollTop - _this.freezenhorizontaldata[2]; for(let s = 0; s < Store.luckysheet_select_save.length; s++){ let obj = $.extend(true, {}, Store.luckysheet_select_save[s]); let r1 = obj.row[0], r2 = obj.row[1]; let row = Store.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : Store.visibledatarow[r1 - 1]; let top_move = row_pre; let height_move = row - row_pre - 1; if(r1 >= freezen_rowindex){//原选区在冻结区外 if(top_move + height_move < freezenTop + offTop){ $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).hide(); } else if(top_move < freezenTop + offTop){ $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({ "top": freezenTop + offTop, "height": height_move - (freezenTop + offTop - top_move) }); } else{ $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({ "top": top_move, "height": height_move }); } } else if(r2 >= freezen_rowindex){//原选区有一部分在冻结区内 if(top_move + height_move < freezenTop + offTop){ $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({ "top": top_move + offTop, "height": freezenTop - top_move }); } else{ $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({ "top": top_move + offTop, "height": height_move - offTop }); } } else{//原选区在冻结区内 $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css("top", top_move + offTop); } if(s == Store.luckysheet_select_save.length - 1){ let rf = obj.row_focus == null ? r1 : obj.row_focus; let cf = obj.column_focus == null ? obj.column[0] : obj.column_focus; let row_f = Store.visibledatarow[rf], row_pre_f = rf - 1 == -1 ? 0 : Store.visibledatarow[rf - 1]; let margeset = menuButton.mergeborer(Store.flowdata, rf, cf); if(!!margeset){ row_f = margeset.row[1]; row_pre_f = margeset.row[0]; } let top = row_pre_f; let height = row_f - row_pre_f - 1; if(top >= freezenTop){ if(top + height < freezenTop + offTop){ $("#luckysheet-cell-selected-focus").hide(); } else if(top < freezenTop + offTop){ $("#luckysheet-cell-selected-focus").show().css({ "top": freezenTop + offTop, "height": height - (freezenTop + offTop - top) }) } else{ $("#luckysheet-cell-selected-focus").show().css({ "top": top, "height": height }); } } else if(top + height >= freezenTop){ if(top + height < freezenTop + offTop){ $("#luckysheet-cell-selected-focus").show().css({ "top": top + offTop, "height": freezenTop - top }) } else{ $("#luckysheet-cell-selected-focus").show().css({ "top": top + offTop, "height": height - offTop }) } } else{ $("#luckysheet-cell-selected-focus").show().css("top", top + offTop); } } } } else if (_this.freezenverticaldata != null) { let freezenLeft = _this.freezenverticaldata[0]; let freezen_colindex = _this.freezenverticaldata[1]; let offLeft = scrollLeft - _this.freezenverticaldata[2]; for(let s = 0; s < Store.luckysheet_select_save.length; s++){ let obj = $.extend(true, {}, Store.luckysheet_select_save[s]); let c1 = obj.column[0], c2 = obj.column[1]; let col = Store.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : Store.visibledatacolumn[c1 - 1]; let left_move = col_pre; let width_move = col - col_pre - 1; if(c1 >= freezen_colindex){//原选区在冻结区外 if(left_move + width_move < freezenLeft + offLeft){ $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).hide(); } else if(left_move < freezenLeft + offLeft){ $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({ "left": freezenLeft + offLeft, "width": width_move - (freezenLeft + offLeft - left_move) }); } else{ $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({ "left": left_move, "width": width_move }); } } else if(c2 >= freezen_colindex){//原选区有一部分在冻结区内 if(left_move + width_move < freezenLeft + offLeft){ $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({ "left": left_move + offLeft, "width": freezenLeft - left_move }); } else{ $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({ "left": left_move + offLeft, "width": width_move - offLeft }); } } else{//原选区在冻结区内 $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css("left", left_move + offLeft); } if(s == Store.luckysheet_select_save.length - 1){ let rf = obj.row_focus == null ? obj.row[0] : obj.row_focus; let cf = obj.column_focus == null ? c1 : obj.column_focus; let col_f = Store.visibledatacolumn[cf], col_pre_f = cf - 1 == -1 ? 0 : Store.visibledatacolumn[cf - 1]; let margeset = menuButton.mergeborer(Store.flowdata, rf, cf); if(!!margeset){ col_f = margeset.column[1]; col_pre_f = margeset.column[0]; } let left = col_pre_f; let width = col_f - col_pre_f - 1; if(left >= freezenLeft){ if(left + width < freezenLeft + offLeft){ $("#luckysheet-cell-selected-focus").hide(); } else if(left < freezenLeft + offLeft){ $("#luckysheet-cell-selected-focus").show().css({ "left": freezenLeft + offLeft, "width": width - (freezenLeft + offLeft - left) }) } else{ $("#luckysheet-cell-selected-focus").show().css({ "left": left, "width": width }); } } else if(left + width >= freezenLeft){ if(left + width < freezenLeft + offLeft){ $("#luckysheet-cell-selected-focus").show().css({ "left": left + offLeft, "width": freezenLeft - left }) } else{ $("#luckysheet-cell-selected-focus").show().css({ "left": left + offLeft, "width": width - offLeft }) } } else{ $("#luckysheet-cell-selected-focus").show().css("left", left + offLeft); } } } } else{ selectHightlightShow(); } }, scrollAdaptOfchart: function(){ let _this = this; let scrollTop = $("#luckysheet-cell-main").scrollTop(); let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); if(_this.freezenhorizontaldata != null && _this.freezenverticaldata != null){ let freezenTop = _this.freezenhorizontaldata[0] - _this.freezenhorizontaldata[2]; let freezenLeft = _this.freezenverticaldata[0] - _this.freezenverticaldata[2]; $("#luckysheet-cell-main .luckysheet-data-visualization-chart").each(function(i, e){ let x = $(e).position(); let width = $(e).width(); let height = $(e).height(); let $canvas_width = $(e).find("canvas").width(); let $canvas_height = $(e).find("canvas").height(); let height_diff = $canvas_height - height; let width_diff = $canvas_width - width; if((x.top - height_diff) < freezenTop){ let size = freezenTop - (x.top - height_diff); if(size > ($canvas_height + 40 + 2)){ $(e).css("visibility", "hidden"); } else{ $(e).css({ "top": freezenTop + scrollTop, "height": $canvas_height - size, "visibility": "visible" }); $(e).find("canvas").css("top", - size); } } else{ $(e).css({ "top": x.top - height_diff + scrollTop, "height": $canvas_height, "visibility": "visible" }); $(e).find("canvas").css("top", 0); } if((x.left - width_diff) < freezenLeft){ let size = freezenLeft - (x.left - width_diff); if(size > ($canvas_width + 20 + 2)){ $(e).css("visibility", "hidden"); } else{ $(e).css({ "left": freezenLeft + scrollLeft, "width": $canvas_width - size, "visibility": "visible" }); $(e).find("canvas").css("left", - size); } } else{ $(e).css({ "left": x.left - width_diff + scrollLeft, "width": $canvas_width, "visibility": "visible" }); $(e).find("canvas").css("left", 0); } }) } else if(_this.freezenhorizontaldata != null){ let freezenTop = _this.freezenhorizontaldata[0] - _this.freezenhorizontaldata[2]; $("#luckysheet-cell-main .luckysheet-data-visualization-chart").each(function(i, e){ let x = $(e).position(); let height = $(e).height(); let $canvas_height = $(e).find("canvas").height(); let height_diff = $canvas_height - height; if((x.top - height_diff) < freezenTop){ let size = freezenTop - (x.top - height_diff); if(size > ($canvas_height + 40 + 2)){ $(e).css("visibility", "hidden"); } else{ $(e).css({ "top": freezenTop + scrollTop, "height": $canvas_height - size, "visibility": "visible" }); $(e).find("canvas").css("top", - size); } } else{ $(e).css({ "top": x.top - height_diff + scrollTop, "height": $canvas_height, "visibility": "visible" }); $(e).find("canvas").css("top", 0); } }) } else if(_this.freezenverticaldata != null){ let freezenLeft = _this.freezenverticaldata[0] - _this.freezenverticaldata[2]; $("#luckysheet-cell-main .luckysheet-data-visualization-chart").each(function(i, e){ let x = $(e).position(); let width = $(e).width(); let $canvas_width = $(e).find("canvas").width(); let width_diff = $canvas_width - width; if((x.left - width_diff) < freezenLeft){ let size = freezenLeft - (x.left - width_diff); if(size > ($canvas_width + 20 + 2)){ $(e).css("visibility", "hidden"); } else{ $(e).css({ "left": freezenLeft + scrollLeft, "width": $canvas_width - size, "visibility": "visible" }); $(e).find("canvas").css("left", - size); } } else{ $(e).css({ "left": x.left - width_diff + scrollLeft, "width": $canvas_width, "visibility": "visible" }); $(e).find("canvas").css("left", 0); } }) } else{ $("#luckysheet-cell-main .luckysheet-data-visualization-chart").each(function(i, e){ let x = $(e).position(); let width = $(e).width(); let height = $(e).height(); let $canvas_width = $(e).find("canvas").width(); let $canvas_height = $(e).find("canvas").height(); let height_diff = $canvas_height - height; let width_diff = $canvas_width - width; $(e).css({ "top": x.top - height_diff + scrollTop, "height": $canvas_height, "left": x.left - width_diff + scrollLeft, "width": $canvas_width, "visibility": "visible" }); $(e).find("canvas").css({ "top": 0, "left": 0 }); }) } }, scrollAdaptOfpostil: function(){ let _this = this; let scrollTop = $("#luckysheet-cell-main").scrollTop(); let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); if(_this.freezenhorizontaldata != null && _this.freezenverticaldata != null){ let freezenTop = _this.freezenhorizontaldata[0]; let freezenLeft = _this.freezenverticaldata[0]; let offTop = scrollTop - _this.freezenhorizontaldata[2]; let offLeft = scrollLeft - _this.freezenverticaldata[2]; $("#luckysheet-postil-showBoxs .luckysheet-postil-show").each(function(i, e){ let id = $(e).attr("id"); let r = id.split("luckysheet-postil-show_")[1].split("_")[0]; let c = id.split("luckysheet-postil-show_")[1].split("_")[1]; let postil = Store.flowdata[r][c].ps; let row = Store.visibledatarow[r], row_pre = r - 1 == -1 ? 0 : Store.visibledatarow[r - 1]; let col = Store.visibledatacolumn[c], col_pre = c - 1 == -1 ? 0 : Store.visibledatacolumn[c - 1]; let margeset = menuButton.mergeborer(Store.flowdata, r, c); if(!!margeset){ row = margeset.row[1]; row_pre = margeset.row[0]; col = margeset.column[1]; col_pre = margeset.column[0]; } let toX = col; let toY = row_pre; let postil_left = postil["left"] == null ? toX + 18 : postil["left"]; let postil_top = postil["top"] == null ? toY - 18 : postil["top"]; let postil_width = postil["width"] == null ? luckysheetPostil.defaultWidth : postil["width"]; let postil_height = postil["height"] == null ? luckysheetPostil.defaultHeight : postil["height"]; if(postil_top < 0){ postil_top = 2; } let size = luckysheetPostil.getArrowCanvasSize(postil_left, postil_top, toX, toY); let show = true; let show2 = true; if(r >= _this.freezenhorizontaldata[1]){ if(postil_top + postil_height < freezenTop){ $(e).show().find(".luckysheet-postil-show-main").css("top", postil_top + offTop); $(e).show().find(".arrowCanvas").css("top", size[1] + offTop); } else{ if(postil_top < freezenTop + offTop){ if(postil_top + postil_height <= freezenTop + offTop){ show = false; } else{ $(e).show().find(".luckysheet-postil-show-main").css({ "top": freezenTop + offTop, "height": postil_height - (freezenTop + offTop - postil_top) }); $(e).show().find(".formulaInputFocus").css("margin-top", -(freezenTop + offTop - postil_top)); $(e).show().find(".arrowCanvas").hide(); show2 = false; } } else{ $(e).show().find(".luckysheet-postil-show-main").css({ "top": postil_top, "height": postil_height }); $(e).show().find(".formulaInputFocus").css("margin-top", 0); $(e).show().find(".arrowCanvas").css("top", size[1]); // luckysheetPostil.buildPs(r, c, postil); } } } else{ $(e).show().find(".luckysheet-postil-show-main").css("top", postil_top + offTop); $(e).show().find(".arrowCanvas").css("top", size[1] + offTop); } if(c >= _this.freezenverticaldata[1]){ if(postil_left + postil_width < freezenLeft){ $(e).show().find(".luckysheet-postil-show-main").css("left", postil_left + offLeft); $(e).show().find(".arrowCanvas").css("left", size[0] + offLeft); } else{ if(postil_left < freezenLeft + offLeft){ if(postil_left + postil_width <= freezenLeft + offLeft){ show = false; } else{ $(e).show().find(".luckysheet-postil-show-main").css({ "left": freezenLeft + offLeft, "width": postil_width - (freezenLeft + offLeft - postil_left) }); $(e).show().find(".formulaInputFocus").css("margin-left", -(freezenLeft + offLeft - postil_left)); $(e).show().find(".arrowCanvas").hide(); show2 = false; } } else{ $(e).show().find(".luckysheet-postil-show-main").css({ "left": postil_left, "width": postil_width }); $(e).show().find(".formulaInputFocus").css("margin-left", 0); $(e).show().find(".arrowCanvas").css("left", size[0]); // luckysheetPostil.buildPs(r, c, postil); } } } else{ $(e).show().find(".luckysheet-postil-show-main").css("left", postil_left + offLeft); $(e).show().find(".arrowCanvas").css("left", size[0] + offLeft); } if(!show){ $(e).hide(); } if(show && show2){ $(e).show().find(".arrowCanvas").show(); } }) } else if(_this.freezenhorizontaldata != null){ let freezenTop = _this.freezenhorizontaldata[0]; let offTop = scrollTop - _this.freezenhorizontaldata[2]; $("#luckysheet-postil-showBoxs .luckysheet-postil-show").each(function(i, e){ let id = $(e).attr("id"); let r = id.split("luckysheet-postil-show_")[1].split("_")[0]; let c = id.split("luckysheet-postil-show_")[1].split("_")[1]; let postil = Store.flowdata[r][c].ps; let row = Store.visibledatarow[r], row_pre = r - 1 == -1 ? 0 : Store.visibledatarow[r - 1]; let col = Store.visibledatacolumn[c], col_pre = c - 1 == -1 ? 0 : Store.visibledatacolumn[c - 1]; let margeset = menuButton.mergeborer(Store.flowdata, r, c); if(!!margeset){ row = margeset.row[1]; row_pre = margeset.row[0]; col = margeset.column[1]; col_pre = margeset.column[0]; } let toX = col; let toY = row_pre; let postil_left = postil["left"] == null ? toX + 18 : postil["left"]; let postil_top = postil["top"] == null ? toY - 18 : postil["top"]; let postil_width = postil["width"] == null ? luckysheetPostil.defaultWidth : postil["width"]; let postil_height = postil["height"] == null ? luckysheetPostil.defaultHeight : postil["height"]; if(postil_top < 0){ postil_top = 2; } let size = luckysheetPostil.getArrowCanvasSize(postil_left, postil_top, toX, toY); if(r >= _this.freezenhorizontaldata[1]){ if(postil_top + postil_height < freezenTop){ $(e).show().find(".luckysheet-postil-show-main").css("top", postil_top + offTop); $(e).show().find(".arrowCanvas").css("top", size[1] + offTop); } else{ if(postil_top < freezenTop + offTop){ if(postil_top + postil_height <= freezenTop + offTop){ $(e).hide(); } else{ $(e).show().find(".luckysheet-postil-show-main").css({ "top": freezenTop + offTop, "height": postil_height - (freezenTop + offTop - postil_top) }); $(e).show().find(".formulaInputFocus").css("margin-top", -(freezenTop + offTop - postil_top)); $(e).show().find(".arrowCanvas").hide(); } } else{ luckysheetPostil.buildPs(r, c, postil); } } } else{ $(e).show().find(".luckysheet-postil-show-main").css("top", postil_top + offTop); $(e).show().find(".arrowCanvas").css("top", size[1] + offTop); } }) } else if(_this.freezenverticaldata != null){ let freezenLeft = _this.freezenverticaldata[0]; let offLeft = scrollLeft - _this.freezenverticaldata[2]; $("#luckysheet-postil-showBoxs .luckysheet-postil-show").each(function(i, e){ let id = $(e).attr("id"); let r = id.split("luckysheet-postil-show_")[1].split("_")[0]; let c = id.split("luckysheet-postil-show_")[1].split("_")[1]; let postil = Store.flowdata[r][c].ps; let row = Store.visibledatarow[r], row_pre = r - 1 == -1 ? 0 : Store.visibledatarow[r - 1]; let col = Store.visibledatacolumn[c], col_pre = c - 1 == -1 ? 0 : Store.visibledatacolumn[c - 1]; let margeset = menuButton.mergeborer(Store.flowdata, r, c); if(!!margeset){ row = margeset.row[1]; row_pre = margeset.row[0]; col = margeset.column[1]; col_pre = margeset.column[0]; } let toX = col; let toY = row_pre; let postil_left = postil["left"] == null ? toX + 18 : postil["left"]; let postil_top = postil["top"] == null ? toY - 18 : postil["top"]; let postil_width = postil["width"] == null ? luckysheetPostil.defaultWidth : postil["width"]; let postil_height = postil["height"] == null ? luckysheetPostil.defaultHeight : postil["height"]; if(postil_top < 0){ postil_top = 2; } let size = luckysheetPostil.getArrowCanvasSize(postil_left, postil_top, toX, toY); if(c >= _this.freezenverticaldata[1]){ if(postil_left + postil_width < freezenLeft){ $(e).show().find(".luckysheet-postil-show-main").css("left", postil_left + offLeft); $(e).show().find(".arrowCanvas").css("left", size[0] + offLeft); } else{ if(postil_left < freezenLeft + offLeft){ if(postil_left + postil_width <= freezenLeft + offLeft){ $(e).hide(); } else{ $(e).show().find(".luckysheet-postil-show-main").css({ "left": freezenLeft + offLeft, "width": postil_width - (freezenLeft + offLeft - postil_left) }); $(e).show().find(".formulaInputFocus").css("margin-left", -(freezenLeft + offLeft - postil_left)); $(e).show().find(".arrowCanvas").hide(); } } else{ luckysheetPostil.buildPs(r, c, postil); } } } else{ $(e).show().find(".luckysheet-postil-show-main").css("left", postil_left + offLeft); $(e).show().find(".arrowCanvas").css("left", size[0] + offLeft); } }) } else{ $("#luckysheet-postil-showBoxs .luckysheet-postil-show").each(function(i, e){ let id = $(e).attr("id"); let r = id.split("luckysheet-postil-show_")[1].split("_")[0]; let c = id.split("luckysheet-postil-show_")[1].split("_")[1]; let postil = Store.flowdata[r][c].ps; luckysheetPostil.buildPs(r, c, postil); }) } }, scrollAdaptOfdpicon: function(){ let _this = this; let copy_r = luckysheetDropCell.copyRange["row"][1], copy_c = luckysheetDropCell.copyRange["column"][1]; let apply_r = luckysheetDropCell.applyRange["row"][1], apply_c = luckysheetDropCell.applyRange["column"][1]; let row_index, col_index; if(apply_r >= copy_r && apply_c >= copy_c){ row_index = apply_r; col_index = apply_c; } else{ row_index = copy_r; col_index = copy_c; } if(_this.freezenhorizontaldata != null && _this.freezenverticaldata != null){ let freezen_rowindex = _this.freezenhorizontaldata[1]; let offsetRow = luckysheet_searcharray(_this.freezenhorizontaldata[3], $("#luckysheet-cell-main").scrollTop() - _this.freezenhorizontaldata[2]); let freezen_colindex = _this.freezenverticaldata[1]; let offsetColumn = luckysheet_searcharray(_this.freezenverticaldata[3], $("#luckysheet-cell-main").scrollLeft() - _this.freezenverticaldata[2]); if(row_index >= freezen_rowindex && col_index >= freezen_colindex){ if(row_index < (freezen_rowindex + offsetRow - 1) || col_index < (freezen_colindex + offsetColumn - 1)){ $("#luckysheet-dropCell-icon").hide(); } else{ $("#luckysheet-dropCell-icon").show(); } } else if(row_index >= freezen_rowindex){ if(row_index < (freezen_rowindex + offsetRow - 1)){ $("#luckysheet-dropCell-icon").hide(); } else{ let col = colLocationByIndex(col_index + offsetColumn)[1]; $("#luckysheet-dropCell-icon").show().css("left", col); } } else if(col_index >= freezen_colindex){ if(col_index < (freezen_colindex + offsetColumn - 1)){ $("#luckysheet-dropCell-icon").hide(); } else{ let row = rowLocationByIndex(row_index + offsetRow)[1]; $("#luckysheet-dropCell-icon").show().css("top", row); } } else{ let row = rowLocationByIndex(row_index + offsetRow)[1], col = colLocationByIndex(col_index + offsetColumn)[1]; $("#luckysheet-dropCell-icon").show().css({ "left": col, "top": row }); } } else if(_this.freezenhorizontaldata != null){ let freezen_rowindex = _this.freezenhorizontaldata[1]; let offsetRow = luckysheet_searcharray(_this.freezenhorizontaldata[3], $("#luckysheet-cell-main").scrollTop() - _this.freezenhorizontaldata[2]); if(row_index >= freezen_rowindex){ if(row_index < (freezen_rowindex + offsetRow - 1)){ $("#luckysheet-dropCell-icon").hide(); } else{ $("#luckysheet-dropCell-icon").show(); } } else{ let row = rowLocationByIndex(row_index + offsetRow)[1]; $("#luckysheet-dropCell-icon").show().css("top", row); } } else if(_this.freezenverticaldata != null){ let freezen_colindex = _this.freezenverticaldata[1]; let offsetColumn = luckysheet_searcharray(_this.freezenverticaldata[3], $("#luckysheet-cell-main").scrollLeft() - _this.freezenverticaldata[2]); if(col_index >= freezen_colindex){ if(col_index < (freezen_colindex + offsetColumn - 1)){ $("#luckysheet-dropCell-icon").hide(); } else{ $("#luckysheet-dropCell-icon").show(); } } else{ let col = colLocationByIndex(col_index + offsetColumn)[1]; $("#luckysheet-dropCell-icon").show().css("left", col); } } else{ let row = rowLocationByIndex(row_index)[1], col = colLocationByIndex(col_index)[1]; $("#luckysheet-dropCell-icon").show().css({ "left": col, "top": row }); } }, scrollAdaptOffilteroptions: function(){ let _this = this; if(_this.freezenhorizontaldata != null && _this.freezenverticaldata != null){ let freezen_rowindex = _this.freezenhorizontaldata[1]; let freezen_top = _this.freezenhorizontaldata[0] + $("#luckysheet-cell-main").scrollTop(); let freezen_colindex = _this.freezenverticaldata[1]; let offsetColumn = luckysheet_searcharray(_this.freezenverticaldata[3], $("#luckysheet-cell-main").scrollLeft() - _this.freezenverticaldata[2]); $("#luckysheet-filter-options-sheet"+ Store.currentSheetIndex +" .luckysheet-filter-options").each(function(i, e){ let row_index = $(e).data("str"); let top = row_index - 1 == -1 ? 0 : Store.visibledatarow[row_index - 1]; let col_index = $(e).data("cindex"); if(row_index >= freezen_rowindex && col_index >= freezen_colindex){ if(top < freezen_top || col_index < (freezen_colindex + offsetColumn)){ $(e).hide(); } else{ $(e).show(); } } else if(row_index >= freezen_rowindex){ if(top < freezen_top){ $(e).hide(); } else{ let left = Store.visibledatacolumn[col_index + offsetColumn] - 20; $(e).show().css("left", left); } } else if(col_index >= freezen_colindex){ if(col_index < (freezen_colindex + offsetColumn)){ $(e).hide(); } else{ $(e).show().css("top", top + $("#luckysheet-cell-main").scrollTop()); } } else{ let left = Store.visibledatacolumn[col_index + offsetColumn] - 20; $(e).show().css({ "left": left, "top": top + $("#luckysheet-cell-main").scrollTop() }); } }); } else if(_this.freezenhorizontaldata != null){ let freezen_rowindex = _this.freezenhorizontaldata[1]; let freezen_top = _this.freezenhorizontaldata[0] + $("#luckysheet-cell-main").scrollTop(); $("#luckysheet-filter-options-sheet"+ Store.currentSheetIndex +" .luckysheet-filter-options").each(function(i, e){ let row_index = $(e).data("str"); let top = row_index - 1 == -1 ? 0 : Store.visibledatarow[row_index - 1]; if(row_index >= freezen_rowindex){ if(top < freezen_top){ $(e).hide(); } else{ $(e).show(); } } else{ $(e).show().css("top", top + $("#luckysheet-cell-main").scrollTop()); } }); } else if(_this.freezenverticaldata != null){ let freezen_colindex = _this.freezenverticaldata[1]; let offsetColumn = luckysheet_searcharray(_this.freezenverticaldata[3], $("#luckysheet-cell-main").scrollLeft() - _this.freezenverticaldata[2]); $("#luckysheet-filter-options-sheet"+ Store.currentSheetIndex +" .luckysheet-filter-options").each(function(i, e){ let col_index = $(e).data("cindex"); if(col_index >= freezen_colindex){ if(col_index < (freezen_colindex + offsetColumn)){ $(e).hide(); } else{ $(e).show(); } } else{ let left = Store.visibledatacolumn[col_index + offsetColumn] - 20; $(e).show().css("left", left); } }); } else{ $("#luckysheet-filter-options-sheet"+ Store.currentSheetIndex).empty(); createFilterOptions(Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].filter_select); } }, /** * * @param {string} operate "freezenRow"/ "freezenColumn"...... * @param {Number | String} order 工作表索引;默认值为当前工作表索引 * @param {Object} focus 冻结选区时的focus单元格行列值构成的对象;格式为{ row_focus:0, column_focus:0 } */ saveFrozen: function(operate, order, focus = {}) { if (order == null) { order = getSheetIndex(Store.currentSheetIndex) } // New configuration attribute of sheet: frozen, which stores more semantic configuration for initialization and transmission to the backend. freezenhorizontaldata is still used as local data const select_save = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]; const row_focus = select_save["row_focus"] == null ? select_save["row"][0] : select_save["row_focus"]; const column_focus = select_save["column_focus"] == null ? select_save["column"][0] : select_save["column_focus"]; const range = { row_focus: focus.row_focus || row_focus, column_focus: focus.column_focus || column_focus } const frozen = { "freezenRow": { type: 'row' }, "freezenColumn": { type: 'column' }, "freezenRC": { type: 'both' }, "freezenRowRange": { type: 'rangeRow', range: range }, "freezenColumnRange": { type: 'rangeColumn', range: range }, "freezenRCRange": { type: 'rangeBoth', range: range }, "freezenCancel": { type: 'cancel' } } // store frozen Store.luckysheetfile[order]["frozen"] = frozen[operate]; }, frozenTofreezen: function() { // get frozen type let file = Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)]; const frozen = file["frozen"]; if(frozen == null){ return; } let freezen = null; // transform to freezen if(frozen.type === 'row'){ let scrollTop = 0; 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]; freezen = { horizontal:{ freezenhorizontaldata: freezenhorizontaldata, top: top } } } else if(frozen.type === 'column'){ let scrollLeft = 0; let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); if(col_st == -1){ col_st = 0; } let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; freezen = { vertical:{ freezenverticaldata: freezenverticaldata, left: left } } } else if(frozen.type === 'both'){ let scrollTop = 0; 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]; let scrollLeft = 0; let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); if(col_st == -1){ col_st = 0; } let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; freezen = { horizontal:{ freezenhorizontaldata: freezenhorizontaldata, top: top }, vertical:{ freezenverticaldata: freezenverticaldata, left: left } } } else if(frozen.type === 'rangeRow'){ let scrollTop = 0; let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); let row_focus = frozen.range["row_focus"]; if(row_focus > row_st){ row_st = row_focus; } 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]; freezen = { horizontal:{ freezenhorizontaldata: freezenhorizontaldata, top: top } } } else if(frozen.type === 'rangeColumn'){ let scrollLeft = 0; let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); let column_focus = frozen.range["column_focus"]; if(column_focus > col_st){ col_st = column_focus; } if(col_st == -1){ col_st = 0; } let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; freezen = { vertical:{ freezenverticaldata: freezenverticaldata, left: left } } } else if(frozen.type === 'rangeBoth'){ let scrollTop = 0; let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); let row_focus = frozen.range["row_focus"]; if(row_focus > row_st){ row_st = row_focus; } 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 scrollLeft = 0; let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); let column_focus = frozen.range["column_focus"]; if(column_focus > col_st){ col_st = column_focus; } if(col_st == -1){ col_st = 0; } let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; freezen = { horizontal:{ freezenhorizontaldata: freezenhorizontaldata, top: top }, vertical:{ freezenverticaldata: freezenverticaldata, left: left } } } else if(frozen.type === 'cancel'){ freezen = { horizontal: null, vertical: null } } file["freezen"] = freezen; } } export default luckysheetFreezen;