矩形内的Svg剪辑路径不起作用

前端之家收集整理的这篇文章主要介绍了矩形内的Svg剪辑路径不起作用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个简单的x和y轴图.我不想让我绘制的绘图区域与轴重叠.

我使用d3创建我的图表,但是剪辑路径不起作用:

http://jsfiddle.net/EqLBJ/

var margin = {top: 19.5,right: 19.5,bottom: 19.5,left: 39.5},width = 960 - margin.right,height = 500 - margin.top - margin.bottom;

var xScale = d3.scale.linear().
    domain([xMin,xMax]). // your data minimum and maximum
    range([0,width]); // the pixels to map to,e.g.,the width of the diagram.

var yScale = d3.scale.linear().
    domain([yMax,yMin]). 
    range([0,height]); 

var xAxis = d3.svg.axis().orient("bottom").scale(xScale).ticks(10,d3.format(",d")),yAxis = d3.svg.axis().orient("left").scale(yScale);


var chart = d3.select("#chart").append("svg")
    .attr("class","chart")
    .attr("width",width + margin.left + margin.right)
    .attr("height",height + margin.top + margin.bottom)
    .attr("pointer-events","all")
    .append("g")
    .attr("transform","translate(" + margin.left + "," + margin.top + ")")
    .call(d3.behavior.zoom().scaleExtent([0.2,5]).on("zoom",redraw));


var rect = chart.append('svg:rect')
    .attr('width',width)
    .attr('height',height)
    .attr('fill','white');


var line = d3.svg.line()
        .interpolate("basis")
        .x(function(d,i) { return xScale(d.time); })
        .y(function(d) { return yScale(d.value); });

var clip = chart.append("svg:clipPath")
    .attr("id","clip");

clip.append("svg:rect")
    .attr("id","clip-rect")
    .attr("width",width)
    .attr("height",height);
    // .attr("fill","white");

var path = chart.append("svg:path")
    .attr("clip-path","url(#clip-rect)")
    .data([data])
    .attr("class","line")
    .attr("fill","none")
    .attr("stroke","maroon")
    .attr("stroke-width",2)
    .attr("d",line);

// x-axis label
chart.append("text")
    .attr("class","x label")
    .attr("text-anchor","end")
    .attr("x",width)
    .attr("y",height - 6)
    .text("time");

// y-axis label
chart.append("text")
    .attr("class","y label")
    .attr("text-anchor","end")
    .attr("y",6)
    .attr("dy",".75em")
    .attr("transform","rotate(-90)")
    .text("value");

// x-axis
var xaxis = chart.append("g")
    .attr("class","x axis")
    .attr("transform","translate(0," + height + ")")
    .call(xAxis);

// y-axis
var yaxis = chart.append("g")
    .attr("class","y axis")
    .call(yAxis);



function redraw() 
{
    console.log("here",d3.event.translate,d3.event.scale);

    path.transition()       
        .ease("linear")
        .attr("transform","translate(" + d3.event.translate + ")" + " scale(" + d3.event.scale + ")");

}

解决方法

你想要这样的东西:

http://jsfiddle.net/dsummersl/EqLBJ/1/

特别:

>使用’clip’而不是’clip-rect’>将要剪辑的内容放在“g”元素中,并指定“clip-path”属性和“g”元素的转换.

猜你在找的JavaScript相关文章