1

我试图更好地理解事件属性 clientX 和 clientY 的用法。

当鼠标指针移过特定 div 时,我需要找到鼠标指针的顶部和左侧偏移量。projectImage(x) 函数附加到 div 的 onmouseover 上。x 是一个函数参数,基于它可以确定特定图像的 URL。

现在。clientX 是鼠标悬停事件发生时指针的左偏移量,所以我可以为 event.clientX 中的事件输入什么

下面的函数不起作用(由 JS 控制台报告为未定义)我认为是因为前两行中的语法错误。

function projectImage(x)
{

// Should the 1st two lines (right hand side) be x.clientY and x.clientX, 
// x is a function argument not event relevant to the pointer offset though

    var toffset = x.clientY ; // help_me_here.clientY

    var loffset = x.clientX ; // Event_Identifier_??.cleintX    

    var picdiv = document.getElementById("picdiv") ;
    picdiv.style.position = "absolute" ;
    picdiv.style.left = loffset + "px" ;
    picdiv.style.top = toffset + "px" ; 
    picdiv.innerHTML = "<img src='" + "http://imageServer.com/" + x.split("|")[1] + "' width='30px' />" ;

    picdiv.style.visibility = "visible";

}
4

2 回答 2

2

您所要做的就是将事件对象传递给函数(也许重构一下参数):

<div onmouseover="projectImage(event || window.event, 'Joey', 123);"> Joey </div>

event || window.event需要,因为 IE 没有将事件对象作为参数传递给事件处理程序,因此必须通过window.

还要更改您的函数以能够访问这些参数:

function projectImage(event, name, id) {
    var toffset = event.clientY;
    var loffset = event.clientX;

    var picdiv = document.getElementById("picdiv") ;
    picdiv.style.position = "absolute" ;
    picdiv.style.left = loffset + "px" ;
    picdiv.style.top = toffset + "px" ; 
    picdiv.innerHTML = "<img src='http://imageServer.com/" + id + "' width='30px' />" ;

    picdiv.style.visibility = "visible";
}

使用有意义的变量名有助于更容易理解代码。

于 2012-12-27T16:02:44.653 回答
1

正如@FelixKling 提到的,您应该传递事件对象。

我建议切换到addEventListener/而不是使用内联事件,我在这里attachEvent为您设置了一个示例。

var x = document.getElementById('x');
var y = document.getElementById('y');
document.getElementById('test').addEventListener('mousemove', function(e){
    x.innerHTML = 'X: ' + e.clientX;
    y.innerHTML = 'Y: ' + e.clientY;
});​

但是,如果您对内联事件一无所知,您可以通过<div onmouseover="projectImage(event,'Joey|123');"> Joey </div>

于 2012-12-27T16:01:13.297 回答