Я пытаюсь комбинировать fabricJS с Google Maps. Я сделал это, чтобы наложить холст на карту div, чтобы отображать фигуры над картой. Проблема заключается в том, что события карты Google не являются триггерами больше. Я искал интернет для решений и нашел, что тег css pointer-event
должен распространять события щелчка на нижележащие слои, но это не сработало для меня. Я также попытался добавить событие с addDomListener
, но не повезло. Событие click вызовет, но google.maps.event.trigger
этого не сделал.Продвигать события клика с холста на div
Я только что начал, так что пока ничего не видно. Я немного новичок в веб-разработке, поэтому я решил, что прошу здесь, прежде чем тратить свое время на то, что невозможно.
Это мой HTML-файл:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#holder {
height:700px;
width: 700px;
position:relative;
}
#canvasholder{
height: 700px;
width: 700px;
position: absolute;
}
html, body {
height: 100%;
margin: 0;
padding: 0;
}
#map-canvas {
position: absolute;
height: 700px;
width: 700px;
z-index: -1;
}
#canvas{
position: absolute;
height: 700px;
widht: 700px;
pointer-events: none;
opacity: 1;
z-index: 1;
}
</style>
</head>
<body>
<script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.js"></script>
<div id="holder">
<div id="canvasholder">
<canvas id="canvas"></canvas>
</div>
<div id="map-canvas"></div>
</div>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAJ4aYR2NFbLLzh_tkya-rE40gCl-hPpLc&callback=initMap"
async defer></script>
<script src="./app.js"></script>
</body>
</html>
И мой файл Javascript:
var map;
var canvas;
function initMap() {
map = new google.maps.Map(document.getElementById('map-canvas'), {
center: {lat: -34.397, lng: 150.644},
zoom: 8
});
google.maps.event.addDomListener(document.getElementById("canvasholder").firstElementChild, "click", function(e){
google.maps.event.trigger(map, "click", e);
})
canvas = new fabric.Canvas("canvas");
canvas.setHeight(700);
canvas.setWidth(700);
canvas.setBackgroundColor('', canvas.renderAll.bind(canvas));
canvas.add(new fabric.Circle({ radius: 30, fill: '#f55', top: 100, left: 100 }));
}
связанный с этим вопрос: [? Как добавить простой обработчик события OnClick для холста элемента] (http://stackoverflow.com/questions/9880279/how-do-i-add- a-simple-onclick-event-handler-to-a-canvas-element) – geocodezip
Возможно, у вас есть опечатка, правильный синтаксис: 'pointer-events: none;' (обратите внимание на множественные «события»). – markE