javascript - 如何检测 Fabric js 动画对象上的鼠标按下事件

标签 javascript jquery animation fabricjs

我正在使用 Fabric.js,目的是检测动画对象上的鼠标按下事件。目前图像正在从下到上进行动画处理,当我按下鼠标时,它只显示坐标,但不会检测到单击对象。

我还注意到,当图像开始动画时,只有这样我才能单击/选择它们,之后它们就变得不可选择

这是一个jsfiddle代码演示。请检查并提出建议。

我的 html 是:

 <h3>Hello Fabric</h3>
    <div class="mainCanvasContainer">
        <canvas class="mainCanvas" id="mycanvas" width="500px" height="400px"></canvas>
    </div>
    <div id='info'>

    </div>

现在这是我的 Javascript:

 $(document).ready(function () {
            var canvas_id = 'mycanvas';

            function showInfo(text){
                $('#info').append('<div> '+text+' </div>');
            }


            (function () {
                var canvas = this.__canvas = new fabric.Canvas(canvas_id, {selection: false});
                fabric.Object.prototype.originX = fabric.Object.prototype.originY = 'center';

                canvas.on('mouse:down', function (options) {
                    if (options.target) {
                       showInfo('an object was clicked! ', options.target.type);
                    }
                    var cor=options.e.clientX+','+ options.e.clientY;
                     showInfo(cor);
                });


                setInterval(function () {
                    fabric.Image.fromURL('http://www.rashflash.com/fabricjs_animation/img.png', function (img) {
                        img.scale(0.2);
                        //img.set('left', fabric.util.getRandomInt(100, 400)).set('top', 450);
                        //img.movingLeft = !!Math.round(Math.random());

                        var text = new fabric.Text('hello', {
                            fontSize: 30,
                            originX: 'center',
                            originY: 'center'
                        });

                        var group = new fabric.Group([img, text]);
                        group.set('left', fabric.util.getRandomInt(100, 400)).set('top', 420);                           
                        canvas.add(group);
                    });

                }, 1000);

                (function animate() {
                    canvas.forEachObject(function (obj) {
                        if (!obj) {
                            return;
                        }
                        // obj.left += (obj.movingLeft ? -1 : 1);
                        obj.top -= 1;
                        if (obj.left > 500 || obj.top < 0) {
                            canvas.remove(obj);
                        }                           
                    });
                    canvas.renderAll();

                      fabric.util.requestAnimFrame(animate);
                })();                   
            })();


        });

最佳答案

RashFlash,您在制作动画时缺少 setCoords() 函数。

更新了动画功能:

(function animate() {
                        canvas.forEachObject(function (obj) {
                            if (!obj) {
                                return;
                            }
                            // obj.left += (obj.movingLeft ? -1 : 1);
                            obj.top -= 1;
                            if (obj.left > 500 || obj.top < 0) {
                                canvas.remove(obj);
                            }                 
                            obj.setCoords();
                        });
                        canvas.renderAll();

                          fabric.util.requestAnimFrame(animate);
                    })();                   
                })();

此外,已更新 fiddle

关于javascript - 如何检测 Fabric js 动画对象上的鼠标按下事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42018321/

相关文章:

javascript - 带 rgb() 的正则表达式

javascript - 如何使用 AJAX 对选择选项执行 PHP 查询?

用于按下网页上特定按钮的 JavaScript 代码

android - 如何在android中从下到上动画弹出窗口

android - 在android中显示和隐藏 View 动画

animation - THREE.JS 如何移动 SkinnedMesh 的骨骼?

javascript - JS : Clicking on a object from array

javascript - 使用 FaceBook Javascript SDK 时遇到问题,无法访问 UI

javascript - 根据 for 循环中的值对嵌套 Json 对象进行排序?

javascript - 为什么我无法检索此 JavaScript\JQuery 函数中 select 标签的内容?