【问题标题】:How could I display (x,y) coordinates on image in real-time to the user when the user hovers his mouse over the image?当用户将鼠标悬停在图像上时,如何实时向用户显示图像上的 (x,y) 坐标?
【发布时间】:2011-11-16 22:00:26
【问题描述】:

我有一个用户点击的方形图像/图表。

有没有办法在用户将鼠标悬停在图像上时实时向用户显示光标的 (x,y) 坐标(用户不需要点击图像)?

【问题讨论】:

标签: javascript jquery ajax image


【解决方案1】:

根据您的要求,基于:

$("img").mousemove(function(e) {
    console.log(e.layerX + ", " + e.layerY);
});

【讨论】:

【解决方案2】:

应该这样做:

HTML

<img id="the_image" src="http://placekitten.com/200/200" />
<div id="coords"></div>

Javascript

$image = $('#the_image');
imgPos = [
    $image.offset().left,
    $image.offset().top,
    $image.offset().left + $image.outerWidth(),
    $image.offset().top + $image.outerHeight()
];

$image.mousemove(function(e){
  $('#coords').html((e.pageX-imgPos[0]) +', '+ (e.pageY-imgPos[1]));
});

DEMO(更新):http://jsfiddle.net/az8Uu/2/

注意:Throttling mousemove 处理程序也是一个好主意,以避免每 4 毫秒调用一次函数。

【讨论】:

  • 我不是以英语为母语的人......在这种情况下,“节流”是什么意思? (我发现的定义似乎无关紧要)编辑:我的错,我找到了一个解释:remysharp.com/2010/07/21/throttling-function-calls
  • 我添加了一个链接 - 它限制了“触发率”,因此事件处理程序仅每 N 毫秒调用一次,即。所以坐标每秒只更新 5-10 次,而不是每秒 250 次(这只是浪费并且可能会减慢您的应用程序)
  • @tsimbalar 这个想法是只在用户活动结束时调用处理程序。例如,如果用户移动鼠标一秒钟,则 mousemove 处理程序在结束时仅调用一次(而不是在鼠标移动期间每 20 毫秒)。
  • @Šime:实际上你所描述的是去抖动;)
  • 太棒了。这就是我喜欢 SO 的原因,这非常有帮助。有没有办法让坐标显示在光标“上方”,实际上是跟随光标?
【解决方案3】:

给你:

HTML:

<img class="coords" src="http://i.imgur.com/bhvpy.png">

JavaScript:

var tooltip = $( '<div id="tooltip">' ).appendTo( 'body' )[0];

$( '.coords' ).
    each(function () {
        var pos = $( this ).position(),
            top = pos.top,
            left = pos.left,
            width = $( this ).width(),
            height = $( this ).height();

        $( this ).
            mousemove(function ( e ) {
                var x, y;

                x = ( ( e.clientX - left ) / width ).toFixed( 1 ),
                y = ( ( height - ( e.clientY - top ) ) / height ).toFixed( 1 );

                $( tooltip ).text( x + ', ' + y ).css({
                    left: e.clientX - 30,
                    top: e.clientY - 30
                }).show();
            }).
            mouseleave(function () {
                $( tooltip ).hide();
            }); 
    });

现场演示: http://jsfiddle.net/pSVXz/12/

使用我更新的代码,您可以拥有多个具有此功能的图像 - 只需将 "coords" 类添加到图像。

注意:此代码必须在 load 处理程序(而不是 ready)处理程序内,因为我们必须读取图像的尺寸,而这只能用于完全加载的图像。

【讨论】:

  • 非常感谢。有没有办法让坐标显示在光标“上方”,实际上是跟随光标?
  • 欣赏它。这是我正在使用的图像:i.imgur.com/bhvpy.png - 我看到坐标取自图像的高度/宽度,并且每个坐标都增加了一个像素。有没有办法“标准化”这一点,例如使用 0-10 的比例,在 x 和 y 轴上都有 0.1 的增量,无论图像大小如何?
猜你喜欢
  • 2018-05-07
  • 1970-01-01
  • 2011-05-20
  • 2022-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-19
相关资源
最近更新 更多