SVG绘制圆形的运用

2020-11-26 15:00:41 浏览数 (1)

运用SVG绘图写一个动画特效。

动画效果如下:

实现代码如下:

代码语言:javascript复制
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>SVG绘图——圆形</title>
    <style>
        body {
            text-align: center;
        }
        svg {
            background: #ddd;
        }
    </style>
</head>

<body>
    <h1>SVG绘图——圆形</h1>
    <svg id="s9" width="500" height="400"></svg>
    <script>
        // random number:返回指定范围内的随机整数
        function rn(min, max) {
            var n = Math.floor(Math.random() * (max - min)   min);
            return n;
        };
        // random color: 返回指定范围内的随机颜色
        function rc(min, max) {
            var r = rn(min, max);
            var g = rn(min, max);
            var b = rn(min, max);
            return `rgb(${r},${g},${b})`;
        };
        for (var i = 0; i < 30; i  ) {
            var c = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
            c.setAttribute('r', rn(10, 80));
            c.setAttribute('cx', rn(0, 500));
            c.setAttribute('cy', rn(0, 400));
            c.setAttribute('fill', rc(0, 255));
            c.setAttribute('fill-opacity', Math.random());
            c.onclick = function () {
                // this对象在程序中随时会改变,而var that=this之后,that没改
                // 变之前仍然是指向当时的this,这样就不会出现找不到原来的对象
                var that = this;
                // 为防止当前圆形再次被点击,应取消其事件监听
                that.onclick = null;
                // 启用定时器
                var t = setInterval(function () {
                    // 获得半径
                    var r = that.getAttribute('r');
                    // 半径递增
                    r *= 1.05;
                    // 设置半径
                    that.setAttribute('r', r);
                    // 获得透明度
                    var p = that.getAttribute('fill-opacity');
                    // 透明度递减
                    p *= 0.9;
                    // 设置透明度
                    that.setAttribute('fill-opacity', p);
                    // 圆形几乎已经看不见了
                    if (p < 0.0001) {
                        // 清除定时器
                        clearInterval(t);
                        // 删除圆形
                        s9.removeChild(that);
                    }

                }, 30);
            };
            s9.appendChild(c);
        }
    </script>
</body>

</html>

0 人点赞