Le but de if (el instanceof SVGElement)
ici devrait être un test de capacité, mais j'ai trouvé que pour l'élément entrant el, le fait qu'il y ait SVGElement sur sa chaîne de prototypes ne semble pas avoir quelque chose à voir avec le fait qu'il ait getBoundingClientRect, n'est-ce pas ? Même s'il n'y a pas de SVGElement dans la chaîne de prototypes d'un élément, il possède toujours la méthode getBoundingClientRect. Alors, que signifie l'écriture ici ?
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
};
}
};
Merci !
CRIMX
Bien fondé et convaincant !
SVGElement - Les propriétés offsetParent, offsetTop, offsetLeft, offsetWidth et offsetHeight sont obsolètes dans Chrome 48.
Les propriétés offsetLeft et offsetTop des éléments SVG renvoient toujours « non défini ».
La raison pour laquelle vous n'utilisez pas HTMLElement peut être due au fait que
getBoundingClientRect
est plus lent.