Der Zweck von if (el instanceof SVGElement)
hier sollte ein Fähigkeitstest sein, aber ich habe festgestellt, dass für das eingehende Element el die Frage, ob SVGElement in seiner Prototypenkette vorhanden ist, nichts damit zu tun zu haben scheint, ob es getBoundingClientRect hat, oder? Auch wenn in der Prototypenkette eines Elements kein SVGElement vorhanden ist, verfügt es dennoch über die Methode getBoundingClientRect. Was bedeutet die Schreibweise hier?
me.getRect = function(el) {
if (el instanceof SVGElement) {
var rect = el.getBoundingClientRect();
return {
top : rect.top,
left : rect.left,
width : rect.width,
height : rect.height
};
} else {
return {
top : el.offsetTop,
left : el.offsetLeft,
width : el.offsetWidth,
height : el.offsetHeight
};
}
};
Danke!
CRIMX
Fundiert und überzeugend!
SVGElement - The properties offsetParent, offsetTop, offsetLeft, offsetWidth, and offsetHeight are deprecated in Chrome 48.
The offsetLeft and offsetTop properties of SVG elements always returns 'undefined'.
不对 HTMLElement 使用的原因可能是考虑到
getBoundingClientRect
更慢。