我正在尝试将fabricJS与Google Maps相结合。我所做的是在地图div上放置一个画布,以显示地图上的形状。
问题是谷歌地图事件不再被触发。我在互联网上搜寻了解决方案,并发现css标签"pointer-event"应该将点击事件传递到底层层,但这对我没有用。
我还尝试使用"addDomListener"添加事件,但也没有运气。点击事件会被触发,但 "google.maps.event.trigger"却没有。
我刚刚开始,所以还没有什么花哨的东西可看。我是网页开发的新手,所以我想在浪费时间于不可能的事情之前在这里问问。这是我的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 }));
}
pointer-events:none;
(注意“events”是复数形式)。 - markE