【问题标题】:Fill rect with pattern用图案填充矩形
【发布时间】:2023-03-23 19:04:01
【问题描述】:

我将 d3.js 用于图形。在某些时候,我必须用图形的某些特殊部分显示数据,例如,如果值越过某个边界,则用填充模式显示该部分。更清楚的是那里和图像。

我得到了跨越边界的矩形部分,但我怎样才能用这种模式填充它? 有任何 CSS 或画布技巧吗?

注意:此图仅为示例,并非真实图片

【问题讨论】:

标签: javascript css svg d3.js


【解决方案1】:

这个怎么样:

Live Demo

JS

var svg = d3.select("body").append("svg");

svg
  .append('defs')
  .append('pattern')
    .attr('id', 'diagonalHatch')
    .attr('patternUnits', 'userSpaceOnUse')
    .attr('width', 4)
    .attr('height', 4)
  .append('path')
    .attr('d', 'M-1,1 l2,-2 M0,4 l4,-4 M3,5 l2,-2')
    .attr('stroke', '#000000')
    .attr('stroke-width', 1);

svg.append("rect")
      .attr("x", 0)
      .attr("width", 100)
      .attr("height", 100)
      .style("fill", 'yellow');

svg.append("rect")
    .attr("x", 0)
    .attr("width", 100)
    .attr("height", 100)
    .attr('fill', 'url(#diagonalHatch)');

结果

【讨论】:

  • 我使用图案来填充矩形,但是这种图案失去了原来的颜色,我们可以同时保留填充颜色和透明图案吗?
  • 您必须复制矩形(一个带有颜色,一个带有图案),因为您不能在同一个矩形上同时拥有填充颜色和填充图案。您也许可以修改图案本身并在其中创建背景颜色,但这超出了我的知识范围。即使可以,您也需要为每种颜色复制图案。
【解决方案2】:

更改颜色很简单,只需一个有条件的if 语句。这是我以前用过的一个例子:

svg.selectAll("dot")    
        .data(data)                                     
    .enter().append("circle")                               
        .attr("r", 3.5)     
        .style("fill", function(d) {            // <== Add these
            if (d.close >= 50) {return "red"}  // <== Add these
            else    { return "black" }          // <== Add these
        ;})                                     // <== Add these
        .attr("cx", function(d) { return x(d.date); })       
        .attr("cy", function(d) { return y(d.close); });    

添加一个模式会有点复杂,因为您首先必须将 defs 元素添加到您的 SVG 中,然后再将您的模式添加到其中

//first create you SVG or select it
var svg = d3.select("#container").append("svg");

//then append the defs and the pattern
svg.append("defs").append("pattern")
    .attr("width", 5)
    .attr("height", 5);

【讨论】:

  • 这里我有 if 条件决定它是哪个矩形,我使用图案来填充该矩形,但是这个图案失去了它的原始颜色,我们可以保持填充颜色和透明图案吗?跨度>
  • 我使用图案来填充矩形,但是这种图案失去了原来的颜色,我们可以同时保留填充颜色和透明图案吗?
猜你喜欢
  • 2012-10-19
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多