Javascript 闪存对象上的鼠标悬停事件未触发

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

我通过在jQuery(文档)范围内工作来实现这个脚本

后来,我在体内添加了一个闪光物体。当我点击flash对象时,mousedown事件被触发,mousemove事件被触发,但mouseup事件没有触发,我想在这里解除mousemove的绑定

但当我点击非Flash区域时,mousedown、mousemove和mouseup都可以工作。它的工作原理就像我希望它在Chrome中一样,但不是在Firefox中

下面是代码,我在
$(文档)中调用了
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中。我也在考虑这样做。这将是我最后的选择,我也在考虑这样做。这是我最后的选择