HTML で読み込まれた SVG ファイルで奇妙な問題が発生しました。SVG ファイル内の特定の要素にクリック イベントを添付していますが、これは正常に機能します。ただし、マウスとタッチのイベントを親 div にアタッチする必要もあります。SVG オブジェクトがマウス イベントをキャプチャしているように見えるため、親 div までバブリングしていません。そこで、SVG の pointer-event を none に設定してみます。この場合、親 div はマウス イベントを受け取りますが、子 SVG 要素はマウス イベントを受け取りません。子 svg 要素を pointer-events: all に設定しようとしましたが、それでもマウス イベントを取得できません。ここで何が間違っていますか?
SVGファイルを埋め込む方法は次のとおりです。
<div
id="map"
ng-pinchable
scale-factor="2"
max-zoom="2"
>
<object data="./media/map.svg" type="image/svg+xml"
id="mapsvg" width="100%" height="100%"></object>
</div>
JS を介して SVG 要素にイベントを追加する方法は次のとおりです。
//add event listeners to stations
var el = $scope.svgDoc.getElementById("station-test");
el.style.pointerEvents = "all";
el.addEventListener("mouseup",
function(){
$scope.stationClicked("some id");
}
);
}, false);
ここでは、SVG オブジェクトを保持している親の「マップ」div にイベントを追加しています。
el.addEventListener("click", function(){ console.log("Hello World!"); });
el.addEventListener("mousedown", function(){ console.log("mousedown"); });
前もって感謝します!