Raphael JS: как удалить события?

Я использую события Raphael .mouseover() и .mouseout(), чтобы выделить некоторые элементы в моем SVG. Это отлично работает, но после того, как я нажму на элемент, я хочу, чтобы он перестал выделяться.

В документации Raphael я нашел:

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

но я не могу заставить это работать, и я также не понимаю параметр «f».

Это не работает, но что делать??

obj.click( function() {
  this.unmouseover();
});

person Dylan    schedule 11.06.2011    source источник
comment
Я надеюсь, что из 40 вопросов более 57% дали правильные ответы, которые можно было бы отметить как правильные. :)   -  person Jared Farrish    schedule 11.06.2011
comment
Нет, в документации сказано, что вы можете использовать 'un' для отмены привязки этих событий... но это не работает, или я делаю что-то не так... Я еще раз проверю свои вопросы, чтобы выбрать правильные ответы, но большинство на них действительно еще не полностью ответили, я думаю....   -  person Dylan    schedule 11.06.2011
comment
Если у вас есть куча вопросов, на которые есть ответы, но ни один из них не является правильным, вы можете пересмотреть то, как вы задаете вопросы, являются ли они ясными и краткими, и не слишком ли они локализованы, чтобы на них можно было успешно ответить. :)   -  person Jared Farrish    schedule 11.06.2011
comment
Кроме того, если вы предоставите fiddle.net свою проблему, это, вероятно, поможет.   -  person Jared Farrish    schedule 11.06.2011
comment
Я думаю, что просто сталкиваюсь с трудными проблемами, с которыми я не могу жить, в то время как другие принимают их как обычное раздражение... я не собираюсь принимать "просто жить с этим" как хороший ответ... проверьте мои непомеченные вопросы , там нет настоящих ответов... и я думаю, что в моей манере спрашивать нет ничего плохого, хотя английский не мой родной язык...   -  person Dylan    schedule 11.06.2011
comment
Я думаю, что fiddle.net - неправильный адрес :) (я не особо увлекаюсь скрипичной музыкой :)   -  person Dylan    schedule 11.06.2011
comment
Я думаю, что это своего рода глушение. :P Попробуйте: jsfiddle.net/GexHj   -  person Jared Farrish    schedule 11.06.2011
comment
Извините, это не работает. Даже если я изменю событие наведения мыши на наведение. Это «не» вообще работает в Рафаэле? Я не вижу, чтобы кто-нибудь здесь использовал это...   -  person Dylan    schedule 11.06.2011
comment
Нет, эта скрипка предназначена для демонстрации вашей проблемы, а не для ее решения. Смотрите мой ответ ниже. :)   -  person Jared Farrish    schedule 11.06.2011


Ответы (1)


Хорошо, вам нужно передать функцию обработчика unmouseover запросу:

// Creates canvas 320 × 200 at 10, 50
var paper = Raphael(10, 50, 320, 200);
// Creates circle at x = 50, y = 40, with radius 10
var circle = paper.circle(50, 40, 10);
// Sets the fill attribute of the circle to red (#f00)
circle.attr("fill", "#f00");
// Sets the stroke attribute of the circle to white
circle.attr("stroke", "#fff");

var mouseover = function (event) {
    this.attr({fill: "yellow"});
}
var mouseout = function (event) {
    this.attr({fill: "red"});
}

circle.hover(mouseover, mouseout);
circle.click(function (event) {
    this.attr({fill: "blue"});
    this.unmouseover(mouseover);
    this.unmouseout(mouseout);
});

http://jsfiddle.net/GexHj/1/

Вот о чем f. Вы также можете использовать unhover():

circle.click(function (event) {
    this.attr({fill: "blue"});
    this.unhover(mouseover, mouseout);
});

http://jsfiddle.net/GexHj/2/

person Jared Farrish    schedule 11.06.2011
comment
Отлично, большое спасибо! Даже теперь он работает с массивом объектов, где я использую событие mouseout как «свойство» каждого объекта... - person Dylan; 11.06.2011
comment
Вопрос по этому старому ответу: вызов this.unmouseout(mouseout); кажется, полагается на имя функции, которое вы изначально связали с помощью мыши, верно? Так что я мог бы вызвать функцию myFunc и развязать ее с помощью unmyFunc, верно? Но это кажется ужасным для любой минимизации кода, не так ли? Нет никакой гарантии, что если myFunc будет свернута до xy, то unmyFunc будет свернута до unxy. Я что-то упускаю? - person Sam Fen; 25.07.2012
comment
mouseout на самом деле является ссылкой на функцию, а не строковым значением. Теоретически, поскольку передача функции по ссылке является частью нормального поведения в Javascript, агрессивная минификация должна идентифицировать и заменить ссылку на функцию, а также объявление метки идентификатора функции. Мой ответ без каких-либо испытаний, у вас не должно быть проблем. Если вы найдете конкретный тест с определенным минификатором, сообщите мне об этом. - person Jared Farrish; 25.07.2012