在矩形上创建投影并在其顶部创建圆圈
creating drop shadow on a rectangle and a circle on top of it
我有一个长方形,左边是一个圆。
都是白色的。
我正在尝试在矩形上创建一个投影,并在矩形左侧部分顶部的圆上创建一个投影。
这是一个fiddle
https://jsfiddle.net/fLbz6qn1/30/
let svg = d3.select("#container")
.append("svg");
svg.select("defs")
.append("svg:filter")
.attr("id", "nodeShadow")
.append("feDropShadow")
.attr("dx", 0.5)
.attr("dy", 3.2)
.attr("stdDeviation", 3)
.attr("flood-opacity", 0.3)
.attr("flood-color", "lightgray");
svg.select("defs")
.append("svg:filter")
.attr("id", "circleShadow")
.append("feDropShadow")
.attr("dx", 2.0)
.attr("dy", 1.6)
.attr("stdDeviation", 4)
.attr("flood-color", "lightgray");
// node
let containerNode = svg.append("g");
containerNode.append("rect")
.attr("x", 100)
.attr("y", 150)
//.attr("filter", "url(#nodeShadow)")
.attr("fill", "#FFFFFF")
.attr("width", 250)
.attr("height", 30);
containerNode.append("circle")
.attr("cx", 115)
.attr("cy", 165)
.attr("r", 15)
.attr("fill", "transparent")
//.attr("filter", "url(#circleShadow)")
.attr("stroke", "#ffffff")
.attr("stroke-width", "0.001")
.attr("width", 30)
.attr("height", 30);
我创建了 2 个过滤器,一个用于矩形,一个用于圆形。
我在圈子里把他们评论出来了。
您需要创建一个 defs 元素。目前您正在 select 创建一个,但 select 没有任何内容,因为您没有创建一个。
我增加了矩形阴影的不透明度、dx 和 dy,因此它在做某事时更加明显。
let svg = d3.select("#container")
.append("svg");
svg.append("defs")
svg.select("defs")
.append("filter")
.attr("width", "160%")
.attr("height", "160%")
.attr("id", "nodeShadow")
.append("feDropShadow")
.attr("dx", 8)
.attr("dy", 8)
.attr("stdDeviation", 3)
.attr("flood-opacity", 1)
.attr("flood-color", "lightgray");
svg.select("defs")
.append("filter")
.attr("id", "circleShadow")
.append("feDropShadow")
.attr("dx", 2.0)
.attr("dy", 1.6)
.attr("stdDeviation", 4)
.attr("flood-color", "lightgray");
// node
let containerNode = svg.append("g");
containerNode.append("rect")
.attr("x", 100)
.attr("y", 150)
.attr("filter", "url(#nodeShadow)")
.attr("fill", "#FFFFFF")
.attr("width", 250)
.attr("height", 30);
containerNode.append("circle")
.attr("cx", 115)
.attr("cy", 165)
.attr("r", 15)
.attr("fill", "transparent")
//.attr("filter", "url(#circleShadow)")
.attr("stroke", "#ffffff")
.attr("stroke-width", "0.001")
.attr("width", 30)
.attr("height", 30);
#container {
height: 100%;
width: 100%;
}
svg {
background: yellow;
width: 1324px;
height: 324px;
}
.node {
fill: #FFFFFF;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<div id="container"></div>
我有一个长方形,左边是一个圆。 都是白色的。
我正在尝试在矩形上创建一个投影,并在矩形左侧部分顶部的圆上创建一个投影。
这是一个fiddle
https://jsfiddle.net/fLbz6qn1/30/
let svg = d3.select("#container")
.append("svg");
svg.select("defs")
.append("svg:filter")
.attr("id", "nodeShadow")
.append("feDropShadow")
.attr("dx", 0.5)
.attr("dy", 3.2)
.attr("stdDeviation", 3)
.attr("flood-opacity", 0.3)
.attr("flood-color", "lightgray");
svg.select("defs")
.append("svg:filter")
.attr("id", "circleShadow")
.append("feDropShadow")
.attr("dx", 2.0)
.attr("dy", 1.6)
.attr("stdDeviation", 4)
.attr("flood-color", "lightgray");
// node
let containerNode = svg.append("g");
containerNode.append("rect")
.attr("x", 100)
.attr("y", 150)
//.attr("filter", "url(#nodeShadow)")
.attr("fill", "#FFFFFF")
.attr("width", 250)
.attr("height", 30);
containerNode.append("circle")
.attr("cx", 115)
.attr("cy", 165)
.attr("r", 15)
.attr("fill", "transparent")
//.attr("filter", "url(#circleShadow)")
.attr("stroke", "#ffffff")
.attr("stroke-width", "0.001")
.attr("width", 30)
.attr("height", 30);
我创建了 2 个过滤器,一个用于矩形,一个用于圆形。 我在圈子里把他们评论出来了。
您需要创建一个 defs 元素。目前您正在 select 创建一个,但 select 没有任何内容,因为您没有创建一个。
我增加了矩形阴影的不透明度、dx 和 dy,因此它在做某事时更加明显。
let svg = d3.select("#container")
.append("svg");
svg.append("defs")
svg.select("defs")
.append("filter")
.attr("width", "160%")
.attr("height", "160%")
.attr("id", "nodeShadow")
.append("feDropShadow")
.attr("dx", 8)
.attr("dy", 8)
.attr("stdDeviation", 3)
.attr("flood-opacity", 1)
.attr("flood-color", "lightgray");
svg.select("defs")
.append("filter")
.attr("id", "circleShadow")
.append("feDropShadow")
.attr("dx", 2.0)
.attr("dy", 1.6)
.attr("stdDeviation", 4)
.attr("flood-color", "lightgray");
// node
let containerNode = svg.append("g");
containerNode.append("rect")
.attr("x", 100)
.attr("y", 150)
.attr("filter", "url(#nodeShadow)")
.attr("fill", "#FFFFFF")
.attr("width", 250)
.attr("height", 30);
containerNode.append("circle")
.attr("cx", 115)
.attr("cy", 165)
.attr("r", 15)
.attr("fill", "transparent")
//.attr("filter", "url(#circleShadow)")
.attr("stroke", "#ffffff")
.attr("stroke-width", "0.001")
.attr("width", 30)
.attr("height", 30);
#container {
height: 100%;
width: 100%;
}
svg {
background: yellow;
width: 1324px;
height: 324px;
}
.node {
fill: #FFFFFF;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<div id="container"></div>