使用 Syn.js 的事件侦听器未触发鼠标事件
Mouse events not fired by event listener using Syn.js
我正在尝试让 Syn.js 进行编程鼠标移动以在我的应用程序的规格中使用。
我需要跟踪和测试mouseenter
和mouseleave
。制作了一个简单的规范,但无法使其工作,没有触发任何事件。
任何指向我可能缺少什么的指示? 或者如何使事件着火?
我的测试用例:
(js小提琴:http://jsfiddle.net/g1wjkjw5/)
.JS
document.getElementById('target').addEventListener('mouseenter', log);
document.getElementById('target').addEventListener('mouseleave', log);
var events = {};
function log(e) {
console.log(e.type); // never fires... :/
events[e.type] = true;
}
setTimeout(function () {
syn.move({
from: {clientX: 400, clientY: 400},
to: {clientX: 50, clientY: 50},
duration: 1000
}, document.body);
console.log('Syn fired');
}, 200);
setTimeout(function () {
console.log(events); // this gets empty
}, 2000);
.CSS
div#target {
background: #ccf;
border: 1px solid black;
}
.HTML
<script src="https://rawgit.com/bitovi/syn/master/dist/syn.js"></script>
<div id="target" style="float: left; padding: 100px;"></div>
Mozilla可能不会让你
查看 Syn.js 源代码,您追求的事件根本不是模拟的。
jQuery做了其他人的建议
请记住,最初鼠标进入/离开是 Internet Explorer 专有的,并且 jQuery 模拟了它。它只是最近才变得无处不在。1 2
这是一个使用修改后的 Syn 的 jsfiddle .js来实现您所要求的。
只需更改事件名称:
if (last !== el && el && last) {
var options = syn.helpers.extend({}, point);
options.relatedTarget = el;
syn.trigger(last, 'mouseleave', options);
options.relatedTarget = last;
syn.trigger(el, 'mouseenter', options);
}
试试这个
document.getElementById('target').addEventListener('mouseover', function(){
console.log('mouse inside');
});
document.getElementById('target').addEventListener('mouseout', unction(){
console.log('mouse left');
});
var events = {};
setTimeout(function () {
syn.move({
from: {clientX: 600, clientY: 300},
to: {clientX: 50, clientY: 50},
duration: 1000
}, document.body);
console.log('Syn fired');
}, 200);
setTimeout(function () {
console.log(events);
}, 2000);
根据他们的文档,syn 库会触发事件mouseover
并mouseout
悬停事件:
document.getElementById('target').addEventListener('mouseover', log);
document.getElementById('target').addEventListener('mouseout', log);
小提琴:
http://jsfiddle.net/g1wjkjw5/2/
如果您确实想将这些事件记录为 mouseenter/mouseleave ,则可以在日志函数中转换这些事件
function log(e) {
if (e.type == "mouseover") {
events["mouseenter"] = true
} else if (e.type == "mouseout") {
events["mouseleave"] = true
} else {
events[e.type] = true;
}
}
http://jsfiddle.net/g1wjkjw5/4/
编辑:
为了捕获实际的mouse[enter|leave]事件,您可以捕获鼠标悬停/mouseout事件并将它们转换为正确的事件对象:
document.getElementById('target').addEventListener('mouseover', transformEvent);
document.getElementById('target').addEventListener('mouseout', transformEvent);
function transformEvent(e) {
var newEvent = false;
if (e.type == "mouseover") {
newEvent = "mouseenter";
} else if (e.type == "mouseout") {
newEvent = "mouseleave";
}
if (newEvent) {
e.stopImmediatePropagation();
e.preventDefault();
var event = new MouseEvent(newEvent, {
'view': window,
'bubbles': true,
'cancelable': true
});
e.toElement.dispatchEvent(event);
}
}
http://jsfiddle.net/g1wjkjw5/8/
相关文章:
- JsFiddle上的鼠标事件不起作用
- 鼠标悬停事件影响列表中所有行中的按钮,而不仅仅是特定按钮
- node-webkit-从父窗口捕获iframe鼠标事件
- 如何在jquery中找到鼠标滚轮/触摸移动事件的走向
- 如何查明鼠标按下事件是否发生在滚动条上或元素中的其他任何位置
- 鼠标事件在OpenLaszlo应用程序中不起作用
- 为画布绘图添加鼠标事件
- 如何在元素中处理鼠标事件,但不能在其子元素上处理
- KineticJS鼠标事件问题
- 捕获鼠标关闭事件并在 Mozilla 中获取 clientX 和 clientY
- D3.js:如何在svg上移动鼠标时创建弹出事件
- 如果鼠标在元素上快速移动和关闭,则防止.hoop事件被垃圾邮件发送
- 如何在asp:linkButton上显示鼠标悬停事件上的图像
- GWT-允许鼠标事件在两个叠加画布之间传播
- 为什么不是't html<对象>元素响应鼠标事件
- 如何恢复Kinetic.js鼠标事件
- 鼠标事件's在CtrlKey不起作用的情况下单击
- 必须更改单击事件鼠标输入鼠标输出事件
- 当一个标记位于打开的infobox -事件鼠标悬停与infobox插件谷歌地图API v3
- 带有按钮的鼠标事件:鼠标悬停、onclick、静态