2013-04-21 142 views
0

有沒有辦法使用d3.js創建漸變定義,這將導致以這樣的方式:箭頭SVG梯度d3.js

對不起,我以前的ASCII, 這就是我想要實現:

enter image description here

代替簡單的線性梯度的:

enter image description here

我沒有設法找到一種方法來做到這一點沒有拆分rects和創建相反的漸變。

謝謝!

+0

你有你在找什麼更具體的例子? ascii藝術是一個有點棘手的破譯.. – minikomi 2013-04-22 03:47:12

+0

對不起,模糊的ASCII,希望現在更清晰。 – BarakChamo 2013-04-22 08:13:36

+1

看看[標準](http://www.w3.org/TR/SVG/pservers.html),看起來你不能直接做這樣的事情。也許如果你結合了一個漸變和一個模式。 – 2013-04-22 08:22:11

回答

0

使用d3.js,您正在使用SVG元素進行繪製。 SVG支持linearradial漸變。此箭頭樣式漸變可以從兩個不同的線性漸變構建而成。

上述鏈接描述了漸變的可能屬性,但從d3.js使用它並不是那麼簡單。所以這裏是一個example for the radial gradient,很容易翻譯成你的版本。

繪製一個矩形,梯度:

var rectangle = svgContainer.append("rect") 
    .attr("x", 10) 
    .attr("y", 10) 
    .attr("width", 50) 
    .attr("height", 100) 
    .style("fill", "url(#gradient1)"); 

梯度必須象在上述例子中所定義:

var gradient1 = svgContainer.append("svg:defs") 
    .append("svg:radialGradient") 
    .attr("id", "gradient1") 
    .attr("cx", "50%") 
    ... 
0

這可以被實現。只是發佈帶有漸變和圓角的條形圖示例。這將幫助您獲得任何漸變效果。

var data = [40, 50, 30, 40, 90, 54, 20, 40, 50, 30, 40, 90, 54, 20]; 
 
\t \t var x = d3.scaleLinear() \t 
 
\t \t .domain([0, d3.max(data)]) 
 
\t \t .range([0, 420]); 
 
\t \t d3.select(".chart") 
 
\t \t .selectAll("div") 
 
\t \t .data(data) 
 
\t \t .enter().append("div") 
 
\t \t .attr("class","roundedCorners") 
 
\t \t .style("width", function(d) { 
 
\t \t return x(d) + "px"; 
 
\t \t }) 
 
\t \t .text(function(d) { 
 
\t \t return d; 
 
\t \t });
.roundedCorners{ 
 
    border-radius: 0px 40px 40px 0px; 
 
} 
 
.chart div { 
 
    background: rgb(254,204,177); /* Old browsers */ 
 
    background: -moz-linear-gradient(top, rgba(254,204,177,1) 0%, rgba(241,116,50,1) 50%, rgba(234,85,7,1) 51%, rgba(251,149,94,1) 100%); /* FF3.6-15 */ 
 
    background: -webkit-linear-gradient(top, rgba(254,204,177,1) 0%,rgba(241,116,50,1) 50%,rgba(234,85,7,1) 51%,rgba(251,149,94,1) 100%); /* Chrome10-25,Safari5.1-6 */ 
 
    background: linear-gradient(to bottom, rgba(254,204,177,1) 0%,rgba(241,116,50,1) 50%,rgba(234,85,7,1) 51%,rgba(251,149,94,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ 
 
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#feccb1', endColorstr='#fb955e',GradientType=0); /* IE6-9 */ 
 
    text-align: right; 
 
    padding: 5px; 
 
    margin: 2px; 
 
    color: white; 
 
}
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.11.0/d3.min.js"></script> 
 

 
<div class="chart"></div>