Прекратить перетаскивание события с Raphaeljs - PullRequest
1 голос
/ 04 ноября 2010

Я пытаюсь смоделировать событие смахивания с iphone с Raphaeljs. Для этого я использую событие перетаскивания.

Для имитации события в есть метод в событии перемещения, который вычисляет расстояние между моим объектом и положением мыши. Если мышь проходит после этого расстояния, я хочу остановить событие перетаскивания. Вот где я застрял.

Вот код:

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);

В методе перемещения мне нужно остановить событие перетаскивания или смоделировать мышиный рисунок. Как я могу это сделать?

Грег

Ответы [ 3 ]

3 голосов
/ 04 ноября 2010

Из документации :

Для отмены привязки событий используйте те же имена методов с префиксом «un», т.е. element.unclick (f);

и

Чтобы отсоединить перетаскивание, используйте метод undrag.

Поэтому я думаю, circle.undrag(); должно работать.

1 голос
/ 02 августа 2011

@ Грегори Вы можете использовать JS замыкание, чтобы определить, нужно ли прекращать перетаскивание круга. И у @apphacker есть известная проблема в Рафаэле, которая не дает работать недоразвитию. Его планируется исправить в 2.0, но у него пока нет даты выпуска (и ошибка не исправлена ​​в бета-коде, несмотря на то, что в заявке говорится, что это так.

Я рекомендую вручную реализовывать события mousedown, mouseup и mousemove, используя jQuery, в соответствии с рекомендацией @ floyd, и добавить проверку закрытия JS в вашу функцию перемещения, чтобы увидеть, нужно ли прекращать перетаскивание круга или нет. '

Мне также кажется, что ваше оригинальное сообщение последний раз редактировалось в ноябре '10, так что вы, возможно, с тех пор продолжили;)

0 голосов
/ 11 декабря 2010

Если вы можете включить jQuery, вы можете использовать триггер для "mouseup". Если вы не можете включить jQuery, просто взгляните на источник и поднимите эту функцию?

UPDATE

После недолгих поисков я наткнулся на эту реализацию. Проверено только в 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);
  }
}
...