sketch-json-parse
Version:
sketch-json解析
55 lines (54 loc) • 2.11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
/**
* 透明图层判断方法,需满足下方所有条件
* 1. fills数组为空
* 2. 图层类型_class: 'rectangle', 'triangle', 'oval', 'star', 'polygon',只对这几种类型做处理
* @param layer
*/
const isTouMing = (layer) => {
var _a, _b;
if (!['rectangle', 'triangle', 'oval', 'star', 'polygon'].includes(layer._class)) {
return false;
}
if (!(((_b = (_a = layer.style) === null || _a === void 0 ? void 0 : _a.fills) === null || _b === void 0 ? void 0 : _b.filter(item => item.isEnabled).length) === 0)) {
return false;
}
return true;
};
/**
* 处理没有填充的图层遮挡问题
*
* @param layers
*/
const handleNotFillLayerOrder = (layers) => {
layers.sort((bLayer, aLayer) => {
const aLayerIsTouMing = isTouMing(aLayer);
const bLayerIsTouMing = isTouMing(bLayer);
// a 不透明,b 透明;当a无法完全覆盖b的时候替换顺序
if (!aLayerIsTouMing && bLayerIsTouMing &&
!(aLayer.frame.x <= bLayer.frame.x &&
aLayer.frame.y <= bLayer.frame.y &&
aLayer.frame.x + aLayer.frame.width >= bLayer.frame.x + bLayer.frame.width &&
aLayer.frame.y + aLayer.frame.height >= bLayer.frame.y + bLayer.frame.height)) {
return -1;
}
// a b都透明的时候 b完全覆盖a 则替换排序
if (aLayerIsTouMing && bLayerIsTouMing &&
(aLayer.frame.x >= bLayer.frame.x &&
aLayer.frame.y >= bLayer.frame.y &&
aLayer.frame.x + aLayer.frame.width <= bLayer.frame.x + bLayer.frame.width &&
aLayer.frame.y + aLayer.frame.height <= bLayer.frame.y + bLayer.frame.height)) {
return -1;
}
return 0;
});
layers = layers.map((layer) => {
if (Array.isArray(layer.layers)) {
layer.layers = handleNotFillLayerOrder(layer.layers);
}
return layer;
});
return layers;
};
exports.default = handleNotFillLayerOrder;