@pisell/layout
Version:
基于 Fusion 设计系统的自然布局体系
96 lines (91 loc) • 2.44 kB
JavaScript
import { isNumber, isString } from 'lodash-es';
import { DEFAULT_BREAK_POINTS } from "../common/constant";
/**
* 获取当前屏幕断点
* @param breakPoints
*/
export function getCurBreakPoint(breakPoints) {
var screenWidths = [];
var tmpMap = {};
var availWidth = document.body.clientWidth;
breakPoints.forEach(function (bp) {
var width = bp.width;
screenWidths.push(width);
tmpMap[width] = bp;
});
screenWidths = screenWidths.sort(function (a, b) {
return a - b;
});
var len = screenWidths.length;
var ret = tmpMap[screenWidths[0]];
if (availWidth > screenWidths[len - 1]) {
ret = tmpMap[screenWidths[len - 1]];
} else {
for (var i = 1; i < len; i++) {
var breakPoint = tmpMap[screenWidths[i]];
if (screenWidths[i - 1] <= availWidth && availWidth < screenWidths[i]) {
ret = breakPoint;
}
}
}
return ret;
}
/**
* 获取最大断点列数
*/
export function getMaxNumberOfColumns(breakPoints) {
if (breakPoints === void 0) {
breakPoints = DEFAULT_BREAK_POINTS;
}
var screenWidths = breakPoints.map(function (bp) {
return bp.width;
});
var maxWidth = Math.max.apply(Math, screenWidths);
var bp = breakPoints.find(function (breakPoint) {
return (breakPoint === null || breakPoint === void 0 ? void 0 : breakPoint.width) === maxWidth;
});
return (bp === null || bp === void 0 ? void 0 : bp.numberOfColumns) || 12;
}
/**
* 是否为标准的预设尺寸
* @param val
*/
export function isPresetSize(val) {
return ['small', 'medium', 'large'].includes(val);
}
/**
* 为数值包裹自动单位
* eg:
* wrapUnit(2) -> 2px
* wrapUnit('2em') -> 2em
* @param value
* @param unit
*/
export function wrapUnit(value, unit) {
if (unit === void 0) {
unit = 'px';
}
return isNumber(value) ? "" + value + unit : value;
}
/**
* 是否为一个有效的 gap 值:
* eg: 0.9 / -9px / auto
* @param val
*/
export function isValidGap(val) {
var gapValReg = /^-?[0-9]*\.?[0-9]+([a-z|A-z]*)$/;
return isNumber(val) || isString(val) && (gapValReg.test(val) || val === 'auto');
}
/**
* 获取最终的 gap 值
* @param contextGap 上下文中的 gap 值
* @param propGap 属性中定义的 gap 值
*/
export function getGapVal(contextGap, propGap) {
if (isValidGap(propGap)) {
return wrapUnit(propGap);
} else if (isValidGap(contextGap)) {
return wrapUnit(contextGap);
}
return undefined;
}