【问题标题】:creating drop shadow on a rectangle and a circle on top of it在矩形上创建阴影并在其上创建一个圆形
【发布时间】:2022-01-21 01:18:40
【问题描述】:

我的左侧有一个矩形和一个圆形。 两者都是白色的。

我正在尝试在矩形上创建一个投影,并在矩形左侧部分顶部的圆形上创建一个投影。

这是一个小提琴

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 个过滤器,一个用于矩形,一个用于圆形。 我在圆圈上将它们注释掉并纠正。

【问题讨论】:

    标签: css svg d3.js


    【解决方案1】:

    您需要创建一个 defs 元素。目前您正在选择一个,但没有任何内容可供选择,因为您没有创建一个。

    我增加了矩形阴影的不透明度、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>

    【讨论】:

    • 谢谢罗伯特。它有效
    猜你喜欢
    • 2012-12-13
    • 2014-02-19
    • 2016-07-16
    • 2023-03-17
    • 1970-01-01
    • 2017-04-01
    • 2021-11-24
    • 2023-01-31
    • 2013-03-07
    相关资源
    最近更新 更多