1

我有一个抛出 JavaScript 异常的页面:

raphael.js 中第 5144 行第 13 列的未处理异常
0x80048270 - JavaScript 运行时错误:Arg:分数超出范围(允许 0 到 1)

我正在使用 Raphaël 的 2.1.0 版本,并且出于调试目的使用未压缩的 JavaScript 文件而不是最小化的文件(即从http://github.com/DmitryBaranovskiy/raphael/raw/master/raphael.js复制的文件)

如果我闯入调试器(我使用的是 Visual Studio 2012),我发现变量“不透明度”的值为 -0.23185589076263113,而它应该在 0 和 1 之间。但我看不出它是如何变成负数的。这是代码(来自 raphael.js,即它是库代码而不是我的代码)

        opacity = mmin(mmax(opacity, 0), 1);
        params["stroke-width"] == null && (width = a["stroke-width"]);
        params["stroke-width"] && (stroke.weight = width);
        width && width < 1 && (opacity *= width) && (stroke.weight = 1);
        stroke.opacity = opacity;

当第一行明确将其限制为 [0, 1] 时,如何在此代码的最后一行出现 opacity == -0.23185589076263113?

(注意 raphael.js 中的 mmmax 是 math.max 而 mmin 是 math.min。)

4

1 回答 1

0

找到了。

width && width < 1 && (opacity *= width) && (stroke.weight = 1); 

如果宽度为负数(在本例中为负数),则会打破不透明度范围。宽度设置在我引用的块之前的行(5139):

var width = (toFloat(params["stroke-width"]) || 1) * .75;

我需要调试我的代码以找出为什么 params["stroke-width"] 为负数,我建议 Raphael 防止这种情况发生:https ://github.com/DmitryBaranovskiy/raphael/issues/623

于 2012-09-26T17:32:21.643 回答