어떻게 ES6 의 클 라 스 클래스 계승 을 사용 하여 화려 한 작은 공 효 과 를 실현 합 니까?

소개 하 다.
이 효 과 는 Canvas 캔버스 로 그립 니 다.class 클래스 계승 을 이용 하여 구현 되 며,이 효 과 는 마우스 가 지정 한 Canvas 위치 에서 이동 하면 현재 마우스 위치 에서 무 작위 색상 의 작은 공 을 만 들 고,이후 작은 공 은 서서히 사라 집 니 다.
효과 도표

실현 절차
HTML 을 쓰다
캔버스 캔버스 환경 만 들 기
소 구 류 공 을 쓰다.
  • 구기(Ball)를 계승 하 는 무 브 볼 류 실현
  • 예화 소 구HTML 구조
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>    </title>
        <style>
            #canvas{
                margin-left: 100px
            }
        </style>
    </head>
    <body>
        <canvas id="canvas">        canvas</canvas>
    
        <!-- <script src="./underscore-min.js"></script>  -->
        <!-- underscore          _.random  ,                -->
        <script src="./index.js"></script>
    </body>
    </html>
    
    캔버스 캔버스 환경 만 들 기
    
     // index.js
     
     // 1、       
     const canvas = document.getElementById('canvas');
     const ctx = canvas.getContext('2d');
      
     //          
     canvas.width = 1000;
     canvas.height = 600;
     canvas.style.backgroundColor = '#000'
    
    실례 해석
    우선,canvas 요 소 를 찾 습 니 다:
    
    const canvas=document.getElementById("myCanvas");
    
    
    그리고 context 대상 만 들 기:
    
    const ctx = canvas.getContext('2d');
    
    
    와 이 드 하 이 백 경 치 를 설정 합 니 다.
    필기구
    
    // index.js
    
     // 2、   
     class Ball {
         constructor (x, y, color) {
             this.x = x;   // x 
             this.y = y;   // y 
             this.color = color;   //      
             this.r = 40;   //      
         }
     
         //     
         render () {
             ctx.save();
             ctx.beginPath();
             ctx.arc(this.x, this.y, this.r , 0, Math.PI * 2);
             ctx.fillStyle = this.color;
             ctx.fill();
             ctx.restore();
         }
     }
    
    실례 해석
    4.567917.안에 constructor()방법 이 있 는데 이것 이 바로 구조 방법 이 고 this 키 워드 는 인 스 턴 스 대상 을 대표 합 니 다현재 환경 을 보존 하 는 상태
  • beginPath()---시작 경로 또는 현재 경 로 를 초기 화 합 니 다
  • arc()---호/곡선 을 만 드 는 데 사용(원 또는 일부 원 을 만 드 는 데 사용)--매개 변 수 는 다음 표
  • 매개 변수
    묘사 하 다.
    x
    원 의 중심 x 좌표.
    y
    원 의 중심 y 좌표.
    r
    원 의 반지름.
    sAngle
    시작 각 은 라디에이터 로 계산한다.
    eAngle
    끝 각 은 라디에이터 로 계산한다.
    counterclockwise
    선택 할 수 있다.시계 반대 방향 으로 그림 을 그 려 야 하 는 지,아니면 시계 반대 방향 으로 그림 을 그 려 야 하 는 지 를 규정 하 다.false=시계 방향,true=시계 반대 방향.
  • fillStyle()-그림 을 채 울 색상,그 라 데 이 션 또는 모드 를 설정 하거나 되 돌려 줍 니 다
  • 현재 그림(경로)을 채 웁 니 다
  • restore()---이전에 저 장 된 경로 상태 와 속성 을 되 돌려 줍 니 다
  • 공(Ball)을 계승 하 는 무 브 볼 류 구현
    
    // index.js
    
    // 3、       
    class MoveBall extends Ball { //   
        constructor (x, y, color) {
            super(x, y, color);
    
            //       
            //        
            this.dX = Random(-5, 5);
            this.dY = Random(-5, 5);
            //         ,                 
            this.dR = Random(1, 3);
        }
    
        // 4、          
        upDate () {
            this.x += this.dX;
            this.y += this.dY;
            this.r -= this.dR;
            //            0
            if(this.r < 0) {
                this.r = 0  //    0       
            }
        }
    }
    
    실례 해석
  • 여기 서 MoveBall 류 를 정 의 했 는데 이 종 류 는 extends 키 워드 를 통 해 Ball 류 의 모든 속성 과 방법 을 계승 했다
  • 4.567917.슈퍼 키 워드 는 부모 류 의 구조 함 수 를 나타 내 고 부모 류 의 this 대상 을 새로 만 드 는 데 사용 합 니 다.하위 클래스 는 constructor 방법 에서 슈퍼 방법 을 호출 해 야 합 니 다.그렇지 않 으 면 새 인 스 턴 스 를 만 들 때 오류 가 발생 할 수 있 습 니 다.이것 은 하위 클래스 자신의 this 대상 이 먼저 부모 클래스 의 구조 함 수 를 통 해 만 들 고 부모 클래스 와 같은 인 스 턴 스 속성 과 방법 을 얻 은 다음 에 이 를 가공 하고 하위 클래스 자신의 인 스 턴 스 속성 과 방법 을 더 해 야 하기 때 문 입 니 다.슈퍼 방법 을 사용 하지 않 으 면 하위 클래스 는 this 대상 을 얻 을 수 없습니다.(..자세 한 내용 은 클릭 하 세 요. )
  • upDate 방법의 목적 은 작은 공의 위치 와 반경 을 바 꾸 고 마우스 위치 에 따라 서로 다른 변 화 를 하 는 것 이다
  • 실례 화 소 구
    
    // index.js
    
    // 5、     
    
    //        
    let ballArr = [];
    
    //              underscore-min.js         ,       _.random
    let Random = (min, max) => {
        return Math.floor(Math.random() * (max - min) + min);
    }
    
    //        
    canvas.addEventListener('mousemove', function (e){
        //      
        //           let colorArr = ['red', 'green', 'blue', 'yellow', 'orange', 'pink'];
        // bgcolor ==> colorArr[Random(0, colorArr.length - 1)]
        let bgColor =  `rgb(${Random(0,256)}, ${Random(0,256)}, ${Random(0,256)})`;
        ballArr.push(new MoveBall(e.offsetX, e.offsetY, bgColor));
        console.log(ballArr);
    })
    
    //       
    setInterval(function () {
    
        //   
        ctx.clearRect(0, 0, canvas.width, canvas.height);
    
        //     
        for (let i = 0 ; i < ballArr.length; i++ ) {
            ballArr[i].render();
            ballArr[i].upDate();
        }
    }, 50);
    
    실례 해석
  • 무 작위 색 을 만 드 는 데 사용 되 는 Random 함 수 를 썼 습 니 다
  • 4.567917.마우스 의 이동 을 감청 하여 이동 하 는 작은 공 을 만 든 다음 에 작은 공 을 저장 하 는 배열 에 밀어 넣 으 면 배열 의 작은 공 은 render 와 upDate 방법 이 있 고 마지막 으로 Ball 류 의 render 방법 으로 그립 니 다.MoveBall 의 upDate 방법 을 호출 합 니 다.이 정도 면 효과 가 나 올 거 야!4.567917.clearRect 스크린 샷 작업-주어진 사각형 에서 지정 한 픽 셀 을 제거 합 니 다(4.567915.).화면 을 맑 게 하지 않 는 효 과 는 다음 그림 을 보 세 요
    우 리 는 스크린 하지 않 고 작은 공의 반지름 이 점점 줄 어 들 면서 마지막 작은 공 은 사라 지지 않 는 다 는 것 을 볼 수 있다.왜 사람들 이 원 하 는 효 과 는 그렇지 않 을 까?모니터 의 효 과 는 무엇 일 까요?바로 문장 첫머리 의 그 효과 다!보,재미있게 놀 았 어 요.❤)
    index.js 전체 코드
    
    // 1、       
    const canvas = document.getElementById('canvas');
    const ctx = canvas.getContext('2d');
    
    //          
    canvas.width = 1000;
    canvas.height = 600;
    canvas.style.backgroundColor = '#000'
    
    // 2、   
    class Ball {
        constructor (x, y, color) {
            this.x = x;
            this.y = y;
            this.color = color;
            this.r = 40;
        }
    
        //     
        render () {
            ctx.save();
            ctx.beginPath();
            ctx.arc(this.x, this.y, this.r , 0, Math.PI * 2);
            ctx.fillStyle = this.color;
            ctx.fill();
            ctx.restore();
        }
    
    }
    
    // 3、       
    class MoveBall extends Ball { //   
        constructor (x, y, color) {
            super(x, y, color);
    
            //       
            //        
            this.dX = Random(-5, 5);
            this.dY = Random(-5, 5);
            //         
            this.dR = Random(1, 3);
        }
    
        // 4、          
        upDate () {
            this.x += this.dX;
            this.y += this.dY;
            this.r -= this.dR;
            //            0
            if(this.r < 0) {
                this.r = 0
            }
        }
    
    }
    
    // 5、     
    
    //        
    let ballArr = [];
    
    //              underscore-min.js         ,       _.random
    let Random = (min, max) => {
        return Math.floor(Math.random() * (max - min) + min);
    }
    
    //        
    canvas.addEventListener('mousemove', function (e){
        //      
        //           let colorArr = ['red', 'green', 'blue', 'yellow', 'orange', 'pink'];
        // bgcolor ==> colorArr[Random(0, colorArr.length - 1)]
        let bgColor =  `rgb(${Random(0,256)}, ${Random(0,256)}, ${Random(0,256)})`;
        ballArr.push(new MoveBall(e.offsetX, e.offsetY, bgColor));
        console.log(ballArr);
    })
    
    //       
    setInterval(function () {
    
        //   
        ctx.clearRect(0, 0, canvas.width, canvas.height);
    
        //     
        for (let i = 0 ; i < ballArr.length; i++ ) {
            ballArr[i].render();
            ballArr[i].upDate();
        }
    }, 50);
    
    총결산
    이 작은 demo 가 ES6 에서 class 류 의 이해 와 사용 을 더욱 잘 알 게 해 주 기 를 바 랍 니 다.ES6 의 class 류 계승 을 어떻게 사용 하여 화려 한 작은 공 효 과 를 실현 하 는 지 에 관 한 글 은 여기까지 소개 합 니 다.더 많은 ES6 class 류 계승 실현 작은 공 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기