【发布时间】:2018-06-04 22:55:48
【问题描述】:
如何使用过滤器和 d3.js 在 svg 中部分更改阴影不透明度?
我指的是写有Entity Name的矩形所投下的阴影。
这是我目前能够实现的目标:
var svg = d3.select("#drawRegion")
.append("svg")
.attr("width", "100%")
.attr("height", "100%");
var defs = svg.append("defs");
var filter = defs.append("filter")
.attr("id","coolShadow");
filter.append("feMorphology")
.attr("in", "SourceGraphic")
.attr("result", "upperLayer")
.attr("operator", "dilate")
.attr("radius", "2 2");
filter.append("feMorphology")
.attr("in", "SourceAlpha")
.attr("result", "enlargedAlpha")
.attr("operator", "dilate")
.attr("radius", "3 5");
filter.append("feGaussianBlur")
.attr("in", "enlargedAlpha")
.attr("result", "bluredAlpha")
.attr("stdDeviation", "5");
filter.append("feOffset")
.attr("in", "bluredAlpha")
.attr("result", "lowerLayer")
.attr("dy", "3");
var feMerge = filter.append("feMerge");
feMerge.append("feMergeNode")
.attr("in","lowerLayer");
feMerge.append("feMergeNode")
.attr("in","upperLayer");
svg.append("rect")
.attr("rx", 2)
.attr("ry", 2)
.attr("x", "20%")
.attr("y", "20%")
.attr("width", "60%")
.attr("height", "60%")
.attr("fill", "white")
.style("filter", "url(#coolShadow)");
#drawRegion {
width: 100%;
height: 100%;
display: inline-block;
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
position: relative;
}
<div id="drawRegion">
</div>
<script src="https://d3js.org/d3.v5.min.js"></script>
如您所见,阴影几乎已准备就绪。唯一我不知道如何实现 - 是增加的不透明度(现在它太增加了,我想降低它,但同时保留左侧、顶部和右侧边框的透明度)。
我尝试降低整体不透明度,但没有帮助:左、上和右边框透明度也降低了,而我想让下边框部分更透明并保留其他边框。
我将不胜感激任何可以让我解决问题或完全不同的解决方案的更正。
【问题讨论】:
标签: javascript d3.js svg svg-filters