javascript get x and y coordinates on mouse click

JavascriptHtmlOnclickOnmouseclick

Javascript Problem Overview


I have a little div tag that when I click on it (onClick event), it will run the printMousePos() function.

These are the HTML tags:

<html>
    <header>
        <!-- By the way, this is not the actual html file, just a generic example. -->
        <script src='game.js'></script>
    </header>
    <body>
        <div id="example">
            <p id="test">x: , y:</p>
        </div>
    </body>
</html>

This is the printMousePos function in a seperate .js file:

function printMousePos() {
    var cursorX;
    var cursorY;
    document.onmousemove = function(e){
	cursorX = e.pageX;
	cursorY = e.pageY;
}
    document.getElementById('test').innerHTML = "x: " + cursorX + ", y: " + cursorY;
}

Yes, the function actually works (it knows when you click it and all), but it returns undefined for both x and y, so I'm assuming that the getting x and y logic in the function is incorrect. Any Ideas? I also know there aren't any built-in functions within javascript itself to return the x and y like in java, ex. would there be a way to do it with say JQuery or PHP? (avoid those if possible though, javascript would be best). Thanks!

Javascript Solutions


Solution 1 - Javascript

Like this.

function printMousePos(event) {
  document.body.textContent =
    "clientX: " + event.clientX +
    " - clientY: " + event.clientY;
}

document.addEventListener("click", printMousePos);

MouseEvent - MDN > MouseEvent.clientX Read only
> The X coordinate of the mouse pointer in local (DOM content) coordinates. > > MouseEvent.clientY Read only
> The Y coordinate of the mouse pointer in local (DOM content) coordinates.

Solution 2 - Javascript

It sounds like your printMousePos function should:

  1. Get the X and Y coordinates of the mouse
  2. Add those values to the HTML

Currently, it does these things:

  1. Creates (undefined) variables for the X and Y coordinates of the mouse
  2. Attaches a function to the "mousemove" event (which will set those variables to the mouse coordinates when triggered by a mouse move)
  3. Adds the current values of your variables to the HTML

See the problem?

Your variables are never getting set, because as soon as you add your function to the "mousemove" event you print them.

It seems like you probably don't need that mousemove event at all; I would try something like this:

function printMousePos(e) {
    var cursorX = e.pageX;
    var cursorY = e.pageY;
    document.getElementById('test').innerHTML = "x: " + cursorX + ", y: " + cursorY;
}

Solution 3 - Javascript

simple solution is this:

game.js:

document.addEventListener('click', printMousePos, true);
function printMousePos(e){
  
      cursorX = e.pageX;
      cursorY= e.pageY;
      $( "#test" ).text( "pageX: " + cursorX +",pageY: " + cursorY );
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBryce HahnView Question on Stackoverflow
Solution 1 - JavascriptJonathanView Answer on Stackoverflow
Solution 2 - JavascriptKylokView Answer on Stackoverflow
Solution 3 - JavascriptTeaView Answer on Stackoverflow