编程语言
首页 > 编程语言> > javascript – 隐藏Raphael JS Freetransform上的句柄,但继续拖动?

javascript – 隐藏Raphael JS Freetransform上的句柄,但继续拖动?

作者:互联网

嗨,我正在开发一个新项目,需要使用Raphael JS和插件Raphael.Freetransform.到目前为止,该插件工作得非常好,非常顺利.但是,通过使用hideHandles()方法,它似乎也禁用任何形式的对象拖动.

这是一个错误还是一个设计选择?一旦隐藏其手柄,是否需要重新启用对元素的拖动?我试过设置.为了在不使用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/

如您所见,我只是使用按钮的单击处理程序来显示和隐藏句柄.我之后需要一个额外的步骤吗?

提前致谢,
康纳尔

解决方法:

想出这个.您可以简单地调用{drag:true | false},{scale:true | false}和{rotate:true | false}的组合,而不是调用.hideHandles()和.showHandles().

例如

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

标签:drag,javascript,jquery,transform,raphael
来源: https://codeday.me/bug/20190901/1786710.html