이것은 멋진 HTML5 Canvas 애니메이션입니다. 우리의 실제 생활에 피어나는 불꽃의 특수 효과를 시뮬레이션합니다. 그 효과는 매우 현실적이지만 결국 여자 친구를 데리고 가더라도 컴퓨터 시뮬레이션입니다. 아직은 효과가 좀 부족해요,헤헤. 이 HTML5 Canvas 애니메이션의 뛰어난 점 중 하나는 성능입니다. Chrome에서는 불꽃놀이를 많이 해도 기본적으로 지연이 없습니다.
이 HTML5 불꽃 특수 효과를 구현하기 위한 프로세스와 코드를 간략하게 분석해 보겠습니다. 주로 HTML 코드, CSS 코드, Javascript 코드로 구성됩니다. 물론 가장 중요한 것은 javascript 코드입니다.
HTML 코드:
- div id=”gui”>div>
- div id=”캔버스-컨테이너”> div id=”mountains2″>div>
- div id=”mountains1″ >div>div id=”스카이라인”>div> div>
HTML의 구조는 매우 간단합니다. 즉, 캔버스 컨테이너가 구성되고 JS를 사용하여 이 컨테이너에 Canvas 개체를 생성합니다. 최종 JS 코드를 보면 알 수 있습니다.
CSS 코드:
- #캔버스-컨테이너 { 배경: #000 url(bg.jpg); 높이: 400px; 왼쪽: 50%; 여백: -200px 0 0 -300px; 위치: 절대; 상위: 50%; 너비: 600px; z-색인: 2;
- } 캔버스 { 커서: 십자선; 디스플레이: 차단; 위치: 친척; z-색인: 3;
- } 캔버스:활성 { 커서: 십자선;
- } #skyline { 배경: url (skyline.png) 반복-x 50% 0; 하단하단: 0; 높이: 135px; 왼쪽: 0; 위치: 절대; 너비: 100%; z-색인: 1;
- } #mountains1 { 배경: url (mountains1.png) 반복-x 40% 0; 하단하단: 0; 높이: 200px; 왼쪽: 0; 위치: 절대; 너비: 100%; z-색인: 1;
- } #mountains2 { 배경: url (mountains2.png) 반복-x 30% 0; 하단하단: 0; 높이: 250px; 왼쪽: 0; 위치: 절대; 너비: 100%; z-색인: 1;
- } #gui { 맞아맞아: 0; 위치: 고정; 상단: 0; z-색인: 3;
- }
CSS 코드는 특별한 것이 없으며 주로 배경색과 테두리를 정의합니다.
다음은 가장 중요한 자바스크립트 코드입니다.
자바스크립트 코드:
- self.init = 함수(){
- self.dt = 0;
- self.oldTime = Date.now();
- self.canvas = document.createElement('캔버스');
- self.canvasContainer = $('#canvas-container'); var canvasContainerDisabled = document.getElementById('canvas-container');
- self.canvas.onselectstart = 함수() { return false;
- };
- self.canvas.width = self.cw = 600;
- self.canvas.height = self.ch = 400;
- self.particles = [];
- self.partCount = 30;
- self.fireworks = [];
- self.mx = self.cw/2;
- self.my = self.ch/2;
- self.currentHue = 170;
- self.partSpeed = 5;
- self.partSpeedVariance = 10;
- self.partWind = 50;
- self.partFriction = 5;
- self.partGravity = 1;
- self.hueMin = 150;
- self.hueMax = 200;
- self.fworkSpeed = 2;
- self.fworkAccel = 4;
- self.hueVariance = 30;
- self.flickerDensity = 20;
- self.showShockwave = false;
- self.showTarget = 참;
- self.clearAlpha = 25;
- self.canvasContainer.append(self.canvas);
- self.ctx = self.canvas.getContext('2d');
- self.ctx.lineCap = '둥근';
- self.ctx.lineJoin = '둥근';
- self.lineWidth = 1;
- self.bindEvents();
- self.canvasLoop();
- self.canvas.onselectstart = 함수() { return false;
- };
- };
이 JS 코드는 주로 캔버스 컨테이너에 캔버스 객체를 구성하고, 캔버스 객체의 모양 및 애니메이션 속성을 초기화합니다.
- var 입자 = 함수(x, y, hue){ 이것.x = x; 이것.y = y; 이것.coordLast = [
- {x: x, y: y},
- {x: x, y: y},
- {x: x, y: y}
- ]; 이것.angle = rand(0, 360); 이것.speed = rand(((self.partSpeed - self.partSpeedVariance) 이것.friction = 1 - self.partFriction/100; 이것.gravity = self.partGravity/2; 이.hue = rand(hue-self.hueVariance, hue self.hueVariance); 이것.brightness = rand(50, 80); 이것.alpha = rand(40,100)/100; 이것.decay = rand(10, 50)/1000; 이것.wind = (rand(0, self.partWind) - (self.partWind/2))/25; 이것.lineWidth = self.lineWidth;
- };
- Particle.prototype.update = 함수(색인){ var 라디안 = this.angle * Math.PI / 180; var vx = Math.cos(라디안) * this.speed; var vy = Math.sin(radians) * this.speed this .중력; 이것.speed *= 이것.friction; 이것.coordLast[2].x = 이것.coordLast[1].x; 이것.coordLast[2].y = 이것.coordLast[1].y; 이것.coordLast[1].x = 이것.coordLast[0].x; 이것.coordLast[1].y = 이것.coordLast[0].y; 이것.coordLast[0].x = 이것.x; 이것.coordLast[0].y = 이것.y; 이것.x = vx * self.dt; 이것.y = vy * self.dt; 이.angle = 이.wind; 이것.alpha -= 이것.decay; if(!hitTest(0,0,self.cw,self.ch,this.x-이.radius, 이.y-이.radius, 이 .radius*2, 이.radius*2) || 이.alpha
- self.particles.splice(index, 1);
- }
- };
- Particle.prototype.draw = 함수(){ var coordRand = (rand(1,3) -1);
- self.ctx.beginPath();
- self.ctx.moveTo(Math.round(this.coordLast[coordRand].x), Math.round(this.coordLast[coordRand].y));
- self.ctx.lineTo(Math.round(this.x), Math.round(this .와이));
- self.ctx.closePath();
- self.ctx.StrokeStyle = 'hsla(' this.hue ' , 100%, ' 이것.밝기 '%, ' 이것.alpha ')';
- self.ctx.Stroke(); if(self.flickerDensity > 0){ var inverseDensity = 50 - self.flickerDensity; if(rand(0, inverseDensity) === inverseDensity){
- self.ctx.beginPath();
- self.ctx.arc(Math.round(this.x), Math.round(this .y), rand(this.lineWidth,this.lineWidth 3)/2, 0, Math.PI*2, 거짓) self.ctx.closePath(); var randAlpha = rand(50,100)/100;
- self.ctx.fillStyle = 'hsla(' this.hue ' , 100%, ' 이것.brightness '%, ' randAlpha ' )';
- self.ctx.fill();
- }
- }
- };
这段JS代码的功能是实现烟꽃爆炸后의 小颗粒的绘绘即, 从draw방법中可以看流, 创建几个随机点,烟꽃颗粒即可在这个范围的随机点中散落。
- var Firework = 함수(startX, startY, targetX, targetY){ 이것.x = startX; 이것.y = startY; 이것.startX = startX; 이것.startY = startY; 이것.hitX = false; 이것.hitY = false; 이것.coordLast = [
- {x: startX, y: startY},
- {x: startX, y: startY},
- {x: startX, y: startY}
- ]; 이것.targetX = targetX; 이것.targetY = targetY; 이것.speed = self.fworkSpeed; 이것.angle =Math.atan2(targetY - startY, targetX - startX); 이것.shockwaveAngle = Math.atan2(targetY - startY, targetX - startX) (90*(Math.PI/180)); 이것.acceleration = self.fworkAccel/100; 이것.hue = self.currentHue; 이것.brightness = rand(50, 80); 이것.alpha = rand(50,100)/100; 이것.lineWidth = self.lineWidth; 이것.targetRadius = 1;
- };
- Firework.prototype.update = 함수(색인){
- self.ctx.lineWidth = 이것.lineWidth;
- vx = Math.cos(this.angle) * this.speed,
- vy = Math.sin(this.angle) * this.speed; 이것.speed *= 1 이것.acceleration; 이것.coordLast[2].x = 이것.coordLast[1].x; 이것.coordLast[2].y = 이것.coordLast[1].y; 이것.coordLast[1].x = 이것.coordLast[0].x; 이것.coordLast[1].y = 이것.coordLast[0].y; 이것.coordLast[0].x = 이것.x; 이것.coordLast[0].y = 이것.y; if(self.showTarget){ if(this.targetRadius 이것.targetRadius = .25 * self.dt;
- } else { 이것.targetRadius = 1 * self.dt;
- }
- } if(이것.startX >= 이것.targetX){ if(this.x vx this.targetX){ 이.x = 이.targetX; 이것.hitX = 참;
- } else { 이것.x = vx * self.dt;
- }
- } else { if(this.x vx >= 이것.targetX){ 이것.x = 이것 .targetX; 이것.hitX = 참;
- } else { 이것.x = vx * self.dt;
- }
- } if(이것.startY >= 이것.targetY){ if(this.y vy this.targetY){ 이.y = 이.targetY; 이것.hitY = 참;
- } else { 이것.y = vy * self.dt;
- }
- } else { if(this.y vy >= 이것.targetY){ 이것.y = 이것 .targetY; 이것.hitY = 참;
- } else { 이것.y = vy * self.dt;
- }
- } if(이것.hitX && 이것.hitY){ var randExplosion = rand(0, 9);
- self.createParticles(this.targetX, this.targetY, this.hue);
- self.fireworks.splice(index, 1);
- }
- };
- Firework.prototype.draw = 함수(){
- self.ctx.lineWidth = 이것.lineWidth; var coordRand = (rand(1,3)-1);
- self.ctx.beginPath();
- self.ctx.moveTo(Math.round(this.coordLast[coordRand].x), Math.round(this.coordLast[coordRand].y));
- self.ctx.lineTo(Math.round(this.x), Math.round(this .와이));
- self.ctx.closePath();
- self.ctx.StrokeStyle = 'hsla(' this.hue ' , 100%, ' 이것.밝기 '%, ' 이것.alpha ')';
- self.ctx.Stroke(); if(self.showTarget){
- self.ctx.save();
- self.ctx.beginPath();
- self.ctx.arc(Math.round(this.targetX), Math.round(this .targetY), 이것.targetRadius, 0, Math.PI*2, false)
- self.ctx.closePath();
- self.ctx.lineWidth = 1;
- self.ctx.Stroke();
- self.ctx.restore();
- } if(self.showShockwave){
- self.ctx.save();
- self.ctx.translate(Math.round(this.x), Math.round(this .와이));
- self.ctx.rotate(this.shockwaveAngle);
- self.ctx.beginPath();
- self.ctx.arc(0, 0, 1*(this.speed/5), 0, Math.PI, 참);
- self.ctx.StrokeStyle = 'hsla(' this.hue ' , 100%, ' 이것.brightness '%, ' 랜드(25, 60)/100 ')';
- self.ctx.lineWidth = 이것.lineWidth;
- self.ctx.Stroke();
- self.ctx.restore();
- }
- };
这段JS代码是创建烟꽃实例的, 나는 当我们鼠标点击画布中的某点时, 烟点时, 烟花发射的目그 땅은 정말 아름답습니다.
这款HTML5 Canvas烟꽃效果的核心代码就是这样,谢谢阅读,希望能帮到大家,请继续关注脚本之家,我们会努력분享更多优秀的文章。

HTML5는 현대적인 웹 페이지를 구축하는 핵심 기술로 많은 새로운 요소와 기능을 제공합니다. 1. HTML5는 웹 페이지 구조 및 SEO를 향상시키는 의미 론적 요소를 소개합니다. 2. 멀티미디어 요소를 지원하고 플러그인없이 미디어를 포함시킵니다. 3. 양식은 새로운 입력 유형 및 검증 속성을 향상시켜 검증 프로세스를 단순화합니다. 4. 웹 페이지 성능 및 사용자 경험을 향상시키기 위해 오프라인 및 로컬 스토리지 기능을 제공합니다.

H5 코드에 대한 모범 사례는 다음과 같습니다. 1. 올바른 문서 선언 및 문자 인코딩 사용; 2. 시맨틱 태그를 사용하십시오. 3. HTTP 요청을 줄입니다. 4. 비동기 부하 사용; 5. 이미지 최적화. 이러한 관행은 웹 페이지의 효율성, 유지 관리 및 사용자 경험을 향상시킬 수 있습니다.

웹 표준과 기술은 현재까지 HTML4, CSS2 및 간단한 JavaScript에서 발전했으며 중대한 개발을 거쳤습니다. 1) HTML5는 캔버스 및 웹 스토리지와 같은 API를 도입하여 웹 응용 프로그램의 복잡성과 상호 작용을 향상시킵니다. 2) CSS3은 애니메이션 및 전환 기능을 추가하여 페이지를보다 효과적으로 만듭니다. 3) JavaScript는 화살표 기능 및 클래스와 같은 Node.js 및 ES6의 최신 구문을 통해 개발 효율 및 코드 가독성을 향상시킵니다. 이러한 변경으로 인해 웹 애플리케이션의 성능 최적화 및 모범 사례의 개발이 촉진되었습니다.

H5는 HTML5의 약어 일뿐 만 아니라 더 넓은 현대 웹 개발 기술 생태계를 나타냅니다. 1. H5는 HTML5, CSS3, JavaScript 및 관련 API 및 기술을 포함합니다. 2. 그것은 더 풍부하고 대화식이며 부드러운 사용자 경험을 제공하며 여러 장치에서 원활하게 실행할 수 있습니다. 3. H5 기술 스택을 사용하여 반응 형 웹 페이지와 복잡한 대화식 기능을 만들 수 있습니다.

H5 및 HTML5는 동일한 것을, 즉 html5를 나타냅니다. HTML5는 HTML의 다섯 번째 버전으로 시맨틱 태그, 멀티미디어 지원, 캔버스 및 그래픽, 오프라인 스토리지 및 로컬 스토리지와 같은 새로운 기능을 제공하여 웹 페이지의 표현성 및 상호 작용성을 향상시킵니다.

h5referstohtml5, apivotaltechnologyinwebdevelopment.1) html5introducesnewelements 및 dynamicwebapplications.2) itsupp ortsmultimediawithoutplugins, enovannangeserexperienceacrossdevices.3) SemanticLementsImproveContentsTructUreAndSeo.4) H5'Srespo

H5 개발에서 마스터 해야하는 도구 및 프레임 워크에는 vue.js, React 및 Webpack이 포함됩니다. 1.vue.js는 사용자 인터페이스를 구축하고 구성 요소 개발을 지원하는 데 적합합니다. 2. 복잡한 응용 프로그램에 적합한 가상 DOM을 통해 페이지 렌더링을 최적화합니다. 3. Webpack은 모듈 포장에 사용되며 리소스로드를 최적화합니다.

html5hassignificallytransformedwebdevelopmentbyintranticalticlementements, 향상 Multimediasupport 및 Improvingperformance.1) itmadewebsitessmoreaccessibleadseo 친환경적 인 요소, 및 .2) Html5intagnatee


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.
