Javascript 使用Raphaeljs停止拖放事件

Javascript 使用Raphaeljs停止拖放事件,javascript,dom-events,raphael,Javascript,Dom Events,Raphael,我试图用Raphaeljs模拟iPhone上的刷卡事件。 为此,我使用拖放事件 若要在中模拟事件,请在“移动”事件中使用一种方法来计算我的对象与鼠标位置之间的距离。如果鼠标超过该距离,我想停止拖放事件。这就是我被困的地方 代码如下: var start = function (event) { }, move = function (event) { inrange = self.inRange (circle.attr("cx"), circle.attr(&

我试图用Raphaeljs模拟iPhone上的刷卡事件。 为此,我使用拖放事件

若要在中模拟事件,请在“移动”事件中使用一种方法来计算我的对象与鼠标位置之间的距离。如果鼠标超过该距离,我想停止拖放事件。这就是我被困的地方

代码如下:

var start = function (event) {
  },
  move = function (event) {
   inrange = self.inRange (circle.attr("cx"), circle.attr("cy"), event.pageX, event.pageY); 
      if(inrange == false){
         //Stop draging!
      }
   
  },
  up = function () {
    circle.animate({ r: 40, "stroke-width": 1 }, 200);
  };
  circle.drag(move, start, up);
在move方法中,我需要停止拖动事件或模拟一个
mouseup
。我如何才能这样做?

来自:

要解除绑定事件,请使用前缀为“un”的相同方法名称,即element.unclick(f)

要取消绑定拖动,请使用“取消拖动”方法

所以我认为
circle.undrag()应该可以工作。

来自:

要解除绑定事件,请使用前缀为“un”的相同方法名称,即element.unclick(f)

要取消绑定拖动,请使用“取消拖动”方法


所以我认为
circle.undrag()应该可以工作。

如果可以包含jQuery,可以在“mouseup”中使用。如果不能包含jQuery,可以查看源代码并取消该函数

更新

经过短暂的谷歌搜索,我发现了这个实现。但仅在Chrome中测试:

function fireEvent(element,event){
  if (document.createEventObject){
    // dispatch for IE
    var evt = document.createEventObject();
    return element.fireEvent('on'+event,evt)
  } else{
    // dispatch for firefox + others
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent(event, true, true ); // event type,bubbling,cancelable
    return !element.dispatchEvent(evt);
  }
}

如果您可以包含jQuery,那么您可以在“mouseup”上使用它。如果您不能包含jQuery,那么您可以只查看源代码并提升该函数

更新

经过短暂的谷歌搜索,我发现了这个实现。但仅在Chrome中测试:

function fireEvent(element,event){
  if (document.createEventObject){
    // dispatch for IE
    var evt = document.createEventObject();
    return element.fireEvent('on'+event,evt)
  } else{
    // dispatch for firefox + others
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent(event, true, true ); // event type,bubbling,cancelable
    return !element.dispatchEvent(evt);
  }
}

@Gregory您可以使用JS闭包来检测圆是否需要停止拖动。而@apphacker在拉斐尔有一个阻止undrag工作的漏洞。它计划在2.0版本中修复,但到目前为止还没有发布日期(而且这个bug在测试版代码中也没有修复,尽管有人说已经修复了)

我建议按照@floyd的建议,使用jQuery手动实现mousedown、mouseup和mousemove事件,并在move函数中添加一个JS闭包检查,查看是否需要停止拖动圆。”


我还想到,你最初的帖子最后一次编辑是在11月10日,所以你可能从那以后就继续了;)

@Gregory你可以使用JS闭包来检测圆圈是否需要停止拖动。而@apphacker在拉斐尔有一个阻止undrag工作的漏洞。它计划在2.0版本中修复,但到目前为止还没有发布日期(而且这个bug在测试版代码中也没有修复,尽管有人说已经修复了)

我建议按照@floyd的建议,使用jQuery手动实现mousedown、mouseup和mousemove事件,并在move函数中添加一个JS闭包检查,查看是否需要停止拖动圆。”


我还想到,你原来的帖子最后一次编辑是在11月10日,所以你可能从那时开始继续;)

你正试图立即阻止
圆圈被进一步拖动-对吗?你介意贴一个显示你当前代码的标签吗?这是Hm,我不能说我理解它应该做什么和它现在正在做什么。我已经添加了几行。在取消范围的条件下,它必须停止移动事件,因为在我的真实代码中,我从鼠标的最后一个位置计算内容。您正在尝试立即停止进一步拖动
-对吗?您介意显示当前代码吗?这是Hm,我不能说我理解它应该做什么和它现在正在做什么。我已经添加了几行。在取消范围的条件下,它必须停止移动事件,因为在我的真实代码中,我从鼠标的最后一个位置计算东西。我已经看过文档,并尝试过这个方法,但似乎不起作用。是的,根据@Gregory的评论。这将停止将来的拖动事件触发。这不会导致当前拖动停止。那么event.preventDefault()可能会阻止项目进一步移动,用户将放弃拖动。@apphacker查看我的答案-RaphaelI中有一个已知的undrag错误。我已经查看了文档,并尝试了此方法,但似乎不起作用。是的,根据@Gregory的评论。这将停止将来的拖动事件触发。这不会导致当前拖动停止。那么event.preventDefault()会不会阻止项目进一步移动,用户会放弃拖动。@apphacker请看我的答案-Raphael中有一个已知的undrag错误