From 1ad40cf5521b7b3bd804c2c1f5f13fe6860ab95e Mon Sep 17 00:00:00 2001 From: liuyang Date: Sat, 1 Aug 2020 00:15:00 +0800 Subject: [PATCH] fix(hot key and mousemove): hot key fix --- src/controllers/handler.js | 38 ++++++++++++++++++++++--- src/controllers/pivotTable.js | 1 + src/controllers/sheetMove.js | 52 ++++++++++++++++++---------------- src/controllers/sheetmanage.js | 12 ++++++-- 4 files changed, 72 insertions(+), 31 deletions(-) diff --git a/src/controllers/handler.js b/src/controllers/handler.js index a0d131b68..5091afbc6 100644 --- a/src/controllers/handler.js +++ b/src/controllers/handler.js @@ -65,6 +65,32 @@ export default function luckysheetHandler() { } const os = browser.detectOS(), isMac = os=="Mac"?true:false, scrollNum = isMac?1:3; + + if (!Date.now) + Date.now = function() { return new Date().getTime(); }; + //requestAnimationFrame method + (function() { + 'use strict'; + + var vendors = ['webkit', 'moz']; + for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) { + var vp = vendors[i]; + window.requestAnimationFrame = window[vp+'RequestAnimationFrame']; + window.cancelAnimationFrame = (window[vp+'CancelAnimationFrame'] + || window[vp+'CancelRequestAnimationFrame']); + } + if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) // iOS6 is buggy + || !window.requestAnimationFrame || !window.cancelAnimationFrame) { + var lastTime = 0; + window.requestAnimationFrame = function(callback) { + var now = Date.now(); + var nextTime = Math.max(lastTime + 16, now); + return setTimeout(function() { callback(lastTime = nextTime); }, + nextTime - now); + }; + window.cancelAnimationFrame = clearTimeout; + } + }()); //滚动监听 $("#luckysheet-cell-main").scroll(function () { @@ -1077,7 +1103,7 @@ export default function luckysheetHandler() { $(document).mousemove(function (event) { luckysheetPostil.overshow(event); //有批注显示 - clearInterval(Store.jfautoscrollTimeout); + window.cancelAnimationFrame(Store.jfautoscrollTimeout); if(formula.functionResizeStatus){ let y = event.pageY; @@ -1268,7 +1294,7 @@ export default function luckysheetHandler() { Store.countfuncTimeout = setTimeout(function () { countfunc() }, 500); } - Store.jfautoscrollTimeout = setInterval(function () { + function mouseRender() { if (Store.luckysheet_scroll_status && !Store.luckysheet_cols_change_size && !Store.luckysheet_rows_change_size) { let mouse = mouseposition(event.pageX, event.pageY); let left = $("#luckysheet-scrollbar-x").scrollLeft(), @@ -1913,7 +1939,11 @@ export default function luckysheetHandler() { else if (!!formula.rangeMove) { formula.rangeMoveDraging(event, formula.rangeMovexy, formula.rangeMoveObj.data("range"), formula.rangeMoveObj, Store.sheetBarHeight, Store.statisticBarHeight); } - }, 1); + + Store.jfautoscrollTimeout = window.requestAnimationFrame(mouseRender); + } + + Store.jfautoscrollTimeout = window.requestAnimationFrame(mouseRender); } }); @@ -1938,7 +1968,7 @@ export default function luckysheetHandler() { } Store.luckysheet_select_status = false; - clearTimeout(Store.jfautoscrollTimeout); + window.cancelAnimationFrame(Store.jfautoscrollTimeout); Store.luckysheet_scroll_status = false; $("#luckysheet-cell-selected").find(".luckysheet-cs-fillhandle").css("cursor","crosshair").end().find(".luckysheet-cs-draghandle").css("cursor","move"); diff --git a/src/controllers/pivotTable.js b/src/controllers/pivotTable.js index d9f2426ea..eed268c8b 100644 --- a/src/controllers/pivotTable.js +++ b/src/controllers/pivotTable.js @@ -2342,6 +2342,7 @@ const pivotTable = { $("#luckysheet-dialog-pivotTable-range").html(getRangetxt(_this.pivotDataSheetIndex, _this.pivot_select_save)); $("#luckysheet-modal-dialog-slider-pivot").show(); + sheetmanage.sheetBarShowAndHide(); luckysheetsizeauto(); }, getComposeArray: function (data) { diff --git a/src/controllers/sheetMove.js b/src/controllers/sheetMove.js index 854a4c0a9..3f00ddb8d 100644 --- a/src/controllers/sheetMove.js +++ b/src/controllers/sheetMove.js @@ -1762,30 +1762,32 @@ function getNextIndex(direction, focusIndex, strIndex, endIndex) { let stValue = Store.flowdata[strIndex][focusIndex]; if(getObjType(stValue) == "object" && isRealNull(stValue.v)){ - stNull = false; + stNull = true; } else if(isRealNull(stValue)){ - stNull = false; + stNull = true; } else{ - stNull = true; + stNull = false; } + console.log(stNull, "stNull"); + let cellNull = [], i = 0; for(let r = strIndex + 1; r <= endIndex; r++){ let cell = Store.flowdata[r][focusIndex]; if(getObjType(cell) == "object" && isRealNull(cell.v)){ - cellNull.push(false); + cellNull.push(true); } else if(isRealNull(cell)){ - cellNull.push(false); + cellNull.push(true); } else{ - cellNull.push(true); + cellNull.push(false); } - if(cellNull.length == 1 && stNull && cellNull[i] == false){ + if(cellNull.length == 1 && stNull==true && cellNull[i] == false){ index = strIndex + i + 1; break; } @@ -1817,13 +1819,13 @@ function getNextIndex(direction, focusIndex, strIndex, endIndex) { let stValue = Store.flowdata[endIndex][focusIndex]; if(getObjType(stValue) == "object" && isRealNull(stValue.v)){ - stNull = false; + stNull = true; } else if(isRealNull(stValue)){ - stNull = false; + stNull = true; } else{ - stNull = true; + stNull = false; } let cellNull = [], i = 0; @@ -1831,13 +1833,13 @@ function getNextIndex(direction, focusIndex, strIndex, endIndex) { let cell = Store.flowdata[r][focusIndex]; if(getObjType(cell) == "object" && isRealNull(cell.v)){ - cellNull.push(false); + cellNull.push(true); } else if(isRealNull(cell)){ - cellNull.push(false); + cellNull.push(true); } else{ - cellNull.push(true); + cellNull.push(false); } if(cellNull.length == 1 && stNull && cellNull[i] == false){ @@ -1872,13 +1874,13 @@ function getNextIndex(direction, focusIndex, strIndex, endIndex) { let stValue = Store.flowdata[focusIndex][strIndex]; if(getObjType(stValue) == "object" && isRealNull(stValue.v)){ - stNull = false; + stNull = true; } else if(isRealNull(stValue)){ - stNull = false; + stNull = true; } else{ - stNull = true; + stNull = false; } let cellNull = [], i = 0; @@ -1886,13 +1888,13 @@ function getNextIndex(direction, focusIndex, strIndex, endIndex) { let cell = Store.flowdata[focusIndex][c]; if(getObjType(cell) == "object" && isRealNull(cell.v)){ - cellNull.push(false); + cellNull.push(true); } else if(isRealNull(cell)){ - cellNull.push(false); + cellNull.push(true); } else{ - cellNull.push(true); + cellNull.push(false); } if(cellNull.length == 1 && stNull && cellNull[i] == false){ @@ -1927,13 +1929,13 @@ function getNextIndex(direction, focusIndex, strIndex, endIndex) { let stValue = Store.flowdata[focusIndex][endIndex]; if(getObjType(stValue) == "object" && isRealNull(stValue.v)){ - stNull = false; + stNull = true; } else if(isRealNull(stValue)){ - stNull = false; + stNull = true; } else{ - stNull = true; + stNull = false; } let cellNull = [], i = 0; @@ -1941,13 +1943,13 @@ function getNextIndex(direction, focusIndex, strIndex, endIndex) { let cell = Store.flowdata[focusIndex][c]; if(getObjType(cell) == "object" && isRealNull(cell.v)){ - cellNull.push(false); + cellNull.push(true); } else if(isRealNull(cell)){ - cellNull.push(false); + cellNull.push(true); } else{ - cellNull.push(true); + cellNull.push(false); } if(cellNull.length == 1 && stNull && cellNull[i] == false){ diff --git a/src/controllers/sheetmanage.js b/src/controllers/sheetmanage.js index 23f70527f..365a5b916 100644 --- a/src/controllers/sheetmanage.js +++ b/src/controllers/sheetmanage.js @@ -1037,9 +1037,17 @@ const sheetmanage = { if (formula.rangestart) { formula.createRangeHightlight(); } - + + this.sheetBarShowAndHide(index); + }, + sheetBarShowAndHide(index){ let $c = $("#luckysheet-sheet-container-c"); - $c.scrollLeft($sheet.offset().left); + + if(index!=null){ + let $sheet = $("#luckysheet-sheets-item" + index); + $c.scrollLeft($sheet.offset().left); + } + let c_width = $c.width(), c_srollwidth = $c[0].scrollWidth, scrollLeft = $c.scrollLeft();