В процессе экспериментирования с масштабированием / панорамированием встроенного изображения SVG с применением матричного преобразования я обнаружил довольно странную вещь.После загрузки изображения я присоединяю прослушиватель событий touchstart
к некоторым элементам в SVG-изображении, и событие происходит сразу же при касании объекта.Однако после применения преобразования
document.getElementById ('mysvg'). SetAttribute ('transform''matrix (abcde)')
, которое имеет эффект масштабирования и / или переводавсе изображение SVG, касающееся одного и того же объекта, больше не вызывает ожидаемое событие касания.После некоторого эксперимента я обнаружил, что событие все еще может быть вызвано тем, что сенсорное местоположение на экране не имеет отношения к фактическому новому размещению объекта на экране.Затем я перешел к первому removeEventListener
, а затем addEventListener
для объекта после выдачи матричного преобразования, и вот, обработка прикосновений вернулась к норме.
Совершенно независимо от того, что я хотел быВо избежание довольно дорогих операций по удалению и последующему назначению одного и того же прослушивателя событий после каждого панорамирования / масштабирования, я хотел бы понять, почему это происходит.Это похоже на то, как браузер определяет местоположение объекта в пикселях на стадии addEventListener
, а затем удерживает его где-то в своей памяти в блаженном неведении относительно любых смещений объекта, которые могли произойти позже.
Может кто-нибудь здесьскажите мне, что здесь происходит и как я могу более эффективно сохранить полезность события касания после панорамирования и масштабирования?