根据鼠标点击坐标

时间:2015-11-19 23:03:47

标签: javascript html css

我从一个空白页开始,用户应该点击页面上的任意位置以弹出一个图像。我正在尝试在用户在页面中单击的位置的精确坐标处显示图像。 无论何时/何地用户点击,我都可以在角落弹出一个图像。我也能够收集鼠标在页面中单击的位置的x和y坐标,但是在使这些坐标成为图像的坐标时,我遇到了麻烦。使用下面的代码,当用户点击窗口内的任何位置时,雪球的图像出现在左上角,并显示点击的x坐标。 (单击更多可更改每次单击时显示的x坐标)。我的问题是,如何让雪球出现在点击坐标上?

<head>
<script>
    document.onclick = userClicked;
    function userClicked() {

        var x = event.clientX;
        var y = event.clientY;
        document.getElementById("xCoord").innerHTML=x;
        document.getElementById("snowballAppear").style.display = '';
    }

</script>

<div class "container">
    <div class "picture">
        <img alt="snowballAppear" id="snowballAppear" style="display: none" src="http://vignette3.wikia.nocookie.net/pottermore/images/9/99/Snowball-lrg.png/revision/latest?cb=20130412122815"/>
    </div>
</div>

</head>

2 个答案:

答案 0 :(得分:1)

你可以使用CSS元素“left”代表X,“top”代表Y.确保有一个“position:absolute;”图像中的CSS样式。

基本上,在代码中:

function userClicked() {
    var x = event.clientX;
    var y = event.clientY;
    var snowball = document.getElementById("snowballAppear");
    snowball.style.display = '';
    snowball.style.position = 'absolute';
    snowball.style.left = x + 'px';
    snowball.style.top = y + 'px';
}

JSFiddle:https://jsfiddle.net/mxq629ng/

您可能希望从X和Y中减去图像高度/宽度的一半,使其围绕鼠标居中。

编辑:补充一些评论回来了;您可能希望将“event”添加为userClicked函数中的可传递参数。 click事件会将“event”变量转发到您的函数中。这将使它在许多主流浏览器中工作(不知何故,它在V8中工作)。检查这个小提琴,它应该适用于大多数主流浏览器; https://jsfiddle.net/mxq629ng/1/

答案 1 :(得分:1)

您需要定位img元素:

不要忘记将事件传递给您的函数

function userClicked(event) {
    var x = event.clientX;
    var y = event.clientY;
    document.getElementById("xCoord").innerHTML=x;
    document.getElementById("snowballAppear").style.display = '';
    // fixed position - The element is positioned relative to the browser window
    document.getElementById("snowballAppear").style.position = "fixed";
    // px from top of browser
    document.getElementById("snowballAppear").style.top  = y + "px";
    // px from left of browser
    document.getElementById("snowballAppear").style.left = x + "px";
}