获取path的宽高 、外边界框

方法一,path加载到svg元素中,可以通过元素的边界框参数对象,使用 JavaScript 的 getBoundingClientRect() 方法

let divElement = document.querySelector('div');
let boundingBox = divElement.getBoundingClientRect();

方法二:计算出路径的坐标,(观看上一篇文章)再求出最小坐标和最大坐标

path转为坐标-CSDN博客

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)

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值