События касания неправильны для преобразованных элементов SVG - PullRequest
0 голосов
/ 18 мая 2019

В процессе экспериментирования с масштабированием / панорамированием встроенного изображения SVG с применением матричного преобразования я обнаружил довольно странную вещь.После загрузки изображения я присоединяю прослушиватель событий touchstart к некоторым элементам в SVG-изображении, и событие происходит сразу же при касании объекта.Однако после применения преобразования

document.getElementById ('mysvg'). SetAttribute ('transform''matrix (abcde)')

, которое имеет эффект масштабирования и / или переводавсе изображение SVG, касающееся одного и того же объекта, больше не вызывает ожидаемое событие касания.После некоторого эксперимента я обнаружил, что событие все еще может быть вызвано тем, что сенсорное местоположение на экране не имеет отношения к фактическому новому размещению объекта на экране.Затем я перешел к первому removeEventListener, а затем addEventListener для объекта после выдачи матричного преобразования, и вот, обработка прикосновений вернулась к норме.

Совершенно независимо от того, что я хотел быВо избежание довольно дорогих операций по удалению и последующему назначению одного и того же прослушивателя событий после каждого панорамирования / масштабирования, я хотел бы понять, почему это происходит.Это похоже на то, как браузер определяет местоположение объекта в пикселях на стадии addEventListener, а затем удерживает его где-то в своей памяти в блаженном неведении относительно любых смещений объекта, которые могли произойти позже.

Может кто-нибудь здесьскажите мне, что здесь происходит и как я могу более эффективно сохранить полезность события касания после панорамирования и масштабирования?

...