2012-11-27 162 views
0

我想要一种跨浏览器的现代方式从一个html元素中获取鼠标事件并将其传递给另一个。Javascript,传递鼠标事件

例如。

el1.addEventListener('mousemove', function(e) { 
    el2.trigger('mousemove', e); 
}); 

el2.addEventListener('mousemove', function(e) { 
    //THIS SHOULD BE CALLED WHEN EITHER el1 
}); 

一个jquery解决方案是好的,但我更喜欢非jQuery的解决方案。这很简单吗?

+0

你的事件监听器代码已经限制在现代浏览器中,只有 – Esailija

+0

好点,只是试图解释这个问题。 – asutherland

回答

2

下面是正确的代码

var el1 = document.getElementById('el1'); 
var el2 = document.getElementById('el2'); 

el1.onmousemove = function(e) { 
    alert('el1 event'); 
    el2.onmousemove(e); 
}; 
el2.onmousemove = function(e) {  
    alert('el2 event'); 
}; 

demo

如果您希望将事件参数e传递给el2的事件,这很好。更新后的demo显示传递的鼠标位置。

0

如果你接受一个jQuery的答案,然后下面的代码:

// el1 and el2 are the jQuery objects of the DOM elements 
el1.mousemove(function (event) { 
    el2.mousemove(event); 
}); 

在纯javascript:

el1.onmousemove = function(e) { 
    el2.onmousemove('mousemove', e); 
}; 

el2.onmousemove = function(e) { 

}; 
+0

'element.trigger()'不是一个有效的方法。这是jQuery专有功能。它会在答案的第一部分更好地发挥作用,dispatchEvent是本地DOM api方法。 – rlemon

+0

@rlemon好点,我复制粘贴我给的jQuery代码,并忘记改变它。这是固定的感谢注意 –

0
el1.addEventListener('mousemove', handler, false); 
el2.addEventListener('mousemove', handler2, false); 
function handler(e) { 
    // do some stuff 
    handler2.call(el2, e); // pass el2 as this reference, event as the argument. 
}; 

也不太清楚,如果这是你在找什么,只是名称事件处理程序并触发另一个事件。

如果您不需要在第二个处理程序中引用this,请改为使用handler2(e);

进一步读数:
Function.prototype.call

Here is a half-baked demo使鼠标事件参数。我不确定layerX/Y的支持程度如何,我只是用它来显示演示。

0

本地工作应该像那

var evt; 
el1.onmousemove = function() { 
    evt = document.createEvent('MouseEvent'); 
    evt.initEvent('mousemove', true, true); 
    el2.dispatchEvent(evt); 
} 

您可以在这里element.dispatchEvent读了:
https://developer.mozilla.org/en-US/docs/DOM/element.dispatchEvent

+0

好,我喜欢这个。我没有记得dispatchEvent;) – rlemon

+0

你怎么把鼠标坐标变成事件?所以你可以通过它们。 – asutherland

+0

@ user959986您可以在我的更新演示中看到。 –