@antv/f2
Version:
Charts for mobile visualization.
132 lines • 3.79 kB
JavaScript
import { isDate, isPlainObject, isNumber, isString, isArray } from '@antv/util';
// 默认设置50
var ONE_REM;
try {
// xgraph下这段会抛错
ONE_REM = parseInt(document.documentElement.style.fontSize, 10) || 50;
} catch (e) {
ONE_REM = 50;
}
var SCALE = ONE_REM / 100;
/**
* 像素转换
* @param {Number} px - 750视觉稿像素
* @return {Number} 屏幕上实际像素
*/
function defaultPx2hd(px) {
if (!px) {
return 0;
}
return Number((px * SCALE).toFixed(1));
}
function parsePadding(padding) {
if (isNumber(padding)) {
return [padding, padding, padding, padding];
}
var top = padding[0];
var right = isNumber(padding[1]) ? padding[1] : padding[0];
var bottom = isNumber(padding[2]) ? padding[2] : top;
var left = isNumber(padding[3]) ? padding[3] : right;
return [top, right, bottom, left];
}
function batch2hd(px2hd) {
var batchPx2hd = function batchPx2hd(value) {
// 处理带px的数据
if (isString(value) && /^-?\d+(\.\d+)?px$/.test(value)) {
var num = value.substr(0, value.length - 2);
return px2hd(Number(num));
}
if (isArray(value)) {
return value.map(function (v) {
return batchPx2hd(v);
});
}
if (isPlainObject(value)) {
var result = {};
for (var key in value) {
if (value.hasOwnProperty(key)) {
var rst = batchPx2hd(value[key]);
if (!rst) {
result[key] = rst;
continue;
}
if (key === 'padding' || key === 'margin') {
var paddingArray = parsePadding(rst);
result[key] = paddingArray;
result["".concat(key, "Top")] = paddingArray[0];
result["".concat(key, "Right")] = paddingArray[1];
result["".concat(key, "Bottom")] = paddingArray[2];
result["".concat(key, "Left")] = paddingArray[3];
continue;
}
result[key] = rst;
}
}
return result;
}
// 默认直接返回
return value;
};
return batchPx2hd;
}
// 展开数组
function extendMap(arr, fn) {
if (!arr) {
return arr;
}
if (!isArray(arr)) {
return [fn(arr)];
}
var newArray = [];
for (var i = 0; i < arr.length; i++) {
var element = arr[i];
if (isArray(element)) {
newArray = newArray.concat(extendMap(element, fn));
} else if (element) {
newArray.push(fn(element));
}
}
return newArray;
}
function toTimeStamp(value) {
if (isString(value)) {
if (value.indexOf('T') > 0) {
value = new Date(value).getTime();
} else {
// new Date('2010/01/10') 和 new Date('2010-01-10') 的差别在于:
// 如果仅有年月日时,前者是带有时区的: Fri Jan 10 2020 02:40:13 GMT+0800 (中国标准时间)
// 后者会格式化成 Sun Jan 10 2010 08:00:00 GMT+0800 (中国标准时间)
value = new Date(value.replace(/-/gi, '/')).getTime();
}
}
if (isDate(value)) {
value = value.getTime();
}
return value;
}
function isInBBox(bbox, point) {
var minX = bbox.minX,
maxX = bbox.maxX,
minY = bbox.minY,
maxY = bbox.maxY;
var x = point.x,
y = point.y;
return minX <= x && maxX >= x && minY <= y && maxY >= y;
}
function getElementsByClassName(className, element) {
if (!element || !className) return [];
var rst = [];
if (element.get('className') === className) {
rst.push(element);
}
var children = element.get('children');
if (children && children.length) {
for (var i = 0; i < children.length; i++) {
var child = children[i];
rst = rst.concat(getElementsByClassName(className, child));
}
}
return rst;
}
var px2hd = batch2hd(defaultPx2hd);
export { px2hd, batch2hd, extendMap, parsePadding, toTimeStamp, isInBBox, getElementsByClassName };