方法一,path加载到svg元素中,可以通过元素的边界框参数对象,使用 JavaScript 的 getBoundingClientRect()
方法
let divElement = document.querySelector('div');
let boundingBox = divElement.getBoundingClientRect();
方法二:计算出路径的坐标,(观看上一篇文章)再求出最小坐标和最大坐标
var points = pathToPoints(pathData, 100)
var pathData = 'M10,10C20,20,30,10,40,20S50,30,60,20Q70,10,80,20T90,30'
/**
* 路径转坐标
*/
export function pathToPoints (pathData, numPoints) {
if (!pathData) return []
// 创建一个Path元素
var path = document.createElementNS("http://www.w3.org/2000/svg", "path");
path.setAttribute("d", pathData);
var pathLen = path.getTotalLength()
var points = []
if (!numPoints) {
numPoints = parseInt(pathLen * 0.3) || 4
numPoints = numPoints > 500 ? 500 : numPoints
}
for (let i = 0; i < numPoints; i++) {
let p = path.getPointAtLength((i * pathLen) / numPoints);
points.push(p)
}
return points;
}
function getMinMaxPoint(points) {
let arrX = []
let arrY = []
points.forEach(p => {
arrX.push(p.x)
arrY.push(p.y)
})
arrX = arrX.sort((n, p) => n - p)
arrY = arrY.sort((n, p) => n - p)
let minX = arrX[0]
let minY = arrY[0]
let maxX = arrX.slice(-1)[0]
let maxY = arrY.slice(-1)[0]
let w = Math.abs(maxX - minX)
let h = Math.abs(maxY - minY)
return {minX, minY, maxX, maxY, w, h}
}
var points = getPathPoints (pathD, numPoints)
var pathObj = getMinMaxPoint(points)
输出结果:
外边界的四个坐标分别是
左上角:(minX, minY)右上角:(maxX, minY)
左下角:(minX, maxY)右下角:(maxX, maxY)