Javascript 动态图回调的顺序问题

Javascript 动态图回调的顺序问题,javascript,canvas,callback,dygraphs,operator-precedence,Javascript,Canvas,Callback,Dygraphs,Operator Precedence,我对动态图进行了一些调整,以帮助绘制大量点的动态图的页面加载时间。为此,我在dygraph-combined.js的第1378行附近向drawPointsOnLine函数添加了几行代码。不只是将计数器增加一(idx++): 当动态图被缩放、平移和还原时,这段代码似乎可以完美地跳过一定数量的要绘制和更新的点 我遇到的问题是试图在画布上显示跳过了多少个点。我决定让用户知道跳过了多少点。 为此,我在绘制画布的参考底图回调中添加了此选项 if (scalingfactorset) { scali

我对动态图进行了一些调整,以帮助绘制大量点的动态图的页面加载时间。为此,我在dygraph-combined.js的第1378行附近向drawPointsOnLine函数添加了几行代码。不只是将计数器增加一(idx++):

当动态图被缩放、平移和还原时,这段代码似乎可以完美地跳过一定数量的要绘制和更新的点

我遇到的问题是试图在画布上显示跳过了多少个点。我决定让用户知道跳过了多少点。 为此,我在绘制画布的参考底图回调中添加了此选项

if (scalingfactorset) {
    scalingfactormsg= "Every "+scalingfactor+" point(s) plotted";
    wid=canvas.measureText(scalingfactormsg);
    canvas.fillText(scalingfactormsg,area.x+area.w-wid.width-5,area.y+area.h-70);
} else {
    if ((<?php echo $lines; ?> -1) >10000) {
        firstscalingfactor=Math.round((<?php echo $lines; ?> -1)/10000);
        firstscalingfactormsg= "Every "+firstscalingfactor+" point(s) plotted";
        wid=canvas.measureText(firstscalingfactormsg);
        canvas.fillText(firstscalingfactormsg,area.x+area.w-wid.width-5,area.y+area.h-70);
    } else {
        firstscalingfactor="";
        firstscalingfactormsg= "Every "+firstscalingfactor+" point(s) plotted";
        wid=canvas.measureText(firstscalingfactormsg);
        canvas.fillText(firstscalingfactormsg,area.x+area.w-wid.width-5,area.y+area.h-70);
    }  
if(缩放因子集){
scalingfactor rmsg=“每个“+缩放因子+”绘制的点”;
wid=canvas.measureText(scalingfactormsg);
canvas.fillText(scalingfactormsg,area.x+area.w-wid.width-5,area.y+area.h-70);
}否则{
如果(-1)>10000){
firstscalingfactor=数学舍入(-1)/10000);
firstscalingfactormsg=“每一个”+第一个缩放因子+“点绘制”;
wid=canvas.measureText(firstscalingfactormsg);
canvas.fillText(firstscalingfactormsg,area.x+area.w-wid.width-5,area.y+area.h-70);
}否则{
firstscalingfactor=“”;
firstscalingfactormsg=“每一个”+第一个缩放因子+“点绘制”;
wid=canvas.measureText(firstscalingfactormsg);
canvas.fillText(firstscalingfactormsg,area.x+area.w-wid.width-5,area.y+area.h-70);
}  
但是,因为我相信在绘制点之前调用underlaycallback函数,所以scalingfactor永远不会被绘制为正确的值,但数据将被正确地缩放

至少这是我所期望的,但由于一些奇怪的原因,在缩放平移和还原到原始视图时,这将完全按照计划为某些数据集工作。画布消息将使用正确的比例因子进行更新

对于第一次加载的其他数据集,这是正确的(在我找到回调的假定顺序之前,我尝试硬编码第一个缩放因子来解决这个问题),但是当您缩放、平移或返回到原始视图时,缩放因子将固定在空字符串上并显示“绘制的每个点”即使数据正在按一定量进行缩放

与小数据集相比,它似乎更适合于大数据集,但仍有一些小数据集可以工作。我认为这可能与动态图处理回调的方式有关。我认为如果我可以强制动态图首先绘制点,一切都会得到修复,但我不确定这是否可行


如果有人知道如何修复这种奇怪的行为,请让我知道。如果有问题,我会在调用动态图之前将scalingfactorset设置为false,并且数据是csv格式的。我还确保代码正常运行和不正常运行时,数据集之间没有格式错误。如果有任何其他有用信息,请告诉我我可以提供。

也许可以尝试代替
underlayCallback
。顾名思义,underlayCallback绘制在图表下方,即之前。还要注意,跳过大量点会产生不良影响,例如忽略最小值和最大值,以及在数据间隔不均匀时完全扭曲绘图。我移动了来自underlayCallback画布的消息,用于在drawCallback中使用innerHTML更新动态图下方的消息。显示的消息显示的行为与underlayCallback中的语句完全相同。我还添加了一条语句,以查看返回的pointsOnLine.length是什么,并注意到它在数据中打断pointsOnLine.length因某些原因为0。是否有其他位置可让动态图跟踪其正在绘制的点数?请尝试代替
underlayCallback
。顾名思义,underlayCallback在图表下方绘制,即之前绘制。还应注意,跳过大量点数会产生不良影响,例如忽略最小值和最大值,并在数据间隔不均匀时完全扭曲绘图。我将消息从underlayCallback画布移动,以便在drawCallback中使用innerHTML更新动态图下方的消息。显示的消息显示的行为与underlayCallback中的语句完全相同。我还添加了一条语句要查看pointsOnLine.length返回了什么,并注意到它在数据中打断了pointsOnLine.length,出于某种原因,它是0。是否还有其他地方可以让动态图跟踪它正在绘制的点数?
if (scalingfactorset) {
    scalingfactormsg= "Every "+scalingfactor+" point(s) plotted";
    wid=canvas.measureText(scalingfactormsg);
    canvas.fillText(scalingfactormsg,area.x+area.w-wid.width-5,area.y+area.h-70);
} else {
    if ((<?php echo $lines; ?> -1) >10000) {
        firstscalingfactor=Math.round((<?php echo $lines; ?> -1)/10000);
        firstscalingfactormsg= "Every "+firstscalingfactor+" point(s) plotted";
        wid=canvas.measureText(firstscalingfactormsg);
        canvas.fillText(firstscalingfactormsg,area.x+area.w-wid.width-5,area.y+area.h-70);
    } else {
        firstscalingfactor="";
        firstscalingfactormsg= "Every "+firstscalingfactor+" point(s) plotted";
        wid=canvas.measureText(firstscalingfactormsg);
        canvas.fillText(firstscalingfactormsg,area.x+area.w-wid.width-5,area.y+area.h-70);
    }