禁用对象选择上的鼠标事件,并在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条评论
登录后参与评论

相关文章

来自分类Dev

Fabric js禁用对象取消选择

来自分类Dev

使用Fabric.js启用和禁用画布的鼠标事件

来自分类Dev

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

来自分类Dev

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

来自分类Dev

在Fabric JS中取消选择对象

来自分类Dev

使用Fabric.js选择画布上的所有对象

来自分类Dev

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

来自分类Dev

从JS内存中清除对象

来自分类Dev

Fabric JS右键单击选择对象

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

如何在更改或选择事件上禁用多选?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

GWT中文鼠标选择事件

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

如何在fabric.js中选择和拖动对象

来自分类Dev

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

来自分类Dev

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

Related 相关文章

  1. 1

    Fabric js禁用对象取消选择

  2. 2

    使用Fabric.js启用和禁用画布的鼠标事件

  3. 3

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

  4. 4

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

  5. 5

    在Fabric JS中取消选择对象

  6. 6

    使用Fabric.js选择画布上的所有对象

  7. 7

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

  8. 8

    从JS内存中清除对象

  9. 9

    Fabric JS右键单击选择对象

  10. 10

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

  11. 11

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

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

    如何在更改或选择事件上禁用多选?

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

    GWT中文鼠标选择事件

  21. 21

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

  22. 22

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

  23. 23

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

  24. 24

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

  25. 25

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

  26. 26

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

  27. 27

    如何在fabric.js中选择和拖动对象

  28. 28

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

  29. 29

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

热门标签

归档