From 91daa07ec94255f9135d423aa17d9425c0ffe58d Mon Sep 17 00:00:00 2001 From: liuyang Date: Fri, 7 Aug 2020 23:10:41 +0800 Subject: [PATCH] fix(frozen bug): fix --- src/controllers/freezen.js | 37 +++++++++++++++++++++++++++----- src/global/draw.js | 43 ++++++++++++++++++++------------------ src/global/refresh.js | 8 +++++-- 3 files changed, 61 insertions(+), 27 deletions(-) diff --git a/src/controllers/freezen.js b/src/controllers/freezen.js index 500b976..ab71c89 100644 --- a/src/controllers/freezen.js +++ b/src/controllers/freezen.js @@ -217,24 +217,51 @@ const luckysheetFreezen = { } if (_this.freezenverticaldata != null) { - let freezen_colindex = _this.freezenverticaldata[1]; + 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; + } - if (column <= freezen_colindex) { - setTimeout(function () { $("#luckysheet-scrollbar-x").scrollLeft(0); }, 10); + let column_px = Store.visibledatacolumn[column], freezen_px = Store.visibledatacolumn[freezen_colindex]; + + if (column_px <= freezen_px+top) { + console.log(1111); + 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 <= freezen_rowindex) { - setTimeout(function () { $("#luckysheet-scrollbar-y").scrollTop(0); }, 10); + 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); } } }, diff --git a/src/global/draw.js b/src/global/draw.js index 0829e2b..44f67fa 100644 --- a/src/global/draw.js +++ b/src/global/draw.js @@ -51,10 +51,11 @@ function luckysheetDrawgridRowTitle(scrollHeight, drawHeight, offsetTop) { if (dataset_row_ed == -1) { dataset_row_ed = Store.visibledatarow.length - 1; } + luckysheetTableContent.save(); luckysheetTableContent.beginPath(); - luckysheetTableContent.rect(0, offsetTop* Store.devicePixelRatio, Store.rowHeaderWidth * Store.devicePixelRatio-1, drawHeight-2); + luckysheetTableContent.rect(0, offsetTop* Store.devicePixelRatio, Store.rowHeaderWidth * Store.devicePixelRatio-1, drawHeight* Store.devicePixelRatio-2); luckysheetTableContent.clip(); let end_r, start_r; @@ -69,9 +70,9 @@ function luckysheetDrawgridRowTitle(scrollHeight, drawHeight, offsetTop) { end_r = Store.visibledatarow[r] - scrollHeight; //若超出绘制区域终止 - if(end_r > scrollHeight + drawHeight){ - break; - } + // if(end_r > scrollHeight + drawHeight){ + // break; + // } if (Store.config["rowhidden"] != null && Store.config["rowhidden"][r] != null) { @@ -99,19 +100,19 @@ function luckysheetDrawgridRowTitle(scrollHeight, drawHeight, offsetTop) { //vertical luckysheetTableContent.beginPath(); - luckysheetTableContent.moveTo( - (Store.rowHeaderWidth - 2 + 0.5) * Store.devicePixelRatio, - Store.devicePixelRatio * (start_r + offsetTop - 2) - ); - luckysheetTableContent.lineTo( - (Store.rowHeaderWidth - 2 + 0.5) * Store.devicePixelRatio, - Store.devicePixelRatio * (end_r + offsetTop - 2) - ); - luckysheetTableContent.lineWidth = Store.devicePixelRatio; + luckysheetTableContent.moveTo( + (Store.rowHeaderWidth - 2 + 0.5) * Store.devicePixelRatio, + Store.devicePixelRatio * (start_r + offsetTop - 2) + ); + luckysheetTableContent.lineTo( + (Store.rowHeaderWidth - 2 + 0.5) * Store.devicePixelRatio, + Store.devicePixelRatio * (end_r + offsetTop - 2) + ); + luckysheetTableContent.lineWidth = Store.devicePixelRatio; - luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle; - luckysheetTableContent.stroke(); - luckysheetTableContent.closePath(); + luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle; + luckysheetTableContent.stroke(); + luckysheetTableContent.closePath(); //行标题栏横线,horizen luckysheetTableContent.beginPath(); @@ -190,9 +191,11 @@ function luckysheetDrawgridColumnTitle(scrollWidth, drawWidth, offsetLeft) { luckysheetTableContent.save(); luckysheetTableContent.beginPath(); - luckysheetTableContent.rect(offsetLeft* Store.devicePixelRatio, 0, drawWidth, Store.columeHeaderHeight * Store.devicePixelRatio-1); + luckysheetTableContent.rect(offsetLeft* Store.devicePixelRatio, 0, drawWidth* Store.devicePixelRatio, Store.columeHeaderHeight * Store.devicePixelRatio-1); luckysheetTableContent.clip(); + // console.log(offsetLeft* Store.devicePixelRatio, 0, drawWidth* Store.devicePixelRatio, Store.columeHeaderHeight * Store.devicePixelRatio-1); + let end_c, start_c; for (let c = dataset_col_st; c <= dataset_col_ed; c++) { @@ -205,9 +208,9 @@ function luckysheetDrawgridColumnTitle(scrollWidth, drawWidth, offsetLeft) { end_c = Store.visibledatacolumn[c] - scrollWidth; //若超出绘制区域终止 - if(end_c > scrollWidth + drawWidth){ - break; - } + // if(end_c > scrollWidth + drawWidth+1){ + // break; + // } luckysheetTableContent.fillStyle = "#ffffff"; luckysheetTableContent.fillRect( diff --git a/src/global/refresh.js b/src/global/refresh.js index c76cd3f..986aa9b 100644 --- a/src/global/refresh.js +++ b/src/global/refresh.js @@ -964,13 +964,17 @@ function luckysheetrefreshgrid(scrollWidth, scrollHeight) { if($("#luckysheetTableContent").length == 0){ return; } - + let luckysheetTableContent = $("#luckysheetTableContent").get(0).getContext("2d"); luckysheetDrawMain(scrollWidth, scrollHeight); - $("#luckysheetTableContent").get(0).getContext("2d").clearRect(0, 0, 46, 20); + luckysheetTableContent.clearRect(0, 0, 46, 20); luckysheetDrawgridColumnTitle(scrollWidth); luckysheetDrawgridRowTitle(scrollHeight); + + //清除canvas左上角区域 防止列标题栏序列号溢出显示 + + luckysheetTableContent.clearRect(0, 0, Store.rowHeaderWidth * Store.devicePixelRatio, Store.columeHeaderHeight * Store.devicePixelRatio); } }