好吧,我有一个轻微的性能瓶颈。
基本上我有一个由屏幕 div(“屏幕”)和图表 div(“图表”)组成的图表,当这个图表完成渲染时,它会检查它需要在图表上设置什么比例才能获得图表适合屏幕内部。问题是我想出的任何比例都必须是 1.2 的指数。换句话说,您需要能够通过将 1.2 乘以某个数字的幂来获得新刻度的数字。
这个函数是计算我需要的比例。
fitScale = function (width, height)
{
var scale = 1,
gWidth = graph.element.offsetWidth,
gHeight = graph.element.offsetHeight;
while (gWidth > width * scale && gHeight > height * scale)
scale *= 1.2;
while (gWidth < width * scale || gHeight < height * scale)
scale /= 1.2;
return 900 / scale;
}
问题是这很糟糕......
它所做的是获取图表大小 ( width, height
) 和屏幕大小 ( gWidth, gHeight
) 并循环通过新的比例,直到达到正确的数字。
首先,它使比例变大,直到图表的至少一维乘以比例大于屏幕的一维。
然后它会循环返回以确保图表 * 比例的两个维度至少比屏幕小一点。
我想只用一次数学计算来执行这个动作。也许通过计算贴合度然后向下舍入,但我不知道如何向下舍入到 1.2 的指数
-使固定-
这是生成的工作版本...
fitScale = function (width, height)
{
var wScale = graph.element.offsetWidth / width,
hScale = graph.element.offsetHeight / height,
snugg = wScale < hScale ? wScale : hScale,
exp = Math.log(snugg) / Math.log(1 / 1.2),
scale = Math.pow(1 / 1.2, Math.ceil(exp));
return 900 / scale;
}