从代码去认识SVG(二)

1,141 阅读3分钟

从代码去认识SVG(二)

如何使用SVG绘制交互式图形

您可以使用SVG的交互功能来创建交互式图形。这些功能允许您在图形上添加事件监听器,以便在用户与图形交互时执行特定的操作。

例如,您可以使用onclick属性来添加一个鼠标单击事件监听器。当用户单击图形时,将执行指定的JavaScript代码。

下面是一个简单的示例,演示如何使用onclick属性来创建一个交互式图形:

<svg width="100" height="100">
    <rect x="10" y="10" width="80" height="80" fill="red" onclick="changeColor(evt)"/>
</svg>

<script>
    function changeColor(evt) {
        var rect = evt.target;
        rect.setAttribute("fill", "green");
    }
</script>

在上面的代码中,我们创建了一个矩形,并为其添加了一个onclick属性。当用户单击矩形时,将调用changeColor函数。在此函数中,我们使用setAttribute方法来更改矩形的填充颜色。

这里有一个简单的交互式SVG图形示例,它使用onclick属性来添加一个鼠标单击事件监听器:

<svg width="100" height="100">
    <rect x="10" y="10" width="80" height="80" fill="red" onclick="changeColor(evt)"/>
</svg>

<script>
    function changeColor(evt) {
        var rect = evt.target;
        var color = rect.getAttribute("fill") === "red" ? "green" : "red";
        rect.setAttribute("fill", color);
    }
</script>

在上面的代码中,我们创建了一个矩形,并为其添加了一个onclick属性。当用户单击矩形时,将调用changeColor函数。在此函数中,我们使用setAttribute方法来更改矩形的填充颜色。

要使用SVG绘制更复杂的交互式图形,您可以使用多个事件监听器并将它们组合在一起。例如,您可以使用onclickonmouseoveronmouseout属性来添加鼠标单击、悬停和离开事件监听器。

此外,您还可以使用JavaScript来动态更改图形的属性和内容。这可以让您更容易的创建复杂的交互式图形。

下面是一个简单的示例,演示如何使用多个事件监听器和JavaScript来创建一个复杂的交互式图形:

<svg width="200" height="200">
    <rect id="myRect" x="10" y="10" width="80" height="80" fill="red"
          onclick="changeColor()" onmouseover="grow()" onmouseout="shrink()"/>
</svg>

<script>
    function changeColor() {
        var rect = document.getElementById("myRect");
        var color = rect.getAttribute("fill") === "red" ? "green" : "red";
        rect.setAttribute("fill", color);
    }

    function grow() {
        var rect = document.getElementById("myRect");
        rect.setAttribute("width", "100");
        rect.setAttribute("height", "100");
    }

    function shrink() {
        var rect = document.getElementById("myRect");
        rect.setAttribute("width", "80");
        rect.setAttribute("height", "80");
    }
</script>

在上面的代码中,我们创建了一个矩形,并为其添加了多个事件监听器。当用户单击矩形时,将调用changeColor函数;当用户将鼠标悬停在矩形上时,将调用grow函数;当用户将鼠标移开矩形时,将调用shrink函数。在这些函数中,我们使用setAttribute方法来动态更改矩形的属性。

这里有一个更复杂的交互式SVG图形示例,它使用多个事件监听器和JavaScript来创建一个复杂的动画序列:

<svg width="200" height="200">
    <rect id="myRect" x="10" y="10" width="80" height="80" fill="red"
          onclick="changeColor()" onmouseover="grow()" onmouseout="shrink()"/>
    <circle id="myCircle" cx="150" cy="50" r="40" fill="#ff00ff"
            onclick="changeColor()" onmouseover="grow()" onmouseout="shrink()"/>
</svg>

<script>
    function changeColor() {
        var rect = document.getElementById("myRect");
        var circle = document.getElementById("myCircle");
        var color = rect.getAttribute("fill") === "red" ? "green" : "red";
        rect.setAttribute("fill", color);
        circle.setAttribute("fill", color);
    }

    function grow() {
        var rect = document.getElementById("myRect");
        var circle = document.getElementById("myCircle");
        rect.setAttribute("width", "100");
        rect.setAttribute("height", "100");
        circle.setAttribute("r", "50");
    }

    function shrink() {
        var rect = document.getElementById("myRect");
        var circle = document.getElementById("myCircle");
        rect.setAttribute("width", "80");
        rect.setAttribute("height", "80");
        circle.setAttribute("r", "40");
    }
</script>

在上面的代码中,我们创建了一个矩形和一个圆形,并为它们添加了多个事件监听器。当用户单击图形时,将调用changeColor函数;当用户将鼠标悬停在图形上时,将调用grow函数;当用户将鼠标移开图形时,将调用shrink函数。在这些函数中,我们使用setAttribute方法来动态更改图形的属性。

总结

上面这些示例都介绍了在html中如何使用script创建一些SVG变化,您可以尝试运行这些代码并查看效果。