看到网上很多展示html5雪花飞动的效果,确实非常引人入胜,我相信大家也跟我一样看着心动的同时,也很好奇,想研究下代码如何实现;虽然很多地方也能下载这些源码,不过也不知道别人制作此类动画时的思路及难点分析。
我这几天刚好学习了一下,也趁着此刻有时间从需求分析、知识点、程序编写一步步给大家解剖下,要是在各位关公面前耍大刀了,可别见笑哟。
最终效果图如下:
图1
一、需求分析
1、圆形雪花
本示例中雪花形状使用圆形
2、雪花数量固定
根据图1仔细观察白色雪花数量,飘落过程中,整张图的雪花数量应该是固定的,这个需求是需要通过我们观察分析所得。这与我们现实生活中看到一幅雪花满天飞的场景是一致的。
3、雪花大小不一致
每朵雪花它们大小各有不同,也就意味着雪花的半径是随机的。这与我们现实生活中看到一幅雪花满天飞的场景也是一致的。
4、雪花位置在移动
雪花飘落,自然它们的位置也在移动。
二、知识点
1、使用Html5 Canvas+JavaScript画圆——构成圆形雪花
在Html5中,需要使用Canvas同时借助JavaScript画圆,以构成圆形雪花——arc(x,y,r,start,stop);
2、随机数—产生不同半径、坐标的圆形雪花
本示例中,网页第一次加载时,需要生成一定数量的不同半径及位置的雪花,故半径、坐标为随机数;雪花在飘落过程中,其半径不变,坐标在一定幅度内变化,故此时坐标也为随机数——Math.random()
三、程序编写
1、准备工作
放一个画布canvas,并且设置整个body背景色为黑色
HTML代码:
- canvas id="mycanvas">
- 您的浏览器不支持canvas画布
- canvas>
CSS代码:
- * {
- margin: 0;
- padding: 0;
- }
- #mycanvas {
- background: black;
- }
此时效果如如下:
注意:canvas默认是有一个初始化高度和宽度的,所以不用去纠结
2、画布满屏显示
JavaScript代码如下:
- //获取mycanvas画布
- var can = document.getElementById("mycanvas");
- var ctx = can.getContext("2d");
- //画布宽度
- var wid = window.innerWidth;
- //画布高度
- var hei = window.innerHeight;
- can.width=wid;
- can.height=hei;
此时效果如如下:
3、初始化生成固定数量的雪花
根据我们上述需求分析及知识点解读,首先雪花的数量是固定的,所以我们需要定义一个变量var snow = 100;这里假设雪花数量为100,;
生成雪花的时候,每个雪花半径、位置都不同,我们把每个雪花当做一个对象,那么这个对象的属性就包含:半径、坐标(X、Y),那么一个雪花对象可以写成var snowOject={x:1,y:10,r:5},这里就代表一个坐标为(1,10)半径为5的圆形雪花;本示例中由于半径和坐标都为随机数,故使用Math.random()分别为100个雪花生成半径、坐标(X、Y);
那我们这里是100个雪花,所以为了方便后面操作,就用一个数组保存这100个雪花对象。
JavaScript代码如下:
- //雪花数目
- var snow = 100;
- //雪花坐标、半径
- var arr = []; //保存各圆坐标及半径
- for (var i = 0; i
- arr.push({
- x: Math.random() * wid,
- y: Math.random() * hei,
- r: Math.random() * 10 + 1
- })
- }
4、绘制雪花
上面我们已经将100个雪花半径、坐标(X、Y)生成,下面就是循环使用canvas画出雪花了(这里就是画圆),这里定义一个函数
JavaScript代码如下:
- //画雪花
- function DrawSnow() {
- ctx.fillStyle="white";
- ctx.beginPath();
- for (var i = 0; i
- var p = arr[i];
- ctx.moveTo(p.x,p.y);
- ctx.arc(p.x,p.y,p.r,0,2*Math.PI,false);
- }
- ctx.fill();
- ctx.closePath();
然后调用 DrawSnow()函数,效果如下:
可以尝试多次刷新网页看是否会生成不同大小、位置的雪花(正常情况下是可以的),做到这里就已经接近最终效果了
注意:由于这里需要绘制100个圆,所以每当画一个圆时重新定义绘制开始坐标即:ctx.moveTo(p.x,p.y);否则会出现异样效果,不信可以试试呀
5、雪花飘动
上面我们已经画出100个雪花,可惜只能依靠刷新网页才能看到变化效果,但是我们需要实现的是雪花不停的移动位置。
首先我们需要借助setInterval函数不停的重画雪花,这里间隔时间为50毫秒:setInterval(DrawSnow,50);
同时每一朵雪花的坐标(X、Y)需要不停的改变(在一定幅度内),我们这里的雪花是从左上方飘落到右下方,所以每朵X、Y坐标值都在不停的增大,那我们用一个函数SnowFall()定义雪花飘过规则
该函数代码如下:
- //雪花飘落
- function SnowFall() {
- for (var i = 0; i
- var p = arr[i];
- p.y += Math.random() * 2 + 1;
- if (p.y > hei) {
- p.y = 0;
- }
- p.x += Math.random() * 2 + 1;
- if (p.x > wid) {
- p.x = 0;
- "white-space:pre"> }
- }
- }
然后将该函数放入DrawSnow()执行,注意:我们每隔50毫毛重画雪花,必须擦除画布,所以DrawSnow()函数体内必须在前面执行clearRect()函数,即:ctx.clearRect(0, 0, wid, hei);
此时DrawSnow函数定义如下:
- //画雪花
- function DrawSnow() {
- ctx.clearRect(0, 0, wid, hei);
- ctx.fillStyle = "white";
- ctx.beginPath();
- for (var i = 0; i
- var p = arr[i];
- ctx.moveTo(p.x, p.y);
- ctx.arc(p.x, p.y, p.r, 0, 2 * Math.PI, false);
- }
- ctx.fill();
- SnowFall();
- ctx.closePath();
- }
最后执行setInterval(DrawSnow, 50);
OK,经过我们上述步骤,小伙伴们是否已经对整个过程及技术实现很清晰了。
完整代码如下(大家可以直接复制到自己项目中执行,测试下效果):
- nbsp;html>
- html>
- head>
- meta charset="utf-8" />
- title>title>
- script src="js/jquery-1.8.3.min.js">script>
- style type="text/css">
- * {
- margin: 0;
- padding: 0;
- }
- #mycanvas {
- background: black;
- }
- style>
- head>
- body>
- canvas id="mycanvas">
- 您的浏览器不支持canvas画布
- canvas>
- script>
- //获取mycanvas画布
- var can = document.getElementById("mycanvas");
- var ctx = can.getContext("2d");
- //画布宽度
- var wid = window.innerWidth;
- //画布高度
- var hei = window.innerHeight;
- can.width = wid;
- can.height = hei;
- //雪花数目
- var snow = 100;
- //雪花坐标、半径
- var arr = []; //保存各圆坐标及半径
- for (var i = 0; i snow; i++) {
- arr.push({
- x: Math.random() * wid,
- y: Math.random() * hei,
- r: Math.random() * 10 + 1
- })
- }
- //画雪花
- function DrawSnow() {
- ctx.clearRect(0, 0, wid, hei);
- ctx.fillStyle = "white";
- ctx.beginPath();
- for (var i = 0; i snow; i++) {
- var p = arr[i];
- ctx.moveTo(p.x, p.y);
- ctx.arc(p.x, p.y, p.r, 0, 2 * Math.PI, false);
- }
- ctx.fill();
- SnowFall();
- ctx.closePath();
- }
- //雪花飘落
- function SnowFall() {
- for (var i = 0; i snow; i++) {
- var p = arr[i];
- p.y += Math.random() * 2 + 1;
- if (p.y > hei) {
- p.y = 0;
- }
- p.x += Math.random() * 2 + 1;
- if (p.x > wid) {
- p.x = 0;
- }
- }
- }
- setInterval(DrawSnow, 50);
- script>
- body>
- html>
好了,今天分享就到这里,希望对大家的学习有所帮助。
原文:http://www.cnblogs.com/tangyifeng/p/5253629.html

H5는 다양한 새로운 기능과 기능을 제공하여 프론트 엔드 개발 기능을 크게 향상시킵니다. 1. 멀티미디어 지원 : 미디어를 포함하고 요소를 포함하여 플러그인이 필요하지 않습니다. 2. 캔버스 : 요소를 사용하여 2D 그래픽 및 애니메이션을 동적으로 렌더링합니다. 3. 로컬 스토리지 : LocalStorage 및 SessionStorage를 통해 지속적인 데이터 저장을 구현하여 사용자 경험을 향상시킵니다.

H5 및 HTML5는 다른 개념입니다. HTML5는 새로운 요소 및 API를 포함하는 HTML의 버전입니다. H5는 HTML5를 기반으로 한 모바일 애플리케이션 개발 프레임 워크입니다. HTML5는 브라우저를 통해 코드를 구문 분석하고 렌더링하는 반면 H5 응용 프로그램은 컨테이너를 실행하고 JavaScript를 통해 기본 코드와 상호 작용해야합니다.

HTML5의 주요 요소에는 최신 웹 페이지를 작성하는 데 사용되는 ,,,,, 등이 포함됩니다. 1. 헤드 컨텐츠 정의, 2. 링크를 탐색하는 데 사용됩니다. 3. 독립 기사의 내용을 나타내고, 4. 페이지 내용을 구성하고, 5. 사이드 바 컨텐츠 표시, 6. 바닥 글을 정의하면, 이러한 요소는 웹 페이지의 구조와 기능을 향상시킵니다.

HTML5와 H5 사이에는 차이가 없으며, 이는 HTML5의 약어입니다. 1.HTML5는 HTML의 다섯 번째 버전으로 웹 페이지의 멀티미디어 및 대화식 기능을 향상시킵니다. 2.H5는 종종 HTML5 기반 모바일 웹 페이지 또는 응용 프로그램을 참조하는 데 사용되며 다양한 모바일 장치에 적합합니다.

HTML5는 W3C에 의해 표준화 된 하이퍼 텍스트 마크 업 언어의 최신 버전입니다. HTML5는 새로운 시맨틱 태그, 멀티미디어 지원 및 양식 향상을 도입하여 웹 구조, 사용자 경험 및 SEO 효과를 개선합니다. HTML5는 웹 페이지 구조를 더 명확하게하고 SEO 효과를 더 좋게하기 위해, 등 등과 같은 새로운 시맨틱 태그를 소개합니다. HTML5는 멀티미디어 요소를 지원하며 타사 플러그인이 필요하지 않으므로 사용자 경험을 향상시키고 속도를로드합니다. HTML5는 양식 함수를 향상시키고 사용자 경험을 향상시키고 양식 검증 효율성을 향상시키는 새로운 입력 유형을 도입합니다.

깨끗하고 효율적인 HTML5 코드를 작성하는 방법은 무엇입니까? 답은 태그, 구조화 된 코드, 성능 최적화 및 일반적인 실수를 피함으로써 일반적인 실수를 피하는 것입니다. 1. 코드 가독성 및 SEO 효과를 향상시키기 위해 시맨틱 태그 등을 사용하십시오. 2. 적절한 계약과 의견을 사용하여 코드를 구성하고 읽을 수 있도록하십시오. 3. CDN 및 압축 코드를 사용하여 불필요한 태그를 줄임으로써 성능을 최적화합니다. 4. 태그가 닫히지 않은 것과 같은 일반적인 실수를 피하고 코드의 유효성을 확인하십시오.

H5는 멀티미디어 지원, 오프라인 스토리지 및 성능 최적화로 웹 사용자 경험을 향상시킵니다. 1) 멀티미디어 지원 : H5 및 요소는 개발을 단순화하고 사용자 경험을 향상시킵니다. 2) 오프라인 스토리지 : WebStorage 및 IndexedDB는 오프라인으로 사용하여 경험을 향상시킵니다. 3) 성능 최적화 : 웹 워즈 및 요소는 성능을 최적화하여 대역폭 소비를 줄입니다.

HTML5 코드는 태그, 요소 및 속성으로 구성됩니다. 1. 태그는 컨텐츠 유형을 정의하고 다음과 같은 각도 브래킷으로 둘러싸여 있습니다. 2. 요소는 컨텐츠와 같은 시작 태그, 내용 및 엔드 태그로 구성됩니다. 3. 속성 시작 태그에서 키 값 쌍을 정의하고 기능을 향상시킵니다. 웹 구조를 구축하기위한 기본 단위입니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

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

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

Dreamweaver Mac版
시각적 웹 개발 도구
