UNPKG

vislite

Version:

灵活、快速、简单的数据可视化交互式跨端前端库

140 lines (138 loc) 5.22 kB
function ruler (maxValue, minValue, num, option) { if (maxValue < minValue) { var temp = minValue; minValue = maxValue; maxValue = temp; } else if (maxValue == minValue) { return [maxValue]; } var times100 = (function (_value) { var _times100_base = (_value < 100 && _value > -100) ? 10 : 0.1; var _times100 = -1, _tiemsValue = _value; while (_times100_base == 10 ? (_tiemsValue >= -100 && _tiemsValue <= 100) : (_tiemsValue <= -100 || _tiemsValue >= 100)) { _times100 += 1; _tiemsValue *= _times100_base; } if (_times100_base == 10) { return Math.pow(10, _times100); } else { var temp = "0."; for (var i = 1; i < _times100; i++) { temp += "0"; } return +(temp + "1"); } })(maxValue - minValue); var distance100_oral = Math.ceil((maxValue - minValue) * times100 / num); var getResult = function (changValue) { var distance100 = { 3: 2, 4: 5, 6: 5, 7: 5, 8: 10, 9: 10, 11: 10, 12: 10, 13: 15, 14: 15, 16: 15, 17: 15, 18: 20, 19: 20, 21: 20, 22: 20, 23: 25, 24: 25, 26: 25, 27: 25 }[distance100_oral + changValue] || (distance100_oral + changValue); var distance = distance100 / times100; var begin = Math.floor(minValue / distance) * distance; var rulerArray = []; rulerArray.push(begin); for (var index = 1; rulerArray[rulerArray.length - 1] < maxValue; index++) { rulerArray.push(begin + distance * index); } return rulerArray; }; var rulerArray = getResult(0); var balanceMax = function () { var rulerArray_temp = []; var changeDist = rulerArray[rulerArray.length - 1] - (option === null || option === void 0 ? void 0 : option.max); for (var index = 0; index < rulerArray.length; index++) { if (index + 1 < rulerArray.length && rulerArray[index + 1] - changeDist < minValue) ; else { rulerArray_temp.push(rulerArray[index] - changeDist); } } return rulerArray_temp; }; var balanceMin = function () { var rulerArray_temp = []; var changeDist = rulerArray[0] - (option === null || option === void 0 ? void 0 : option.min); for (var index = 0; index < rulerArray.length; index++) { rulerArray_temp[index] = rulerArray[index] - changeDist; if (maxValue <= rulerArray_temp[index]) break; } return rulerArray_temp; }; if (option) { if ('max' in option && 'min' in option && option.max >= maxValue && option.min <= minValue) { var isAnswer = function () { if (rulerArray[0] >= option.min && rulerArray[rulerArray.length - 1] <= option.max) return true; var rulerArray_max = balanceMax(); if (rulerArray_max[0] >= option.min && rulerArray_max[rulerArray_max.length - 1] <= option.max) { rulerArray = rulerArray_max; return true; } var rulerArray_min = balanceMin(); if (rulerArray_min[0] >= option.min && rulerArray_min[rulerArray_max.length - 1] <= option.max) { rulerArray = rulerArray_min; return true; } }; if (isAnswer()) return rulerArray; for (var changValue = 1; changValue < 100; changValue++) { rulerArray = getResult(changValue); if (isAnswer()) return rulerArray; rulerArray = getResult(-changValue); if (isAnswer()) return rulerArray; } } if ('max' in option && option.max >= maxValue) { if (option.max < rulerArray[rulerArray.length - 1]) { rulerArray = balanceMax(); } } else if ('min' in option && option.min <= minValue) { if (option.min > rulerArray[0]) { rulerArray = balanceMin(); } } } for (var index = 0; index < rulerArray.length; index++) { var valStr = rulerArray[index] + ""; if (/\./.test(valStr)) { if (/9{7,}$/.test(valStr)) { valStr = valStr.replace(/9{7,}$/, ''); rulerArray[index] = +(valStr.substring(0, valStr.length - 1) + ((+valStr[valStr.length - 1]) + 1)); } else if (/0{7,}\d$/.test(valStr)) { rulerArray[index] = +(valStr.replace(/0{7,}\d$/, '')); } } } return rulerArray; } export { ruler as default };