流星雨……
熟悉HTML5的朋友们应该知道HTML5具有强大的绘图和渲染能力,HTML5配合js的使用比起svg等技术有过之而无不及,而且HTML5图形开发过程也比较简单。 绘制动态的图形算是动画了,当然可以利用Flash实现,但是需要插件支持。下面就简单介绍下HTML5编写动画的过程。
首先:先不讲技术的东西,说说技术与艺术。我觉得在IT领域技术好而缺乏艺术创意,是个好员工,难听点叫代码民工;具有一定艺术创造能力才可能实现技术上的突破。因为技术经过实践与积累总是可以达到,但是艺术是来自于个人的世界观和审美观,这是无法替代与学到的,因此我们教授经常告诫我们不要老是啃技术性的书,多看看、听听建筑学、美学和哲学老师们的书和课。 Jobs应该是很好的例子,他的ipad iphone是技术与艺术的结合体,这种创意是很难被其他IT公司复制的。
话说的有些多,但却是觉得比较重要。 老师们常说,如今想要在IT领域创业并且生存下去,就需要一种无法被别人复制的观念与创意,而不单单是某种技术。大家可以在谷歌图片、必应图片和百度图片里面搜索"javascript"词语,就能发现小到算法,大到文化的公司差距……也就能看到谷歌为什么能够成为巨头。
话说到这里,大家肯定都看过流星之类的照片或实际景象,但是如何勾画起来呢? 有些时候看起来常见的东西,仔细分析起来还确实不易,这需要细心观察。 例如,你知道从你办公楼或住处的楼底到办公室或者公寓的阶梯数目吗?流星是小陨石坠入大气燃烧的现象,因此应该头部明亮,尾部有余光的,如果想做的绚丽,中间可以加点颜色。这样流星的模型就出来了。
其次,回到本文主题,说说技术性的东西吧!
对于整体性的事物常常采用面向对象技术,关于js面向对象可以参看我的《HTML5应用——生日快乐动画之星星》,里面简单介绍了一些。 任何一个具体的事物都有属性,如人有姓名、年龄 等。 因此,流星有速度、颜色、长度等基本属性。
例如我定义的属性
this.x = -1; this.y = -1; this.length = -1; this.width = -1; this.speed = -1; this.alpha = 1; //透明度 this.angle = -1; //以上参数分别表示了流星的坐标、速度和长度 this.color1 = ""; this.color2 = ""; //流星的色彩
一个事物存在总需要有所行为,这种行为就是面向对象的方法了。 例如流星需要移动位置,绘制自己
例如流星获取一个随机颜色,这是中间部分的颜色,头部必须是白色的
/**************获取随机颜色函数*****************/ this.getRandomColor = function () // { var a = 255 * Math.random(); a = Math.ceil(a); var a1 = 255 * Math.random(); a1 = Math.ceil(a1); var a2 = 255 * Math.random(); a2 = Math.ceil(a2); this.color1 = "rgba(" + a.toString() + "," + a1.toString() + "," + a2.toString() + ",1)"; a = 255 * Math.random(); a = Math.ceil(a); a1 = 255 * Math.random(); a1 = Math.ceil(a1); a2 = 255 * Math.random(); a2 = Math.ceil(a2); this.color2 = "rgba(" + a.toString() + "," + a1.toString() + "," + a2.toString() + ",1)"; //this.color1 = "white"; this.color2 = "black"; }
然后移动过程中需要更新自己的坐标
/***************重新计算流星坐标的函数******************/ this.countPos = function ()// { this.x = this.x - this.speed * Math.cos(this.angle * 3.14 / 180); this.y = this.y + this.speed * Math.sin(this.angle * 3.14 / 180); } /*****************获取随机坐标的函数*****************/ this.getPos = function () // { var x = Math.random() * 1000 + 200; this.x = Math.ceil(x); x = Math.random() * 200; this.y = Math.ceil(x); this.width = 5; //假设流星宽度是15 x = Math.random() * 80 + 120; this.length = Math.ceil(x); this.angle = 30; //假设流星倾斜角30 this.speed = 1; //假设流星的速度 }
还需要不断的绘制自己
/****绘制单个流星***************************/ this.drawSingleMeteor = function () //绘制一个流星的函数 { cxt.save(); cxt.beginPath(); cxt.lineWidth = this.width; cxt.globalAlpha = this.alpha; //设置透明度 var line = cxt.createLinearGradient(this.x, this.y, this.x + this.length * Math.cos(this.angle * 3.14 / 180), this.y - this.length * Math.sin(this.angle * 3.14 / 180)); //创建烟花的横向渐变颜色 line.addColorStop(0, "white"); line.addColorStop(0.1, this.color1); line.addColorStop(0.6, this.color2); cxt.strokeStyle = line; cxt.moveTo(this.x, this.y); cxt.lineTo(this.x + this.length * Math.cos(this.angle * 3.14 / 180), this.y - this.length * Math.sin(this.angle * 3.14 / 180)); cxt.closePath(); cxt.stroke(); cxt.restore(); }
在诞生的时候初始化
/****************初始化函数********************/ this.init = function () //初始化 { this.getPos(); this.alpha = 1; this.getRandomColor(); }
这样一个完整的流星对象做好了
最后,需要做许多的流星,并且成有序的运动
所以需要定义存储星星的数组,
var Meteors = new Array(); //流星的数量
var MeteorCount = 1; //流星的数量
利用js的setInterval()函数设置定时器不断更新就好了。
MeteorCount = 20; for (var i = 0; i < MeteorCount; i++) //; { Meteors[i] = new meteor(cxt); Meteors[i].init();//初始化 }
/*************演示流星的函数***********************/ function playMeteors() //流星 { for (var i = 0; i < MeteorCount; i++) //循环处理 { var w=Meteors[i].speed*Math.cos(Meteors[i].angle*3.14/180); var h=Meteors[i].speed*Math.sin(Meteors[i].angle*3.14/180); cxt.clearRect(Meteors[i].x+Meteors[i].length*Math.cos(Meteors[i].angle*3.14/180)-6*w, Meteors[i].y-Meteors[i].length*Math.sin(Meteors[i].angle*3.14/180)-6*h,10*w,10*h); Meteors[i].drawSingleMeteor(); Meteors[i].countPos(); Meteors[i].alpha -= 0.002; if (Meteors[i].y>320||Meteors[i].alpha<=0.01) //到达下线 { cxt.clearRect(Meteors[i].x - 1, Meteors[i].y - Meteors[i].length * Math.sin(Meteors[i].angle * 3.14 / 180), Meteors[i].length * Math.cos(Meteors[i].angle * 3.14 / 180)+2, Meteors[i].length * Math.sin(Meteors[i].angle * 3.14 / 180)+2); Meteors[i] = new meteor(cxt); Meteors[i].init(); } } } /***************************************************************************/
以上是HTML5+JS绘制流星雨的示例代码分享的详细内容。更多信息请关注PHP中文网其他相关文章!

H5通过多媒体支持、离线存储和性能优化提升网页用户体验。1)多媒体支持:H5的和元素简化开发,提升用户体验。2)离线存储:WebStorage和IndexedDB允许离线使用,提升体验。3)性能优化:WebWorkers和元素优化性能,减少带宽消耗。

HTML5代码由标签、元素和属性组成:1.标签定义内容类型,用尖括号包围,如。2.元素由开始标签、内容和结束标签组成,如内容。3.属性在开始标签中定义键值对,增强功能,如。这些是构建网页结构的基本单位。

HTML5是构建现代网页的关键技术,提供了许多新元素和功能。1.HTML5引入了语义化元素如、、等,增强了网页结构和SEO。2.支持多媒体元素和,无需插件即可嵌入媒体。3.表单增强了新输入类型和验证属性,简化了验证过程。4.提供了离线和本地存储功能,提升了网页性能和用户体验。

H5代码的最佳实践包括:1.使用正确的DOCTYPE声明和字符编码;2.采用语义化标签;3.减少HTTP请求;4.使用异步加载;5.优化图像。这些实践能提升网页的效率、可维护性和用户体验。

Web标准和技术从HTML4、CSS2和简单的JavaScript演变至今,经历了显着的发展。 1)HTML5引入了Canvas、WebStorage等API,增强了Web应用的复杂性和互动性。 2)CSS3增加了动画和过渡功能,使页面效果更加丰富。 3)JavaScript通过Node.js和ES6的现代化语法,如箭头函数和类,提升了开发效率和代码可读性,这些变化推动了Web应用的性能优化和最佳实践的发展。

H5不仅仅是HTML5的简称,它代表了一个更广泛的现代网页开发技术生态:1.H5包括HTML5、CSS3、JavaScript及相关API和技术;2.它提供更丰富、互动、流畅的用户体验,能在多设备上无缝运行;3.使用H5技术栈可以创建响应式网页和复杂交互功能。

H5与HTML5指的是同一个东西,即HTML5。HTML5是HTML的第五个版本,带来了语义化标签、多媒体支持、画布与图形、离线存储与本地存储等新功能,提升了网页的表现力和交互性。

H5referstoHTML5,apivotaltechnologyinwebdevelopment.1)HTML5introducesnewelementsandAPIsforrich,dynamicwebapplications.2)Itsupportsmultimediawithoutplugins,enhancinguserexperienceacrossdevices.3)SemanticelementsimprovecontentstructureandSEO.4)H5'srespo


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3汉化版
中文版,非常好用

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

Atom编辑器mac版下载
最流行的的开源编辑器

禅工作室 13.0.1
功能强大的PHP集成开发环境