【问题标题】:d3.js - masking shapes to create transparent sectiod3.js - 遮罩形状以创建透明截面
【发布时间】:2017-01-14 11:58:49
【问题描述】:

我有兴趣学习如何使用 d3.js 创建透明蒙版。

http://jsfiddle.net/59bunh8u/35/

这就是我要做的事情 - 我将如何在红色矩形上创建减法蒙版 - 以及如何设置红色矩形的样式以获取更多的乘法样式属性?

$(document).ready(function() {

  var el = $(".mask"); //selector

  // Set the main elements for the series chart
  var svg = d3.select(el[0]).append("svg")
    .attr("class", "series")
    .attr("width", "800px")
    .attr("height", "500px")
    .append("g")
    .attr("transform", "translate(0,0)")


  var rect = svg
    .append("rect")
    .attr("x", 0)
    .attr("y", 0)
    .attr("width", 500)
    .attr("height", 500)
    .style("fill", "red")
    .style('opacity', 0.75)

  var rect = svg
    .append("circle").attr("cx", 250).attr("cy", 250).attr("r", 125).style("fill", "white");


});

【问题讨论】:

标签: javascript css d3.js


【解决方案1】:

您需要一个 SVG 蒙版。随意使用它来调整参数:

  var mask = svgroot
     .append("defs")
     .append("mask")
     .attr("id", "myMask");

  mask.append("rect")
    .attr("x", 0)
    .attr("y", 0)
    .attr("width", 500)
    .attr("height", 500)
    .style("fill", "white")
    .style("opacity", 0.7);        

  mask.append("circle")
    .attr("cx", 300)
    .attr("cy", 300)
    .attr("r", 100);

修改示例:http://jsfiddle.net/59bunh8u/40/

另见SVG clipPath to clip the *outer* content out

【讨论】:

  • 太棒了——如何填充矩形以获取更多乘法/photoshop 属性
  • 我不知道 Photoshop 是如何进行乘法运算的,但根据w3.org/TR/SVG/masking.html#Masking,'mask' 元素执行某种乘法运算。请检查 SVG 过滤器(feBlend 元素)是否有助于实现类似于 Photoshop 的乘法:w3.org/TR/SVG/filters.html#feBlendElement
  • --我认为掩蔽已经完成-但是如果您对填充/颜色调整有更多想法-而不是使用十六进制进行填充-使用 rgba 值怎么样
  • 哦,是的,这是我的代码中的一个错误。为了清楚起见,我应该使用 fill="white" 和 opacity=0..1 。见jsfiddle.net/59bunh8u/40。此蒙版将矩形和内部的圆圈转换为黑白,然后从该图像中获取不透明度(0 - 透明,1 - 不透明)。里面的矩形是红色的,红色转换成黑白比例的东西,这就是不透明度的来源。
  • 我已进一步尝试增强此代码库 - 赋予它更多的复杂性和响应能力 - stackoverflow.com/questions/39380789/…
猜你喜欢
  • 2017-02-02
  • 2020-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-27
相关资源
最近更新 更多