前端学习笔记之用面向对象实现点击按钮生成随机图形

学习了面向对象感觉这个还比较好玩,于是分享出来和大家交流一下!

以下是完整代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div class="buttoned">
        <input type="button" class="triangle" value="创造三角形">
        <input type="button" class="circle" value="创造圆形">
        <input type="button" class="rectangle" value="创造矩形">
        <input type="button" class="square" value="创造正方形">
        <input type="button" class="start" value="开始">
    </div>
    <script>
        class Graph {
            constructor(left, top, color) {
                this.left = left;
                this.top = top;
                this.color = color;
                this.node = null;
            }
            setPosition({ left, top }) {
                Object.assign(this, { left, top });
            }
            getPosition() { }
            setColor(String) { }
            getColor() { }
            setSize() { }
            getSize() { }
        }
        class Triangle extends Graph {
            constructor(left, top, color, height, bottom) {
                super(left, top, color);
                this.height = height;
                this.bottom = bottom;
                this.init();
            }
            init() {
                this.render();
            }
            render() {
                this.node = document.createElement("div");
                document.body.appendChild(this.node);
                Object.assign(this.node.style, {
                    left: this.left + "px",
                    top: this.top + "px",
                    position: "absolute",
                    borderLeft: this.bottom / 2 + "px" + " solid rgba(0,0,0,0)",
                    borderRight: this.bottom / 2 + "px" + " solid rgba(0,0,0,0)",
                    borderBottom: this.height + "px" + " solid " + this.color
                });

            }
        }
        class Circle extends Graph {
            constructor(left, top, color, radius) {
                super(left, top, color);
                this.radius = radius;
                this.init();
            }
            init() {
                this.render();
            }
            render() {
                this.node = document.createElement("div");
                document.body.appendChild(this.node);
                Object.assign(this.node.style, {
                    left: this.left + "px",
                    top: this.top + "px",
                    position: "absolute",
                    width: this.radius * 2 + "px",
                    height: this.radius * 2 + "px",
                    backgroundColor: this.color,
                    borderRadius: this.radius + "px"
                });
                console.log(this);
            }
        }
        class Rectangle extends Graph {
            constructor(left, top, color, height, width) {
                super(left, top, color);
                this.height = height;
                this.width = width;
                this.init();
            }
            init() {
                this.render();
            }
            render() {
                this.node = document.createElement("div");
                document.body.appendChild(this.node);
                Object.assign(this.node.style, {
                    left: this.left + "px",
                    top: this.top + "px",
                    position: "absolute",
                    width: this.width + "px",
                    height: this.height + "px",
                    backgroundColor: this.color,
                });
            }
        }
        class Square extends Rectangle {
            constructor(left, top, color, length) {
                super(left, top, color);
                this.length = length;
                this.init();
            }
            init() {
                this.render();
            }
            render() {
                this.node = document.createElement("div");
                document.body.appendChild(this.node);
                Object.assign(this.node.style, {
                    left: this.left + "px",
                    top: this.top + "px",
                    position: "absolute",
                    width: this.length + "px",
                    height: this.length + "px",
                    backgroundColor: this.color,
                });
            }
        }
        // const tri1 = new Triangle(100, 100, "red", 100, 100);
        // const cir1 = new Circle(200, 200, "blue", 50, 50);
        // const rec1 = new Rectangle(300, 300, "green", 100, 60);
        // const squ1 = new Square(400, 400, "yellow", 200);
        let i = 99;
        let size = 1;
        function stop() {
            clearTimeout(t)
        }
        let t;
        function lucency() {
            new Circle(random(0, innerHeight), random(0, innerWidth), `rgba(${random(0, 255)},${random(0, 255)},${random(0, 255)},${i / 99})`, size);
            i--;
            size++;
            if (i > 0) {
                t = setTimeout("lucency()", 35);
            } else {
                buttons[4].value = "开始";
                alert("透明度已经到0,程序停止运行");
                size = 1;
            }
        }
        let buttoned = document.querySelector(".buttoned");
        let buttons = document.querySelectorAll("input");
        document.addEventListener("click", function (event) {
            const tar = event.target;
            if (tar.type === "button") {
                let [left, top, color] = [random(0, innerWidth), random(0, innerHeight), `rgb(${random(0, 255)},${random(0, 255)},${random(0, 255)})`]
                switch (tar.className) {
                    case "triangle":
                        new Triangle(left, top, color, random(1, 100), random(1, 100));
                        break;
                    case "circle":
                        new Circle(left, top, color, random(1, 50), random(1, 50));
                        break;
                    case "rectangle":
                        new Rectangle(left, top, color, random(1, 100), random(1, 100));
                        break;
                    case "square":
                        new Square(left, top, color, random(1, 200));
                        break;
                    case "start":
                        lucency()
                        buttons[4].value = "停止";
                        break;
                    case "stop":
                        lucency()
                        buttons[4].value = "开始";
                        size = 1;
                        stop()
                        i = 99;
                        break;
                }
            }

        })

        function random(min, max) {
            return parseInt(Math.random() * (max - min)) + min;
        }

    </script>
</body>

</html>
posted @ 2020-06-21 10:40  昨夜小楼又东风。  阅读(227)  评论(0编辑  收藏  举报