JS 文件中的 Javascript 函数不会从画布中调用

Posted

技术标签:

【中文标题】JS 文件中的 Javascript 函数不会从画布中调用【英文标题】:Javascript function from a JS file doesn't get called from the canvas 【发布时间】:2017-01-01 08:45:28 【问题描述】:

我正在尝试学习 javascripthtml5 画布,但是,事实证明它有点令人困惑,我不明白为什么它似乎不起作用...

我正在创建一个简单的地图,它具有谷歌地图的一些功能(拖放/放大/缩小/等)。为了做到这一点,我选择了 html5 canvas 和 easeljs 来实现拖放功能。

我有一个包含 2 个函数的 javascript 文件 (path.js):

pathConstructor() - 来自 easeljs 教程的示例函数

drawMap() - 第一个函数的副本稍作修改(现在可能是错误的)

当我从画布调用 pathConstructor() 时,一切正常,但是,在我用 drawMap() 替换它之后,一切都停止了。如果我现在用 pathContrcutor() 替换 drawMap() 甚至都行不通。

我在从画布调用函数之前和之后以及在 pathConstructor() 内部放置了一些警报。之前的警报会响起,但由于某种原因,其他警报不会响起,该函数永远不会被调用...

如果我在画布中使用 pathConstructor 代码作为内联代码,那么它工作得很好,但是,我想避免这种情况,因为我认为这是糟糕的编程。我希望它整洁,每个脚本都有自己的文件。

有人知道为什么会这样吗?

HTML

<!Doctype html>
<html>
<head>
    <script src="http://code.createjs.com/easeljs-0.7.0.min.js"></script>
    <script src="path.js" type="text/javascript"></script>
</head>
<body>
    <canvas id="canvas"  style="border:1px dotted black;">
        <script>pathConstructor();</script>
    </canvas>
</body>
</html>

Javascript

var stage;
function pathConstructor() 
    alert('inside pathConstructor');
    stage = new createjs.Stage('canvas');
    // this lets our drag continue to track the mouse even when it leaves the canvas:
    // play with commenting this out to see the difference.
    stage.mouseMoveOutside = true;
    var circle = new createjs.Shape();
    circle.graphics.beginFill("red").drawCircle(0, 0, 50);
    var label = new createjs.Text("drag me", "bold 14px Arial", "#FFFFFF");
    label.textAlign = "center";
    label.y = -7;
    var dragger = new createjs.Container();
    dragger.x = dragger.y = 100;
    dragger.addChild(circle, label);
    stage.addChild(dragger);
    dragger.on("pressmove", function(evt) 
        // currentTarget will be the container that the event listener was added to:
        evt.currentTarget.x = evt.stageX;
        evt.currentTarget.y = evt.stageY;
        // make sure to redraw the stage to show the change:
        stage.update();
    );
    stage.update();

function drawMap() 
    stage = new createjs.Stage('canvas');
    var bitMap = new createjs.Bitmap('middle-earth-map.jpg');
    stage.mouseMoveOutside = true;
    var dragger = new createjs.Container();
    dragger.x = dragger.y = 0;
    dragger.addChild(bitMap);
    stage.addChild(dragger);
    dragger.on('pressmove', function(evt2)) 
        evt2.currentTarget.x = evt2.stageX;
        evt2.currentTarget.y = evt2.stageY;
        stage.update();
    );
stage.update();

【问题讨论】:

【参考方案1】:

对我来说它工作正常,您只需删除 dragger.on('pressmove', function(evt2)) 中多余的“)”;

dragger.on('pressmove', function(evt2)) 
    evt2.currentTarget.x = evt2.stageX;
    evt2.currentTarget.y = evt2.stageY;
    stage.update();
);

【讨论】:

现在一切正常,谢谢!如何对 JavaScript 进行故障排除?我尝试使用 try catch() 但这似乎无济于事。如果有错误,它甚至不会进入我所看到的函数 你的错字很不幸,因为它创建了完全合法的代码。您可以将任何内容包装在 块中,因此您的示例在语法上没有任何问题——这不是您的想法。

以上是关于JS 文件中的 Javascript 函数不会从画布中调用的主要内容,如果未能解决你的问题,请参考以下文章

从按钮单击事件直接调用存储在外部 JS 文件中的 JavaScript 函数

js闭包

Javascript导入另一个js文件导致程序失败

如何访问javascript文件中的函数?

JavaScript学习系列博客_16_JavaScript中的函数的参数返回值

从 Angular 中的 JavaScript 文件调用 Typescript 函数