2012-08-09 47 views
2

我嘗試使用Raphael的節點函數來獲取DOM對象併爲上下文菜單添加一個事件處理程序。 但是我需要從DOM對象的事件處理程序中獲取Raphael元素嗎?Raphael JS:如何從Dom對象(Element.node)獲取Raphael元素?

要清楚,示例代碼應該看起來像

var circle = paper.circle(100, 100, 100); 
var domObject = circle.node; 
var ele = domObject.get(0).raphael; // It's required in the domObject's event handler 

有誰知道怎麼能achive呢?

+0

嗨,丹。有沒有什麼特別的原因讓你不使用Raphael的'click','hover'或'mouse *'函數來處理事件?沒有理由不應該自己寫,但我必須警告你,上面描述的模式 - 循環鏈接dom對象和JavaScript對象 - 是內存泄漏的真正祕訣。 – 2012-08-09 16:53:15

+0

我同意凱文......你甚至有在拉斐爾的前夕()功能鏈接自定義事件... – Aukhan 2012-08-09 19:14:08

+0

感謝凱文和奧漢,我試了一下,因爲我想爲拉斐爾元素添加上下文菜單。我試圖使用的上下文菜單(http://www.abeautifulsite.net/blog/2008/09/jquery-context-menu-plugin/)似乎需要一個DOM對象...原諒我的天真的問題,因爲我不熟悉拉斐爾JS或JavaScript。那麼,有沒有什麼好方法爲Raphael Element添加上下文菜單?提前致謝! – Dan 2012-08-10 02:47:58

回答

0

需要很少的額外工作才能直接完成這項工作。假設你有你的jQuery文本菜單資源(JS,CSS,任何圖片)所有可用的和拉斐爾紙paper

var x = 200, y = 200, r = 100, fs = 36; 
var circle = paper.circle(x, y, r).attr({ fill: 'red', 'fill-opacity': 0.5 }); 
var label = paper.text(x, y, "CLICK").attr({ fill: 'white', 'fill-opacity': 0.75, 'font-size': fs, 'font-weight': 800 }); 
var set = paper.set(circle, label); 
$(set.node).contextMenu({ menu: 'myMenu' }); 

你可以看到這個代碼mocked up at my website。上下文菜單有一些問題與我的css衝突,但您可以看到基本功能在那裏。