我有一个 Z-transformed 元素,其中包含一个标记作为子元素,我需要将该标记放置在鼠标单击位置。
我需要知道如何将屏幕坐标转换为 Z-transformed 元素上的坐标。
这是我当前的代码:
function getPosition(screenCoords)
{
// This function should return x and y coordinates on z-transformed element and I have no idea how to achieve that.
return {x: 2500, y: 1500};
}
var $viewport = $(".viewport");
var $marker = $(".marker");
$viewport.on("click", function(e){
e.preventDefault();
var newMarkerPosition = getPosition({x: e.pageX, y: e.pageY});
$marker.css({
left: newMarkerPosition.x + "px",
top: newMarkerPosition.y + "px"
});
});
html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
.viewport {
width: 100%;
height: 100%;
overflow: hidden;
perspective: 1000px;
perspective-origin: 50% 50%;
}
.z-transformed-element {
width: 5000px;
height: 3000px;
transform-origin: 2500px 1500px;
background-color: gray;
position: relative;
transform: translateX(-2500px) translateY(-1500px) translateZ(-10000px);
}
.marker {
left: 0;
top: 0;
width: 200px;
height: 200px;
margin-left: -100px;
margin-top: -100px;
background-color: red;
border-radius: 100px;
position: absolute;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="viewport">
<div class="z-transformed-element">
<div class="marker"></div>
</div>
</div>