Javascript 闪存对象上的鼠标悬停事件未触发
我通过在jQuery(文档)范围内工作来实现这个脚本 后来,我在体内添加了一个闪光物体。当我点击flash对象时,mousedown事件被触发,mousemove事件被触发,但mouseup事件没有触发,我想在这里解除mousemove的绑定 但当我点击非Flash区域时,mousedown、mousemove和mouseup都可以工作。它的工作原理就像我希望它在Chrome中一样,但不是在Firefox中 下面是代码,我在Javascript 闪存对象上的鼠标悬停事件未触发,javascript,jquery,flash,jquery-events,Javascript,Jquery,Flash,Jquery Events,我通过在jQuery(文档)范围内工作来实现这个脚本 后来,我在体内添加了一个闪光物体。当我点击flash对象时,mousedown事件被触发,mousemove事件被触发,但mouseup事件没有触发,我想在这里解除mousemove的绑定 但当我点击非Flash区域时,mousedown、mousemove和mouseup都可以工作。它的工作原理就像我希望它在Chrome中一样,但不是在Firefox中 下面是代码,我在$(文档)中调用了handleMouseDown handleMouse
$(文档)中调用了handleMouseDown
handleMouseDown: function () {
jQuery(document).mouseup(function() {
Log("unbind.");
jQuery(document).unbind('mousemove');
});
jQuery(document).mousedown(function(e) {
Log('click');
// You can record the starting position with
var start_x = e.pageX;
var start_y = e.pageY;
jQuery(document).mousemove(function(e) {
// And you can get the distance moved by
var offset_x = e.pageX - start_x;
var offset_y = e.pageY - start_y;
Log('moves') ;
return false;
});
// Using return false prevents browser's default,
// often unwanted mousemove actions (drag & drop)
return false;
});
}
//firebug method log calls
function Log(str) {
if (typeof(console.log) == 'function') console.log(str);
}
这有点难处理
首先,任何flash对象都将捕获所有输入。这意味着任何鼠标或键盘事件都在flash对象内!虽然只有当元素具有焦点时才会捕获键盘输入,但鼠标移动仍会“在”flash对象中发生
其次,我能想到的唯一解决方案是,当mouveUp被触发时,用前景不可见div覆盖所有flash对象。可能有用。。。可能不会,但理论上应该如此。这有点难处理
首先,任何flash对象都将捕获所有输入。这意味着任何鼠标或键盘事件都在flash对象内!虽然只有当元素具有焦点时才会捕获键盘输入,但鼠标移动仍会“在”flash对象中发生
其次,我能想到的唯一解决方案是,当mouveUp被触发时,用前景不可见div覆盖所有flash对象。可能有用。。。可能不会,但理论上应该如此。当鼠标按钮在Flash对象上释放时,您可以将鼠标向上代码放置在一个单独的函数中,该函数可以从JavaScript处理程序调用,也可以从Flash调用外部接口。当然,这只有在您可以编辑Flash源代码的情况下才有效。当鼠标按钮在Flash对象上释放时,您可以将鼠标向上代码放在一个单独的函数中,该函数可以从JavaScript处理程序调用,也可以从Flash调用外部接口调用。当然,这只有在您可以编辑闪存源的情况下才有效。我可以这样解决这个问题:
$('object').live('mousedown', function() {
alert('I was clicked');
});
只有.bind()
没有执行此任务,可能是因为对象是通过swfobject插入的…我可以这样解决此问题:
$('object').live('mousedown', function() {
alert('I was clicked');
});
只有.bind()
没有完成这项工作,可能是因为该对象是通过swfobject插入的…这是一个老问题,但似乎没有有效的答案,所以我只想说一下我是如何解决的,因为它今天仍然是一个问题。虽然mouseup事件似乎不会在flash对象上触发,但一般的“click”事件会触发,如果您跟踪您的“up”和“down”状态,您应该能够使用它来获得您想要的。超级基本示例:
$(document).on("mousedown", function () {
mouseButtonStatus = "down";
});
$(document).on("mouseup", function () {
mouseButtonStatus = "up";
});
// This little bodge gets around the issue with FireFox and the mouseup event
$(document).on("click", function () {
if (mouseButtonStatus === "down"){
mouseButtonStatus = "up";
}
});
不用说适当地定义变量的范围等等。这是一个老问题,但似乎没有一个有效的答案,所以我只说我是如何绕过它的,因为它今天仍然是一个问题。虽然mouseup事件似乎不会在flash对象上触发,但一般的“click”事件会触发,如果您跟踪您的“up”和“down”状态,您应该能够使用它来获得您想要的。超级基本示例:
$(document).on("mousedown", function () {
mouseButtonStatus = "down";
});
$(document).on("mouseup", function () {
mouseButtonStatus = "up";
});
// This little bodge gets around the issue with FireFox and the mouseup event
$(document).on("click", function () {
if (mouseButtonStatus === "down"){
mouseButtonStatus = "up";
}
});
不用说适当地定义变量的范围等等。另一个解决方案是使用MouseEvent.buttons
属性,该属性是特定于Firefox的,因为它是Firefox的一个怪癖。例如,此属性在Safari中不可用。以下是检测是否按下左按钮的代码,注意touchmove
检查以避免触发触摸设备:
if ( e.buttons != 'undefined' && e.type != 'touchmove' && !(e.buttons & 1 ) )
bMouseDown = false;
另一个解决方案是使用MouseEvent.buttons
属性,该属性是特定于Firefox的,因为它是Firefox的一个怪癖。例如,此属性在Safari中不可用。以下是检测是否按下左按钮的代码,注意touchmove
检查以避免触发触摸设备:
if ( e.buttons != 'undefined' && e.type != 'touchmove' && !(e.buttons & 1 ) )
bMouseDown = false;
它的工作原理就像我希望它在铬。但不是在firefox中,它的工作方式就像我在chrome中希望的那样。但不是在firefox中。我也在考虑这样做。这将是我最后的选择,我也在考虑这样做。这是我最后的选择