UNPKG

sketch-json-parse

Version:

sketch-json解析

55 lines (54 loc) 2.11 kB
"use strict"; 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;