JavaScript鼠标点击图像坐标

z9ju0rcb  于 2024-01-05  发布在  Java
关注(0)|答案(5)|浏览(103)

作业说“你的任务是写一个HTML文件,其中包含JavaScript,将随机显示上面的图像之一。如果页面在浏览器中刷新,你应该得到另一个随机图像。”所以我做到了。
现在它说“当用户点击图像上的任何地方时,显示一个警告窗口,显示点击发生的X和Y位置相对于图像”。下面是我的代码:

<html>
<head>
<title>Assignment 2</title>
<script type="text/javascript">
  var imageURLs = [
       "p1.jpg"
     , "p2.jpg"
     , "p3.jpg"
     , "p4.jpg"
  ];
  function getImageTag() {
    var img = '<img src=\"';
    var randomIndex = Math.floor(Math.random() * imageURLs.length);
    img += imageURLs[randomIndex];
    img += '\" alt=\"Some alt text\"/>';
    return img;
  }
</script>
</head>
<body>
<script type="text/javascript">
  document.write(getImageTag());
</script>
</body>
</html>

字符串

rdlzhqv9

rdlzhqv91#

实际上,你可以使用HTML来实现这一点。image标签有一个名为ismap的属性。
这个属性的作用是指定一个图片是服务器端图片Map的一部分,当点击这样的Map时,点击坐标作为url查询字符串发送到服务器。
图片必须嵌套在链接下才能生效。

<a href="http://www.google.com">
    <img src="myimage.png" alt="My Image" ismap">
</a>

字符串
如果你不能使用图像Map,这里有一个JavaScript/jquery解决方案
首先,您需要在body标记的底部包含jQuery库。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>

$(document).ready(function() {
    $("img").on("click", function(event) {
        var x = event.pageX - this.offsetLeft;
        var y = event.pageY - this.offsetTop;
        alert("X Coordinate: " + x + " Y Coordinate: " + y);
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<img src="http://vignette1.wikia.nocookie.net/seraphina/images/b/b2/Dragonseraphina.jpg/revision/latest?cb=20160103194957" height="200" width="200" alt="dragon">

的字符串
监听click事件,并将event作为参数传入。
属性返回鼠标指针相对于文档左边缘的位置。

k10s72fa

k10s72fa2#

Map解决方案将只给你给予客户端的像素坐标。如果你想得到相对于原始图像的像素坐标,你需要naturalHeight和naturalWidth信息,其中有原始图像的高度和宽度。

验证码:

// https://stackoverflow.com/questions/34867066/javascript-mouse-click-coordinates-for-image
  document.getElementById(imageid).addEventListener('click', function (event) {
    // https://stackoverflow.com/a/288731/1497139
    bounds=this.getBoundingClientRect();
    var left=bounds.left;
    var top=bounds.top;
    var x = event.pageX - left;
    var y = event.pageY - top;
    var cw=this.clientWidth
    var ch=this.clientHeight
    var iw=this.naturalWidth
    var ih=this.naturalHeight
    var px=x/cw*iw
    var py=y/ch*ih
    alert("click on "+this.tagName+" at pixel ("+px+","+py+") mouse pos ("+x+"," + y+ ") relative to boundingClientRect at ("+left+","+top+") client image size: "+cw+" x "+ch+" natural image size: "+iw+" x "+ih );
  });

字符串

$(document).ready(function() {
    $("img").on("click", function(event) {
        bounds=this.getBoundingClientRect();
        var left=bounds.left;
        var top=bounds.top;
        var x = event.pageX - left;
        var y = event.pageY - top;
        var cw=this.clientWidth
        var ch=this.clientHeight
        var iw=this.naturalWidth
        var ih=this.naturalHeight
        var px=x/cw*iw
        var py=y/ch*ih
        alert("click on "+this.tagName+" at pixel ("+px+","+py+") mouse pos ("+x+"," + y+ ") relative to boundingClientRect at ("+left+","+top+") client image size: "+cw+" x "+ch+" natural image size: "+iw+" x "+ih );
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<img src="https://upload.wikimedia.org/wikipedia/commons/7/77/Avatar_cat.png" height="256" width="256" alt="kitten">

示例

click on IMG at pixel (445.5,334.125) mouse pos (148.5,49) relative to boundingClientRect at (483.5,64) client image size: 640 x 480 natural image size: 1920 x 1080

lawou6xi

lawou6xi3#

$(document).ready(function () {
    $("img").on("click", function (event) {

        $('#img_coordinate').html("X Coordinate: " + (event.pageX - this.offsetLeft) + "<br/> Y Coordinate: " + (event.pageY - this.offsetTop));
    });
});

字符串
HTML

<img src="img/sample.gif" />

<p id="img_coordinate"></p>

5rgfhyps

5rgfhyps4#

little fork ;)

$(document).ready(function() {
  $('img').click(function(e) {
    var offset_t = $(this).offset().top - $(window).scrollTop();
    var offset_l = $(this).offset().left - $(window).scrollLeft();
       w =   $(this).prop("width");        // Width  (Rendered)
   h =  $(this).prop("height");        // Height (Rendered)
      nw =    $(this).prop("naturalWidth") ;  // Width  (Natural)
  nh =  $(this).prop("naturalHeight") ; // Height (Natural)
    var left = Math.round( (e.clientX - offset_l) );
    var top = Math.round( (e.clientY - offset_t) );
        x = Math.round((left*nw)/w);
    y = Math.round((top*nh)/h);
//    $('#img_coordinate').html("Left: " + left + " Top: " + top + "nw: "+nw+" nh: "+nh +"x: "+x+" y: "+y);
    $('#img_coordinate').html("click x: "+x+" y: "+y);

  });
});

字符串

ijnw1ujt

ijnw1ujt5#

如果你不想使用jQuery,可以尝试使用

window.addEventListener('load', (event) => {
  let img = document.querySelector('img')

  img.addEventListener(
    "click", 
    function(event) {
      alert(`(${event.offsetX},${event.offsetY})`);
  });

});

字符串

相关问题