你可以Object.fromEntries()
用来创建你的 obj.
let domRec = document.getElementById('test').getBoundingClientRect();
// Convert to plain Object
let domObj = Object.fromEntries(Array.from(Object.keys(DOMRectReadOnly.prototype).filter(k => !isNaN(domRec[k])), k => [k, domRec[k]]));
// Convert back to DOMRectReadOnly
let domRec2 = DOMRectReadOnly.fromRect(domObj);
console.log('DOMRectReadOnly', domRec);
console.log('Plain Object', domObj);
console.log('DOMRectReadOnly', domRec2);
#test {
width: 200px;
height: 50px;
background-color: #f00;
}
<div id="test"></div>
但是,这也会将toJSON
fn 复制到新的 obj 中。因此我建议过滤非数字值:.filter(k => !isNaN(domRec[k])
.
轻的
如果您只对x
, y
, width
,感兴趣height
,您可以使用DOMRect
而不是DOMRectReadOnly
跳过该.filter()
部分。
您可以从这 4 个值中计算bottom
,的值,并且,只是,的别名。right
left
top
x
y
let domRec = someElement.getBoundingClientRect();
let domObj = Object.fromEntries(Array.from(Object.keys(DOMRect.prototype), k => [k, domRec[k]]));