var svg = document.querySelector('svg');
var pt = svg.createSVGPoint();
function screenCoordsForRect(rect){
var corners = {};
var matrix = rect.getScreenCTM();
pt.x = rect.x.animVal.value;
pt.y = rect.y.animVal.value;
corners.nw = pt.matrixTransform(matrix);
pt.x += rect.width.animVal.value;
corners.ne = pt.matrixTransform(matrix);
pt.y += rect.height.animVal.value;
corners.se = pt.matrixTransform(matrix);
pt.x -= rect.width.animVal.value;
corners.sw = pt.matrixTransform(matrix);
return corners;
}
Пурпурные квадраты - это абсолютно позиционные элементы div в элементе HTML, использующие координаты экранного пространства. При перетаскивании или изменении размера прямоугольников эта функция вызывается и перемещает угловые делители по четырем углам (строки 116-126). Обратите внимание, что это работает, даже когда прямоугольники находятся в произвольном вложенном преобразовании (например, синий прямоугольник), а SVG масштабируется (изменяет размер окна браузера).
Для развлечения перетащите один из прямоугольников за край SVG-холста и обратите внимание, что углы пространства экрана остаются над невидимыми точками.