禁用对象选择上的鼠标事件,并在Fabric JS中清除对象选择后启用它

斯瓦普尼尔·卡卡雷

我有一个应用程序,在画布上单击两次可在mouse:down事件上绘制一个矩形但是我想清除此事件以选择对象和缩放对象,因为当我单击鼠标悬停该对象时,它将开始绘制一个新的矩形。

我尝试清除canvas._eventListeners("mouse:down")=[]用于对象选择的鼠标按下事件,但是清除对象选择后,canvas没有响应任何事件。

<html lang="en" >

<head>

    <meta charset="utf-8" />

    <title>HTML5 canvas - Image color picker | Script Tutorials</title>

    <link href="index.css" rel="stylesheet" type="text/css" />
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.1.0/fabric.all.min.js" ></script>
   <script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 



</head>

<body>
    <div class="container">
    <div class="column1">
        <canvas id="panel" width="700" height="350"></canvas>   
    </div>
    <div style="clear:both;"></div>

</div>
</body>
<script>
    (function() {
        var canvas = new fabric.Canvas('panel');
        var clicks=0;
        var x1=0;var y1=0;

     canvas.on('mouse:down', function(e){
                if (clicks == 0) {
                    var pointer=canvas.getPointer(event.e);
                    console.log(pointer);
                    x1 = pointer.x;
                    y1 =pointer.y;
                    console.log("Pointer Start " +x1 ,y1);
                    clicks++;
                } 
                else 
                {
                    var pointer2=canvas.getPointer();
                    console.log(pointer2);
                    var endx=pointer2.x;
                    var endy=pointer2.y;
                    console.log("Pointer2 End  " +endx ,endy);
                    console.log("x and y"+x1,y1);
                    var newwidth=pointer2.x- x1;
                    var newheight=pointer2.y - y1;

                     var rect=new fabric.Rect({
                            left:x1,
                            top: y1,
                            originX :'left',
                            originY :'top',
                            width:newwidth,
                            height:newheight,
                            selectable: true,
                            evented:false,
                            fill:'red',
                            opacity :0.3

                        });
                    canvas.add(rect);

                    canvas.renderAll();
                    clicks=0;   
                }   
            });


            fabric.Image.fromURL('fedex.jpg', function (img) {
                canvas.add(img.set({
                    width: 700,
                    height:350,
                    left: 350,
                    top: 175,
                    selectable: false,

                }));
            });
    })();

</script>

根据伊扎里斯的说法

您好,您可以在mouse:down上检查目标

  1. 如果e.target == undefined,则意味着您单击画布而不是任何对象,因此创建该对象。
  2. 如果e.target!= undefined,则意味着您单击了一个对象,因此您移动或修改了所选对象等。

我只是将if语句添加到您的mouse:down事件中:

 canvas.on('mouse:down', function(e){

  //check if you clicked on an object that exists canvas
   if(e.target != undefined){

            if (clicks == 0) {
                var pointer=canvas.getPointer(event.e);
                console.log(pointer);
                x1 = pointer.x;
                y1 =pointer.y;
                console.log("Pointer Start " +x1 ,y1);
                clicks++;
            } 
            else 
            {
                var pointer2=canvas.getPointer();
                console.log(pointer2);
                var endx=pointer2.x;
                var endy=pointer2.y;
                console.log("Pointer2 End  " +endx ,endy);
                console.log("x and y"+x1,y1);
                var newwidth=pointer2.x- x1;
                var newheight=pointer2.y - y1;

                 var rect=new fabric.Rect({
                        left:x1,
                        top: y1,
                        originX :'left',
                        originY :'top',
                        width:newwidth,
                        height:newheight,
                        selectable: true,
                        evented:false,
                        fill:'red',
                        opacity :0.3

                    });
                canvas.add(rect);

                canvas.renderAll();
                clicks=0;   
            }   
        });


        fabric.Image.fromURL('fedex.jpg', function (img) {
            canvas.add(img.set({
                width: 700,
                height:350,
                left: 350,
                top: 175,
                selectable: false,

            }));
   }//end if 
        });

希望有帮助,祝你好运。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Fabric js禁用对象取消选择

禁用屏幕上的任何点击,并在一段时间或事件后启用它

在鼠标悬停事件上禁用Morris.js甜甜圈图部分选择

我可以在 Fabric.js 中启用选择/抓取透明对象吗?

在Fabric JS中取消选择对象

画布对象上的Fabric JS事件

Fabric.js-如何在不释放鼠标键的情况下取消选择对象并选择组

Fabric JS右键单击选择对象

通过在鼠标事件中启用和禁用它来在PictureBox中停止和启动gif动画

如何在提交后禁用整个redux表单,然后在清除所有字段后重新启用它

在相同的html canvas元素上放置并创建Fabric画布后,无法选择对象

Extjs DatePicker:如何使用鼠标单击在禁用日期上启用“单击/选择”?

每次更改后从选择元素中清除选择的值

在ListBox上发布选择鼠标单击事件

Vuejs v-for 在选项元素中用于选择输入。从 JSON 对象中获取值,并在选项值中使用它

使用JavaScript禁用鼠标选择

禁用单选按钮后如何启用它?

如何在流星/ javascript中禁用禁用的html元素上的鼠标单击事件

选择jquery typeahead.js后清除文本框

鼠标滚轮事件太快。如何禁用它

Three.js:使用鼠标选择线对象

定位会禁用悬停选择器和鼠标悬停事件

单击禁用的选择元素不会触发其父元素的单击或鼠标按下事件

使用NGXS选择器获取特定对象并在模板中使用它

如何以编程方式选择Fabric.js对象

Fabric JS以编程方式通过ID选择对象

如何启用/禁用JTable上的行选择?

选择 li 上的禁用和启用按钮

如何禁用/重新启用html元素和子元素上的所有单击/触摸/鼠标事件