Browse Source

fix(change sheet scroll bar fix): change sheet scroll bar dont restore

master
wbfsa 5 years ago
parent
commit
02d26557a5
  1. 2
      src/controllers/conditionformat.js
  2. 24
      src/controllers/handler.js
  3. 90
      src/controllers/mobile.js
  4. 2
      src/controllers/select.js
  5. 25
      src/controllers/sheetmanage.js
  6. 4
      src/css/luckysheet-core.css
  7. 2
      src/global/draw.js
  8. 26
      src/global/scroll.js
  9. 3
      src/store/index.js

2
src/controllers/conditionformat.js

@ -2288,7 +2288,7 @@ const conditionformat = {
</div> </div>
</div> </div>
</div> </div>
<div class="title">设置格式</div>${textCellColorHtml}`; <div class="title">${conditionformat_Text.setFormat}: </div>${textCellColorHtml}`;
break; break;
case 2: //仅对排名靠前或靠后的数值设置格式 case 2: //仅对排名靠前或靠后的数值设置格式
ruleExplainHtml = `<div class="title">${conditionformat_Text.ruleTypeItem3_title}:</div> ruleExplainHtml = `<div class="title">${conditionformat_Text.ruleTypeItem3_title}:</div>

24
src/controllers/handler.js

@ -61,7 +61,7 @@ import { createLuckyChart, hideAllNeedRangeShow } from '../expendPlugins/chart/p
//, columeflowset, rowflowset //, columeflowset, rowflowset
export default function luckysheetHandler() { export default function luckysheetHandler() {
const os = browser.detectOS(), isMac = os=="Mac"?true:false, scrollNum = isMac?1:3, isMobile = browser.mobilecheck(); const os = browser.detectOS(), isMobile = browser.mobilecheck();
//移动端 //移动端
if(isMobile){ if(isMobile){
@ -106,7 +106,7 @@ export default function luckysheetHandler() {
const _locale = locale(); const _locale = locale();
const locale_drag = _locale.drag; const locale_drag = _locale.drag;
const locale_info = _locale.info; const locale_info = _locale.info;
let prev
$("#luckysheet-grid-window-1").mousewheel(function (event, delta) { $("#luckysheet-grid-window-1").mousewheel(function (event, delta) {
let scrollLeft = $("#luckysheet-scrollbar-x").scrollLeft(), let scrollLeft = $("#luckysheet-scrollbar-x").scrollLeft(),
scrollTop = $("#luckysheet-scrollbar-y").scrollTop(); scrollTop = $("#luckysheet-scrollbar-y").scrollTop();
@ -130,6 +130,7 @@ export default function luckysheetHandler() {
let colscroll = 0; let colscroll = 0;
let rowscroll = 0; let rowscroll = 0;
let scrollNum = event.deltaFactor<40?1:(event.deltaFactor<80?2:3);
//一次滚动三行或三列 //一次滚动三行或三列
if(event.deltaY != 0){ if(event.deltaY != 0){
let row_ed; let row_ed;
@ -153,11 +154,11 @@ export default function luckysheetHandler() {
$("#luckysheet-scrollbar-y").scrollTop(rowscroll); $("#luckysheet-scrollbar-y").scrollTop(rowscroll);
} }
else if(event.deltaX != 0){
if((isMobile || event.deltaY ==0) && event.deltaX != 0){
let col_ed; let col_ed;
if((isMac && event.deltaX >0 ) || (!isMac && event.deltaX < 0)){ // if((isMac && event.deltaX >0 ) || (!isMac && event.deltaX < 0)){
if(event.deltaX >0){
col_ed = col_st + scrollNum; col_ed = col_st + scrollNum;
if(col_ed >= visibledatacolumn_c.length){ if(col_ed >= visibledatacolumn_c.length){
@ -179,18 +180,19 @@ export default function luckysheetHandler() {
}); });
$("#luckysheet-scrollbar-x").scroll(function(){ $("#luckysheet-scrollbar-x").scroll(function(){
setTimeout(function(){ // setTimeout(function(){
luckysheetscrollevent(true); luckysheetscrollevent();
},10); // },10);
}) })
.mousewheel(function (event, delta) { .mousewheel(function (event, delta) {
event.preventDefault(); event.preventDefault();
}); });
$("#luckysheet-scrollbar-y").scroll(function(){ $("#luckysheet-scrollbar-y").scroll(function(){
setTimeout(function(){ // setTimeout(function(){
luckysheetscrollevent(true); luckysheetscrollevent();
},10); // },10);
}) })
.mousewheel(function (event, delta) { .mousewheel(function (event, delta) {
event.preventDefault(); event.preventDefault();

90
src/controllers/mobile.js

@ -9,17 +9,24 @@ export default function mobileinit(){
//去除滚动条 //去除滚动条
Store.cellMainSrollBarSize = 0; Store.cellMainSrollBarSize = 0;
//滑动滚动表格 //滑动滚动表格
let luckysheet_touchmove_status = false, let luckysheet_touchmove_status = false,
luckysheet_touchmove_startPos = {}, luckysheet_touchmove_startPos = {},
luckysheet_touchhandle_status = false; luckysheet_touchhandle_status = false,
_scrollTimer = null;
$(document).on("touchstart", "#luckysheet-grid-window-1", function(event){ $(document).on("touchstart", "#luckysheet-grid-window-1", function(event){
clearInterval(_scrollTimer);//clear timer
luckysheet_touchmove_status = true; luckysheet_touchmove_status = true;
let touch = event.originalEvent.targetTouches[0]; let touch = event.originalEvent.targetTouches[0];
luckysheet_touchmove_startPos = { luckysheet_touchmove_startPos = {
x: touch.pageX, x: touch.pageX,
y: touch.pageY y: touch.pageY,
startTime:event.timeStamp,
vy:0, //vy可以理解为滑动的力度
moveType:"y",
} }
}) })
$(document).on("touchmove", "#luckysheet-grid-window-1", function(event){ $(document).on("touchmove", "#luckysheet-grid-window-1", function(event){
@ -33,16 +40,16 @@ export default function mobileinit(){
let slideX = touch.pageX - luckysheet_touchmove_startPos.x; let slideX = touch.pageX - luckysheet_touchmove_startPos.x;
let slideY = touch.pageY - luckysheet_touchmove_startPos.y; let slideY = touch.pageY - luckysheet_touchmove_startPos.y;
luckysheet_touchmove_startPos = { luckysheet_touchmove_startPos.x = touch.pageX;
x: touch.pageX, luckysheet_touchmove_startPos.y = touch.pageY;
y: touch.pageY
} let scrollLeft = $("#luckysheet-scrollbar-x").scrollLeft();
let scrollTop = $("#luckysheet-scrollbar-y").scrollTop();
let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); scrollLeft -= slideX*3;
let scrollTop = $("#luckysheet-cell-main").scrollTop(); scrollTop -= slideY*3;
scrollLeft -= slideX; // console.log(touch,touch.pageY, luckysheet_touchmove_startPos.y, slideY);
scrollTop -= slideY;
if(scrollLeft < 0){ if(scrollLeft < 0){
scrollLeft = 0; scrollLeft = 0;
@ -52,12 +59,32 @@ export default function mobileinit(){
scrollTop = 0; scrollTop = 0;
} }
if(Math.abs(slideX) < Math.abs(slideY)){ if (event.timeStamp - luckysheet_touchmove_startPos.startTime > 40) {//如果是慢速滑动,就不会产生力度,列表是跟着鼠标移动的
$("#luckysheet-scrollbar-y").scrollTop(scrollTop); luckysheet_touchmove_startPos.startTime = event.timeStamp;//慢速滑动不产生力度,所以需要实时更新时间戳
if(Math.abs(slideX) < Math.abs(slideY)){
$("#luckysheet-scrollbar-y").scrollTop(scrollTop);
}
else{
$("#luckysheet-scrollbar-x").scrollLeft(scrollLeft);
}
} }
else{ else{
$("#luckysheet-scrollbar-x").scrollLeft(scrollLeft); if(Math.abs(slideX) < Math.abs(slideY)){
// $("#luckysheet-scrollbar-y").scrollTop(scrollTop);
luckysheet_touchmove_startPos.vy = slideY;
luckysheet_touchmove_startPos.scrollTop = scrollTop;
luckysheet_touchmove_startPos.moveType = "y";
}
else{
// $("#luckysheet-scrollbar-x").scrollLeft(scrollLeft);
luckysheet_touchmove_startPos.vy = slideX;
luckysheet_touchmove_startPos.moveType = "x";
luckysheet_touchmove_startPos.scrollLeft = scrollLeft;
}
} }
} }
else if(luckysheet_touchhandle_status){//选区 else if(luckysheet_touchhandle_status){//选区
let mouse = mouseposition(touch.pageX, touch.pageY); let mouse = mouseposition(touch.pageX, touch.pageY);
@ -157,8 +184,41 @@ export default function mobileinit(){
event.stopPropagation(); event.stopPropagation();
}) })
$(document).on("touchend", function(event){ $(document).on("touchend", function(event){
if(luckysheet_touchmove_status){
let vy = Math.abs(luckysheet_touchmove_startPos.vy), friction = ((vy >> 31) * 2 + 1) * 0.5;
if(vy>0){
_scrollTimer = setInterval(function () {//
vy -= friction;//力度按 惯性的大小递减
if(luckysheet_touchmove_startPos.moveType=="y"){
if(luckysheet_touchmove_startPos.vy>0){
luckysheet_touchmove_startPos.scrollTop -= vy;
}
else{
luckysheet_touchmove_startPos.scrollTop += vy;
}
//luckysheet_touchmove_startPos.scrollTop += vy;
$("#luckysheet-scrollbar-y").scrollTop(luckysheet_touchmove_startPos.scrollTop);
}
else{
if(luckysheet_touchmove_startPos.vy>0){
luckysheet_touchmove_startPos.scrollLeft -= vy;
}
else{
luckysheet_touchmove_startPos.scrollLeft += vy;
}
// luckysheet_touchmove_startPos.scrollLeft += vy;
$("#luckysheet-scrollbar-x").scrollLeft(luckysheet_touchmove_startPos.scrollLeft);
}
if(vy<=0){
clearInterval(_scrollTimer);
}
}, 20);
}
}
luckysheet_touchmove_status = false; luckysheet_touchmove_status = false;
luckysheet_touchmove_startPos = {}; // luckysheet_touchmove_startPos = {};
luckysheet_touchhandle_status = false; luckysheet_touchhandle_status = false;
}) })
@ -166,6 +226,8 @@ export default function mobileinit(){
//滑动选择选区 //滑动选择选区
$(document).on("touchstart", ".luckysheet-cs-touchhandle", function(event){ $(document).on("touchstart", ".luckysheet-cs-touchhandle", function(event){
luckysheet_touchhandle_status = true; luckysheet_touchhandle_status = true;
luckysheet_touchmove_status = false;
console.log(1111111111);
event.stopPropagation(); event.stopPropagation();
}) })

2
src/controllers/select.js

@ -366,7 +366,7 @@ function luckysheet_count_show(left, top, width, height, rowseleted, columnselet
topv = scrollHeight + drawHeight / 2; topv = scrollHeight + drawHeight / 2;
} }
$("#luckysheet-row-count-show").css({ "left": leftv, "top": topv, "display": "block" }).html("<div>" + rowl.toString().split("").join("</div><div>") + "</div><div>"+locale_info.row+"</div>"); $("#luckysheet-row-count-show").css({ "left": leftv, "top": topv, "display": "block","width":"11px" }).html("<div>" + rowl.toString().split("").join("</div><div>") + "</div><div>"+locale_info.row+"</div>");
} }
else { else {
$("#luckysheet-row-count-show").hide(); $("#luckysheet-row-count-show").hide();

25
src/controllers/sheetmanage.js

@ -756,8 +756,8 @@ const sheetmanage = {
file["luckysheet_select_save"] = $.extend(true, [], Store.luckysheet_select_save); file["luckysheet_select_save"] = $.extend(true, [], Store.luckysheet_select_save);
file["luckysheet_selection_range"] = $.extend(true, [], Store.luckysheet_selection_range); file["luckysheet_selection_range"] = $.extend(true, [], Store.luckysheet_selection_range);
file["scrollLeft"] = $("#luckysheet-cell-main").scrollLeft();//列标题 file["scrollLeft"] = $("#luckysheet-scrollbar-x").scrollLeft();//列标题
file["scrollTop"] = $("#luckysheet-cell-main").scrollTop();//行标题 file["scrollTop"] = $("#luckysheet-scrollbar-y").scrollTop();//行标题
}, },
setSheetParam: function(isload) { setSheetParam: function(isload) {
let index = this.getSheetIndex(Store.currentSheetIndex); let index = this.getSheetIndex(Store.currentSheetIndex);
@ -787,6 +787,25 @@ const sheetmanage = {
createFilterOptions(file["filter_select"], file["filter"]); createFilterOptions(file["filter_select"], file["filter"]);
Store.scrollRefreshSwitch = false;
if(file["scrollLeft"]!=null && file["scrollLeft"]>0){
$("#luckysheet-scrollbar-x").scrollLeft(file["scrollLeft"]);
}
else{
$("#luckysheet-scrollbar-x").scrollLeft(0);
}
if(file["scrollTop"]!=null && file["scrollTop"]>0){
$("#luckysheet-scrollbar-y").scrollTop(file["scrollTop"]);
}
else{
$("#luckysheet-scrollbar-y").scrollTop(0);
}
setTimeout(() => {
Store.scrollRefreshSwitch = true;
}, 0);
jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length,false); jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length,false);
}, },
restoreselect: function() { restoreselect: function() {
@ -852,7 +871,7 @@ const sheetmanage = {
else if($("#luckysheet-modal-dialog-slider-pivot").is(":visible")) { else if($("#luckysheet-modal-dialog-slider-pivot").is(":visible")) {
Store.luckysheetcurrentisPivotTable = false; Store.luckysheetcurrentisPivotTable = false;
$("#luckysheet-modal-dialog-slider-pivot").hide(); $("#luckysheet-modal-dialog-slider-pivot").hide();
luckysheetsizeauto(); luckysheetsizeauto(false);
} }
let load = file["load"]; let load = file["load"];

4
src/css/luckysheet-core.css

@ -1991,7 +1991,7 @@ body:not(.ewa-ipad) .luckysheet-cols-h-cell-nosel:hover, body:not(.ewa-ipad) .lu
width: 16px; width: 16px;
height: 16px; height: 16px;
padding: 5px; padding: 5px;
z-index: 10; z-index: 100;
pointer-events: auto; pointer-events: auto;
touch-action: auto; touch-action: auto;
} }
@ -5468,7 +5468,7 @@ fieldset[disabled] a.btn {
color: #fff; color: #fff;
} }
.luckysheet-newEditorRule-dialog .ruleTypeBox .ruleTypeItem .icon{ .luckysheet-newEditorRule-dialog .ruleTypeBox .ruleTypeItem .icon{
font-family: Arial, Helvetica, sans-serif;
} }
.luckysheet-newEditorRule-dialog .ruleExplainBox{ .luckysheet-newEditorRule-dialog .ruleExplainBox{
border: 1px solid #d4d4d4; border: 1px solid #d4d4d4;

2
src/global/draw.js

@ -240,6 +240,8 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of
return; return;
} }
// console.trace();
clearTimeout(measureTextCacheTimeOut); clearTimeout(measureTextCacheTimeOut);
//参数未定义处理 //参数未定义处理

26
src/global/scroll.js

@ -3,12 +3,29 @@ import { luckysheet_searcharray } from '../controllers/sheetSearch';
import { luckysheetrefreshgrid } from '../global/refresh'; import { luckysheetrefreshgrid } from '../global/refresh';
import Store from '../store'; import Store from '../store';
let scrollRequestAnimationFrameIni = true,scrollRequestAnimationFrame = false, scrollTimeOutCancel=null;
function execScroll(){
let scrollLeft = $("#luckysheet-scrollbar-x").scrollLeft(),
scrollTop = $("#luckysheet-scrollbar-y").scrollTop();
luckysheetrefreshgrid(scrollLeft, scrollTop);
scrollRequestAnimationFrame = window.requestAnimationFrame(execScroll);
}
//全局滚动事件 //全局滚动事件
export default function luckysheetscrollevent(isadjust) { export default function luckysheetscrollevent(isadjust) {
let $t = $("#luckysheet-cell-main"); let $t = $("#luckysheet-cell-main");
let scrollLeft = $("#luckysheet-scrollbar-x").scrollLeft(), let scrollLeft = $("#luckysheet-scrollbar-x").scrollLeft(),
scrollTop = $("#luckysheet-scrollbar-y").scrollTop(); scrollTop = $("#luckysheet-scrollbar-y").scrollTop();
clearTimeout(scrollTimeOutCancel);
scrollTimeOutCancel = setTimeout(() => {
scrollRequestAnimationFrameIni = true;
window.cancelAnimationFrame(scrollRequestAnimationFrame);
}, 500);
// if (!!isadjust) { // if (!!isadjust) {
// let scrollHeight = $t.get(0).scrollHeight; // let scrollHeight = $t.get(0).scrollHeight;
// let windowHeight = $t.height(); // let windowHeight = $t.height();
@ -74,8 +91,15 @@ export default function luckysheetscrollevent(isadjust) {
"top": (parseInt($("#luckysheet-input-box").css("top")) - 20) + "px", "top": (parseInt($("#luckysheet-input-box").css("top")) - 20) + "px",
"z-index": $("#luckysheet-input-box").css("z-index") "z-index": $("#luckysheet-input-box").css("z-index")
}).show(); }).show();
if(scrollRequestAnimationFrameIni && Store.scrollRefreshSwitch){
execScroll();
scrollRequestAnimationFrameIni = false;
}
// window.requestAnimationFrame(()=>{
// luckysheetrefreshgrid(scrollLeft, scrollTop);
// });
luckysheetrefreshgrid(scrollLeft, scrollTop);
$("#luckysheet-bottom-controll-row").css("left", scrollLeft + 10); $("#luckysheet-bottom-controll-row").css("left", scrollLeft + 10);

3
src/store/index.js

@ -111,7 +111,8 @@ const Store = {
functionList:null, //function list explanation functionList:null, //function list explanation
luckysheet_function:null, luckysheet_function:null,
chart_selection: {}, chart_selection: {},
currentChart: '' currentChart: '',
scrollRefreshSwitch:true,
} }
export default Store; export default Store;
Loading…
Cancel
Save