D3无法在Firefox中运行

时间:2017-02-13 08:01:00

标签: javascript firefox d3.js

我在D3中进行群集设计。我在Chrome中运行时没有问题(控制台中的一些错误除外) 如here但当我使用Firefox运行时,页面看起来是空白的,Firefox控制台是this

我应该怎么做才能让D3在Firefox中运行。任何建议都会有所帮助。这是我的完整代码:

的index.html:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>Radial Cluster Demo</title>
    <script src="//d3js.org/d3.v3.min.js"></script> 
    <style>
        .node {
            cursor: pointer;
        }
        .overlay {
            background-color:white;
        }
        .node circle {
            fill: #fff;
            stroke: steelblue;
            stroke-width: 1.5px;
        }
        .node text {
            font: sans-serif;
            font-size: 80%;
            text-align: center;
        }
        .link {
            fill: none;   
        } 
        .parent{
            fill :red;
        }
        div#tooltip {   
            position: absolute;         
            font: 15px sans-serif;      
            background: orange; 
            border-radius: 8px; 
            padding-left: 5px;
            padding-right: 5px;
            pointer-events: none;           
        }
    </style>
</head>
<body>
    <div id="tooltip" style="display:none"></div>
    <div id="tree-container"class="full"></div>
    <script type="text/javascript">
        var selectedNode = null;
        var draggingNode = null;

        var panSpeed = 200;
        var panBoundary = 0; 

        var i = 0;
        var duration = 750;
        var root;

        var width = 5000;
        var height = 5000;

        var diameter = 750;

        var tree = d3.layout.tree().size([360, diameter / 2 - 120])
            .separation(function (a, b) {
                return (a.parent == b.parent ? 1 : 5) / a.depth;
            });

        var diagonal = d3.svg.diagonal.radial()
            .projection(function (d) {
                return [d.y, d.x / 180 * Math.PI];
            });


        d3.select(self.frameElement).style("height", width);

        function sortTree() {
            tree.sort(function (a, b) {
                return b.name.toLowerCase() < a.name.toLowerCase() ? 1 : -1;
            });
        }

        sortTree();

        var baseSvg = d3.select("#tree-container").append("svg")
            .attr("width", width)
            .attr("height", height)
            .attr("class", "overlay")
            .attr("transform", "translate(" + 1000 + "," + 1000 + ")");

        function expand(d) {
            if (d._children) {
                d.children = d._children;
                d.children.forEach(expand);
                d._children = null;
            }
        }

        d3.json("index.php", function(error, flare) {
            if (error) throw error;

            root = flare;
            root.x0 = height / 2;
            root.y0 = 0;

            flare.children.forEach(collapse);
            update(root);

            function collapse(d) {
                if (d.children) {
                    d._children = d.children;
                    d._children.forEach(collapse);
                    d.children = null;
                }

                update(d);
            }

            function toggleChildren(d) {
                if (d.children) {
                    d._children = d.children;
                    d.children = null;
                } else if (d._children) {
                    d.children = d._children;
                    d._children = null;
                }

                return d;
            }

            function click(d) {
                if (!d.children) 
                    root.children.forEach(collapse);
                    //d.children = d._children;
                    //    d._children = null;

                if (d3.event.defaultPrevented) return; 

                d = toggleChildren(d);

                update(d);
            }

            function update(source) {         
                var levelWidth = [1];

                var childCount = function (level, n) {
                    if (n.children && n.children.length > 0) {
                        if (levelWidth.length <= level + 1) levelWidth.push(0);

                        levelWidth[level + 1] += n.children.length;

                        n.children.forEach(function (d) {
                            childCount(level + 1, d);
                        });
                    }
                };

                childCount(0, root);
                var nodes = tree.nodes(root); 
                links = tree.links(nodes);

                node = svgGroup.selectAll("g.node")
                    .data(nodes, function (d) {
                        return d.id || (d.id = ++i);
                    });

                var nodeEnter = node.enter().append("g")        
                    .attr("class", "node")      
                    .on('click', click)

                nodeEnter.append("circle")
                    .attr("class", "smallcircle")
                    .style("stroke", function(d) {
                        return d.color;
                    })

                nodeEnter.append("text")      
                    .text(function (d) {
                        return d.name;
                    })
                    // .style("font", "12px serif")
                    .style("opacity", 1)
                    .style("fill-opacity", 0)   
                    .on("mouseover", function (d) {
                        var r = d3.select(this).node().getBoundingClientRect();

                        d3.select("div#tooltip")
                            .style("display", "inline")
                            .style("top", (r.top-25) + "px")
                            .style("top", 10 + "px")
                            .style("left", (d3.event.pageX) + "px")     
                            .style("top", (d3.event.pageY - 40) + "px") 
                            .style("left", r.left + 40+"px")
                            .style("left",  + "px")
                            .style("position", "absolute")
                            .text(d.t);
                    })
                    .on("mouseout", function(){
                        d3.select("div#tooltip").style("display", "none")
                    })

                    node.select("circle.nodeCircle")
                        .attr("r", 4.5)
                        .style("fill", function (d) {
                            return d._children ? "red" : "#fff";
                        });

                    //     });
                    var nodeUpdate = node.transition()
                        .duration(duration)
                        .attr("transform", function (d) {
                            return "rotate(" + (d.x - 90) + ")translate
           (" + d.y + ")rotate(" + (-d.x + 90) + ")";
                        });

                    nodeUpdate.select("circle")
                        .attr("r", 4.5) 
                        .style("fill", function (d) {
                            return d._children ? "lightsteelblue" : "#fff";
                        });

                    nodeUpdate.select("text")
                        .style("fill-opacity", 4)
                        .attr("fill",function(d){return (d.children?"red":"black");})
                        .attr("stroke-width",function(d){return (d.children?"4":"1");})
                        .attr("stroke-width",function(d){return (d.children?"4 px":"1 px");})
                        .attr("dy", ".35em")
                        .attr("text-anchor", function (d) {
                            return d.x < 180 ? "start" : "end";
                        })
                        .attr("transform", function (d) {
                            return d.x < 180 ? "translate(8)" : "rotate(360)translate(-8)";
                        });

                    var nodeExit = node.exit().transition()
                        .duration(duration)
                        .attr("transform", function (d) {
                            return "translate(" + source.x + "," + source.y + ")";
                        })
                        .remove();

                    nodeExit.select("circle")
                        .attr("r", 0);

                    nodeExit.select("text")
                        .style("fill-opacity", 0);

                    var link = svgGroup.selectAll("path.link")
                        .data(links, function (d) {
                            return d.target.id;
                        })

                    link.style("stroke", function(d) {
                        return d.color;
                    })

                    link.enter().insert("path", "g")
                        .attr("class", "link")

                    link.style("stroke", function(d) {
                        return d.target.color;
                    })
                    .attr("d", function (d) {
                        var o = {
                            x: source.x0,
                            y: source.y0
                        };

                        return diagonal({
                            source: o,
                            target: o
                        });
                    });

                    link.transition()
                        .duration(duration)
                        .attr("d", diagonal);

                    link.exit().transition()
                        .duration(duration)
                        .attr("d", function (d) {
                            var o = {
                                x: source.x,
                                y: source.y
                            };

                            return diagonal({
                                source: o,
                                target: o
                            });
                        })
                        .remove();

                    nodes.forEach(function (d) {
                        d.x0 = d.x;
                        d.y0 = d.y;
                    });
                }
            });

            var svgGroup = baseSvg.append("g")
                .attr("transform", "translate(" + 550 + "," + 300 + ")")

            d3.selectAll("text").style("fill", function (d){
                return d3.select(this).classed(d.cond, true);
            })
    </script>
</body>
</html>

使用ajax:

<script>
    $(function (all) {
         $('form').on('submit', function (e) {
         e.preventDefault();
           var t=$('form').serialize();
          var u='http://localhost:8888/saff/indexi.php?'+t;
         $.ajax({
         url:u,
        async:true,
        success:function(data){
        myFunction();
        }
        });
  function myFunction(){
 d3.json(u, function(treeData) {
      //d3 code
           });
     }
    });
    });
  </script>

完整更新的D3代码

       <!DOCTYPE html>
        <html>
        <head>
     <meta http-equiv="Content-Type"
          content="text/html; charset=utf-8" />
        <title>Tring Reset</title>
        <style>
        .node {
            cursor: pointer;
        }
        .overlay {
            background-color:white;
        }
        .node circle {
            fill: #fff;
            stroke: steelblue;
            stroke-width: 1.5px;
        }
        .node text {
             font: sans-serif;

            text-align: center;
        }
        .link {
            fill: none;   
        } 
        .parent{
        fill :red;
        font-weight:lighter;
        }
        div#tooltip {   
            position: absolute;         
              font: 15px sans-serif;        
            background: orange; 
             border-radius: 8px;    
                padding-left: 5px;
                padding-right: 5px;
            pointer-events: none;           
        }
        </style>
        <script src="//d3js.org/d3.v3.min.js"></script>
        <script src="jquery-1.11.1.min.js"></script>
        </head>
        <body>  
        <form name="editorForm"> 
                <input type="text"name="editor"/>
        <input type="submit"value="butn">
        </form>
         <div id="tooltip" style="display:none"></div>
        <div id="tree-container"class="full"></div>
        <script>
        $('form').find(':submit').on('click', function() {
                var t = $('form').serialize();
                var u = 'http://localhost:8888/saff/indexi.php?' + t;
                        $.ajax({
                            url: u,
                            async: true,
                            success: function(data) {
                                myFunction(data);
                            }
                        });
        function myFunction(){
        var selectedNode = null;
        var draggingNode = null;

        var panSpeed = 200;
        var panBoundary = 0; 

        var i = 0;
        var duration = 750;
        var root;

        var width = $(document).width();
        var height = $(document).height();

        var diameter = 750;

        var tree = d3.layout.tree().size([360, diameter / 2 - 120])

            .separation(function (a, b) {
            return (a.parent == b.parent ? 1 : 5) / a.depth;
        });
        var diagonal = d3.svg.diagonal.radial()
         .projection(function (d) {
            return [d.y, d.x / 180 * Math.PI];
        });
        d3.json(u, function(error, treeData) {
          if (error) throw error;
        root = treeData;
        root.x0 = height / 2;
        root.y0 = 0;
        root = treeData;
        root.x0 = height / 2;
        root.y0 = 0;

        function sortTree() {
            tree.sort(function (a, b) {
            return b.name.toLowerCase() < a.name.toLowerCase() ? 1 : -1;
            });
        }
        sortTree();
        var baseSvg = d3.select("#tree-container").append("svg")
            .attr("width", 1200)
            .attr("height",1200)
            .attr("class", "overlay")

         .attr("transform", "translate(" + 1000 + "," + 1000 + ")");
        function collapse(d) {

            if (d.children) {
                d._children = d.children;
                d._children.forEach(collapse);
                d.children = null;
            }

        update(d);
        }

        function expand(d) {

            if (d._children) {
                d.children = d._children;
                d.children.forEach(expand);
                d._children = null;
            }
        }
        function toggleChildren(d) {

            if (d.children) {
                d._children = d.children;
                d.children = null;
            } else if (d._children) {
                d.children = d._children;
                d._children = null;
            }
            return d;
        }

        function click(d) {
        if(!d.parent){
        return;
        }

        if (!d.children) 
            treeData.children.forEach(collapse);

            if (d3.event.defaultPrevented) return; 

            d = toggleChildren(d);

            update(d);
        }
        function update(source) {
           var levelWidth = [1];
            var childCount = function (level, n) {
                if (n.children && n.children.length > 0) {
        if (levelWidth.length <= level + 1) levelWidth.push(0);

                    levelWidth[level + 1] += n.children.length;
                    n.children.forEach(function (d) {
                        childCount(level + 1, d);
                    });
                }
            };
            childCount(0, root);
             var nodes = tree.nodes(root); 
            links = tree.links(nodes);
            node = svgGroup.selectAll("g.node")
                .data(nodes, function (d) {
                return d.id || (d.id = ++i);
            });
              var nodeEnter = node.enter().append("g")

                .attr("class", "node")

            .on('click', click)

              nodeEnter.append("circle")
                .attr("class", "smallcircle")
                    .style("stroke", function(d) {
              return d.color;
            })


            nodeEnter.append("text")

            .text(function (d) {
                return d.name;
            })

                .style("opacity", 1)
                .style("fill-opacity", 0)

        .on("mouseover", function (d) {
        var r = d3.select(this).node().getBoundingClientRect();
                   d3.select("div#tooltip")
                        .style("display", "inline")
                       .style("top", (r.top-25) + "px")
                       .style("top", 10 + "px")
                    .style("left", (d3.event.pageX) + "px")     
                        .style("top", (d3.event.pageY - 40) + "px") 
                      .style("left", r.left + 40+"px")
                      .style("left",  + "px")
                        .style("position", "absolute")
                       .text(d.t);
                 })
            .on("mouseout", function(){
               d3.select("div#tooltip").style("display", "none")
           })


            node.select("circle.nodeCircle")
                .attr("r", 4.5)
                .style("fill", function (d) {
                return d._children ? "red" : "#fff";
            });
         var nodeUpdate = node.transition()
                .duration(duration)
        .attr("transform", function (d) {
   return "rotate("+(d.x - 90)+")
      translate("+ d.y +")rotate(" + (-d.x + 90) + ")";
            });

            nodeUpdate.select("circle")
                .attr("r", 4.5)

                .style("fill", function (d) {
                return d._children ? "lightsteelblue" : "#fff";
            });

            nodeUpdate.select("text")

               .style("fill-opacity", 9)
           .attr("fill",function(d){return (d.children?"red":"black");})
     .attr("font-size",function(d){return (d.children?"20px":"12px");})
         .attr("dy", ".35em")

                .attr("text-anchor", function (d) {
                return d.x < 180 ? "start" : "end";
            })


                .attr("transform", function (d) {
        return d.x < 180 ? "translate(8)" : "rotate(360)translate(-8)";
            });

            var nodeExit = node.exit().transition()
                .duration(duration)
                .attr("transform", function (d) {
                return "translate(" + source.x + "," + source.y + ")";
            })
                .remove();

            nodeExit.select("circle")
                .attr("r", 0);

            nodeExit.select("text")
                .style("fill-opacity", 0);


            var link = svgGroup.selectAll("path.link")
                .data(links, function (d) {
                return d.target.id;
            })
        link.style("stroke", function(d) {
              return d.color;
            })

            link.enter().insert("path", "g")
                .attr("class", "link")
                 link.style("stroke", function(d) {
              return d.target.color;
            })
                .attr("d", function (d) {
              var o = {x: source.x, y: source.y};
                return diagonal({source: o, target: o});
              });


            link.transition()
                .duration(duration)
                .attr("d", diagonal);


            link.exit().transition()
                .duration(duration)
                .attr("d", function (d) {
                  var o = {x: source.x, y: source.y};
                return diagonal({source: o, target: o});
              })

                .remove();
         nodes.forEach(function (d) {
                d.x0 = d.x;
                d.y0 = d.y;
            });
        }
        var svgGroup = baseSvg.append("g")
        .attr("transform", "translate(" + 550 + "," + 300 + ")")
   d3.selectAll("text").style("fill", function (d) 
     { return d3.select(this).classed(d.cond, true); })
        root.children.forEach(function (child) {
            collapse(child);
        });
        update(root);
        d3.select(self.frameElement).style("height", width);
        });
        }
        return false;
        });
        </script>
        </body>
        </html>     

问题是*当提交第一条字时,它在网页中得到正确的设计*当我更改输入文本时,第二个设计出现在第一个设计之后,为什么ajax不工作?

0 个答案:

没有答案