首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >互相干扰的阴谋

互相干扰的阴谋
EN

Stack Overflow用户
提问于 2014-01-21 03:02:47
回答 1查看 115关注 0票数 0

再次感谢你的专家支持。我有一个相当不错的flot实现,有一个非常不幸的错误。绘图例程在循环中工作,因此它在目录中创建了尽可能多的数据文件,这些文件通过集合。如果只有一个数据文件,那么只有一个图,则生成的flot绘图可以正常工作,复选框按预期的方式打开和关闭行。如果我有多个数据文件,因此有多个flot图.只有底部的一个似乎正确工作,其余的锁后,要么一个切换或没有。

有人能给我一个想法,如何创造出不干涉的地块?我在其他地方读到,函数名不需要不同,但没有验证这一点,我确实更改了标签,但这增加了额外的奇怪之处。

相当长的代码..。但它给了你我所知道的大部分..。

这里的第一部分实际上是为flot构建数据集..。然后剩下的创造情节..。

代码语言:javascript
复制
<script type='text/javascript'>//<![CDATA[ 
$(function(){
var results = [

<?php
    $downsample = 5;
    for($k=0;$k<2; $k++){   
        //$k =0 is Left, $k = 1 is right
        if ($k==0){
            $side = "L";
            $offset = 1;
        } elseif ($k==1) {
            $side = "R";
            $offset = 0;                
        }
        for ($m = 1; $m <= count($trackdata)-1; $m++){
            echo "\n{\n\"label\": \"".$m.$side."\",\n";   //echo "\n{\n\"label\": \"".$m." ".$side."\",\n";
            echo "\"data\": [";
            for ($n=1;$n<=count($PSD[$m*3-2]);$n=$n+$downsample){
                $tmp =  "[".$PSD[$m*3-2][$n].",".$PSD[$m*3-$offset][$n]."]";
                echo $tmp;
                if ($n > count($PSD[$m*3-2])-$downsample){
                    echo "]}";  
                } else {
                    echo ",";
                }
            }
            if ($m <> count($trackdata)-1){
                echo ",";   
            } else if ($k<1){
                echo ",";
            }
        }
    }
echo "];";   

?>

var options = {
    legend: {
        show: true
    },
    series: {
        points: {
            show: false
        },
        lines: {
            show: true
        }
    },
    grid: {
        hoverable: true
    },
    xaxis: {
    },
    yaxis: {
    }
};

 var i = 0;
 var track = 0;
 choiceContainer = $("#labeler<?php echo $i ?>");
 var table = $('<table />');    
  var row = $('<tr/>');
  var cell = $('<td width=\"100\"/>');
    var temp = $(table);

$.each(results, function(key, val) {
     track = track + 1;
    val.color = i;
    ++i;
    l = val.label; 


     if (track == 1){
        temp.append(row);
        row.append(cell);
        cell.append('Left Channel');
     } else if(track == <?php echo $tracks ?>){
        row = $('<tr/>');
        temp.append(row);
        cell = $('<td width=\"100\">');
        row.append(cell);
        cell.append('Right Channel');
     } //else if ((track == 7) or (track == 14) or (track == 21) or (track == 28) or (track == 35)){

     //}

        cell = $('<td width=\"60\"/>');
        row.append(cell);
        var bar = $('<div style=\"width:18px; white-space:nowrap; float:left\"><bar />');
        cell.append(bar);
       var inp = $('<input name="' + l + '" id="' + l + '" type="checkbox" checked="checked">');
        cell.append(inp);
        var bits = $('<label>', {
                text: l,
                'for': l
                });
        cell.append(bits); 

    choiceContainer.append(temp);

});

function plotAccordingToChoices() {
    var data = [];

    choiceContainer.find("input:checked").each(function() {
        var key = this.name;

        for (var i = 0; i < results.length; i++) {
           if (results[i].label === key) {
                data.push(results[i]);
                return true;
            }
        }

    });

    $.plot($("#placeholder<?php echo $i ?>"), data, options);
}

var previousPoint = null;

$("#placeholder<?php echo $i ?>").bind("plothover", function(event, pos, item) {
    $("#x").text(pos.x.toFixed(2));
    $("#y").text(pos.y.toFixed(2));

    if (item) {
        if (previousPoint != item.datapoint) {
            previousPoint = item.datapoint;

            $("#tooltip").remove();
            var x = item.datapoint[0].toFixed(2),
                y = item.datapoint[1].toFixed(2);

            showTooltip(item.pageX, item.pageY, item.series.label + " $" + y);
        }
    } else {
        $("#tooltip").remove();
        previousPoint = null;
    }
});

function showTooltip(x, y, contents) {
    $('<div id="tooltip">' + contents + '</div>').css({
        position: 'absolute',
        display: 'none',
        top: y + 5,
        left: x + 15,
        border: '1px solid #fdd',
        padding: '2px',
        backgroundColor: '#fee',
        opacity: 0.80
    }).appendTo("body").fadeIn(200);
}

plotAccordingToChoices();
choiceContainer.find("input").change(plotAccordingToChoices);

$('.legendColorBox > div').each(function(i){
    $(this).clone().prependTo(choiceContainer.find("bar").eq(i));
});
});//]]>  

</script>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-28 03:09:27

好的..。于是尘埃落定,我解决了我的问题,同时清理了一些东西。首先,我为绘图例程创建了一个函数。这就揭示了我所面临的问题,在这里,我对数据进入的div重复使用相同的变量,因此结果混淆了。通过创建函数,然后在每次迭代中使用自定义变量驱动函数,这些图按其应有的方式独立运行。-马克

代码语言:javascript
复制
function flotplot(results, choiceContainer, plotholder, numtracks, legendcontainer){

// pass in results, choicecontainer, plotholder
// results = data
// choiceContainer =    $("#labeler1");
// plotholder  = $("#placeholder0");


var options = {
    legend: {
        show: true,
        container: legendcontainer,
        noColumns: 2,
        sorted: false
    },
    series: {
        points: {
            show: false
        },
        lines: {
            show: true
        }
    },
    grid: {
        hoverable: true
    },
    xaxes: [{
        axisLabel: 'Frequency (Hz)',
    }],
    yaxes: [{
        axisLabel: 'Power (dB)',
    }],
    crosshair: {
        mode: "xy",
        color: 001,
        lineWidth: .5
    }
};

     var i = 0;
     var track = 0;
     var table = $('<table />');    
    var row = $('<tr/>');
    var cell = $('<td width=\"100\"/>');
    var temp = $(table);

$.each(results, function(key, val) {
     track = track + 1;
    val.color = i;
    ++i;
    l = val.label; 


     if (track == 1){
        temp.append(row);
        row.append(cell);
        cell.append('Left Channel');
     } else if(track == numtracks){
        row = $('<tr/>');
        temp.append(row);
        cell = $('<td width=\"100\">');
        row.append(cell);
        cell.append('Right Channel');
     } //else if ((track == 7) or (track == 14) or (track == 21) or (track == 28) or (track == 35)){

     //}

        cell = $('<td width=\"70\"/>');
        row.append(cell);
        var bar = $('<div style=\"width:18px; white-space:nowrap; float:left\"><bar />');
        cell.append(bar);
       var inp = $('<input name="' + l + '" id="' + l + '" type="checkbox" checked="checked">');
        cell.append(inp);
        var bits = $('<label>', {
                text: l,
                'for': l
                });
        cell.append(bits); 

    choiceContainer.append(temp);

});

function plotAccordingToChoices() {
    var data = [];

    choiceContainer.find("input:checked").each(function() {
        var key = this.name;

        for (var i = 0; i < results.length; i++) {
           if (results[i].label === key) {
                data.push(results[i]);
                return true;
            }
        }

    });

    $.plot(plotholder, data, options);
}

var previousPoint = null;

plotholder.bind("plothover", function(event, pos, item) {
    $("#x").text(pos.x.toFixed(2));
    $("#y").text(pos.y.toFixed(2));

    if (item) {
        if (previousPoint != item.datapoint) {
            previousPoint = item.datapoint;

            $("#tooltip").remove();
            var x = item.datapoint[0].toFixed(2),
                y = item.datapoint[1].toFixed(2);

            showTooltip(item.pageX, item.pageY, item.series.label + " " + y + "dB");
        }
    } else {
        $("#tooltip").remove();
        previousPoint = null;
    }
});

function showTooltip(x, y, contents) {
    $('<div id="tooltip">' + contents + '</div>').css({
        position: 'absolute',
        display: 'none',
        top: y + 5,
        left: x + 15,
        border: '1px solid #fdd',
        padding: '2px',
        backgroundColor: '#fee',
        opacity: 0.80
    }).appendTo("body").fadeIn(200);
}

plotAccordingToChoices();
choiceContainer.find("input").change(plotAccordingToChoices);

$('.legendColorBox > div').each(function(i){
    $(this).clone().prependTo(choiceContainer.find("bar").eq(i));
});     
 };//]]>   

下面是它写入的结构:

代码语言:javascript
复制
   echo "<div id=\"placeholder".$i."\" class=\"loading\" style=\"width:600px;height:300px;display: inline; position: relative; float: left\"></div>";
   echo "<div id=\"legendholder".$i."\" class=\"loading\" style=\"width:200px; height:300px; display: inline; position: relative; float: left\"></div>";
   echo "<div id=\"picker1\" style=\"clear: both\"><p id=\"choices".$i."\">Show the following Tracks:</p></div>";   
   echo "<div id=\"labeler".$i."\"></div>";
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21248332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档