2012-08-07 16 views
3

嗨我正在開發一個新項目,需要使用Raphael JS和插件Raphael.Freetransform。到目前爲止,該插件工作得非常好,非常順利。但是,通過使用hideHandles()方法,它似乎也禁用任何形式的對象拖動。在Raphael JS Freetransform上隱藏句柄,但繼續拖動?

這是一個錯誤或設計選擇?當我隱藏其手柄後,是否需要重新啓用拖動元素?我試圖設置。有沒有什麼特別的,我需要做的,以便使一個元素可以拖動而不使用Freetransform插件?

這裏是我的代碼:

paper = new Raphael("container", "1680", "1005"); 
setA = paper.set(); 
circle = paper.circle(50, 50, 50); 
circle.attr("fill", "#f00"); 
circle.attr("stroke", "#000"); 
notif = paper.circle(50, 50, 50); 
notif.attr({ "fill": "r(0.5, 0.5) #fff-#f00", "fill-opacity": 1 }); 
lbl = paper.text(50, 50, "Label").attr({fill: '#000000'}); 
setA.push(circle); 
setA.push(notif); 
setA.push(lbl); 

setA.click(function(){ 
    console.log('clicked'); 
}); 

setA.hover(
    // over // 
    function(){ console.log('over'); }, 
    // out // 
    function(){ console.log('out'); } 
); 

setA.drag(
    //onmove 
    function(){ 
     console.log('object moving'); 
    }, 
    //onstart 
    function(){ 
     console.log('start drag'); 
    }, 
    //onend 
    function(){ 
     console.log('end drag'); 
    } 
); 

ft = paper.freeTransform(setA, { drag: true, keepRatio: true, draw: [ 'bbox', 'circle' ] }, function(ft, events) { /*console.log(ft.attrs);*/ }); 

$('#guideBtn').click(function(){ 
    if ($('#guideBtn').text().indexOf('Show') > -1){ ft.showHandles(); $('#guideBtn').text('Hide Guide'); } 
    else{ ft.hideHandles(); $('#guideBtn').text('Show Guide'); } 
}); 

,這裏是到freetransform工具的鏈接:https://github.com/ElbertF/Raphael.FreeTransform/

正如你所看到的,我只是用一個按鈕的點擊處理程序來顯示和隱藏把手。在此之後我需要額外的步驟嗎?

由於提前, 康納爾

回答

5

想通了這一點。而不是調用.hideHandles()和.showHandles(),你可以簡單地調用的組合{阻力:真|假},{規模:真|假}和{旋轉:真|假}

例如

circle.setOpts({drag:'self', scale:false, rotate:false, draw:false}); 
circle.setOpts({drag:'self', scale:true, rotate:true, draw: [ 'bbox', 'circle' ]}); 
+0

謝謝,它的工作! :-) – 2013-07-26 13:36:21