搜索
首页web前端H5教程HTML5应用-生日快乐动画之实现星星的示例代码分享

              在讲述绘制星星动画之前,先介绍一点javascript知识。

             面向对象: javascript本质上不是面向对象语言,而是脚本语言,一般只适合简单、代码量少的程序,因为脚本过于复杂会直接导致浏览器出现异常。 但是javascript还是具有面向对象的特点的。对于多过程、多对象的脚本程序还是建议构建对象,这样对于脚本的维护、修改和调用都是很方便的。javascript构造对象很简单,比起java、c++简单很多, 例如构建一辆汽车的对象:

<pre name="code" class="javascript"><span style="font-size:18px;">var Car=function()//构建车的对象  
{     this.color="red";    
      this.price=100000;    
      this.length=2.5;    
      this.speed=80;   //车的一些属性    
      this.x=0;    
      this.updatePos=function()  //更新车位置的方法    
      {    this.x+=this.speed;    
      }  
}  
</span>


  
构建好对象之后就可以构建对象了,
var mycar=new Car();  

setInterval():这是javascript中的定时器函数,有两个参数,前面是待执行的代码, 后面一个是间隔时间。但是有几点需要注意的问题。

1:假设有一个函数GetPos()需要用定时器执行, 可以setInterval(GetPos,1000)或者setInterval("GetPos()",1000) 如果写成setInterval(GetPos,1000)一般只会执行一次这个函数,我曾经犯过这个错误。

2:在setInterval()中尽量使用全局变量,因为它重复调用,局部变量容易出错。

好了,罗嗦了一会儿,我想大家应该都知道这些的。

这个gif图片中包括了星星对象和文字(后面讲述)对象。 对于绘制星星,应该充分利用五角星的对称性。 在HTML5 canvas对象中,大家最好要灵活使用坐标变换,我把主要的坐标变换函数说一下:

<span style="color:#ff0000;">
<span style="font-size:18px;">save() //保存当前画布状态  
restore()回复画布状态  
translate(x,y) //将画布中心坐标平移至x,y  
rotate(angle) //将画布旋转angle角度  
transform 和setTransform是对画布矩形进行变换的,比较难用</span></span>
现在构建星星对象,星星在天空中需要哪些属性呢? 一般有坐标、亮度、大小、倾斜角度等,我定义的如下

<span style="font-size:18px;">   this.x = -1;  
    this.y = -1;  //表示横纵坐标  
    this.style = "";  
    this.r = -1;  
    this.scale = 1; //表示缩放倍数  
    this.angle = 0; //旋转的角度  
    this.angle1 = 0; //辅助参数</span>
    

其次需要绘制星星的方法,前面说过需要利用星星的对称性,因此实际上只需要绘制五分之一, 再利用旋转就可以绘制全部的图形了。星星需要填充颜色,HTML5中可以对路径进行填充, 因此可以使用路径beginPath()和closePath(),但是最后记住使用fill()函数填充的。

例如我绘制五分之一图形函数:

<span style="font-size:18px;"> this.drawPartStar = function () //部分  
    {  
        cxt.save();  
        cxt.beginPath();  
        cxt.lineCap = "round"; cxt.lineWidth = 5;  
        cxt.fillStyle = this.style;  
        cxt.translate(this.x, this.y); //位移  
        cxt.rotate(this.angle1);  
        //cxt.globalAlpha = this.alpha; //设置透明度  
        cxt.moveTo(0, 0);  
        var xx = 0 - this.r * Math.sin(36 / 180 * 3.14);  
        var yy = 0 - this.r * Math.cos(36 / 180 * 3.14);  
        cxt.lineTo(xx, yy);  
        xx = 0;  
        yy = 0 - this.r * Math.cos(36 / 180 * 3.14) 
        - this.r * Math.sin(36 / 180 * 3.14) * Math.tan(72 / 180 * 3.14);  
        cxt.lineTo(xx, yy);  
        xx = this.r * Math.sin(36 / 180 * 3.14);  
        yy = 0 - this.r * Math.cos(36 / 180 * 3.14);  
        cxt.lineTo(xx, yy);  
        cxt.lineTo(0, 0);  
        cxt.closePath();  
        cxt.fill();  
        cxt.restore();  
    }</span>

然后利用画布旋转就可以得到整个的图形了

<span style="font-size:18px;">this.drawStar = function () //绘制完整的花  
    {  
        for (var i = 0; i <= 4; i++) {  
            this.angle1 = i * 72 / 180 * 3.14 + this.angle;  
            this.drawPartStar();  
        }  
    }</span>

关于星星的坐标,半径大小,倾斜角度都可以使用随机函数实现,利用实现m到n之间的随机数:

<span style="font-size:18px;">var x=(n-m)*Math.random()+m;</span>

通过合理控制m,n就可以得到需要的值了。


好了,到这里星星对象创建过程结束,其次需要构建这些星星。 由于星星数目多,可以使用数组对象,每一个数组对象都是一个星星对象:

<span style="font-size:18px;"> 
var stars = new Array();   //创建星星对象  
    var starCount = 40; //星星的数目,默认是40   
  
for (var m = 0; m < starCount; m++) //  
    {  
        var s = new star(cxt);  
        s.init();stars[m] = s;  
    }</span>

最后使用定时器,使星星具有闪烁效果:

<span style="font-size:18px;"> 
/***************演示闪烁星星的函数**********************/  
    function playStars() //演示星星  
    {  
        for (var n = 0; n < starCount; n++)  
       {  
        stars[n].getColor();  
        stars[n].drawStar();  
        }  
    }</span>
setInterval("playStars()",500);

这样,闪烁的星星就全部做完了。

以上就是我说的利用对象构建闪烁星星的过程。 大家可以看到利用对象的简便和独立性,希望还不熟悉的朋友可以熟悉这种方法。


最后把star.js中关于星星对象的全部代码写在这里供大家参考

<span style="font-size:18px;">

/******star.js******/  
/****以下是星星的对象**********************************/  
var star = function (cxt) //定义星的对象  
{  
    this.x = -1;  
    this.y = -1;  //表示横纵坐标  
    this.style = "";  
    this.r = -1;  
    this.scale = 1; //表示缩放倍数  
    this.angle = 0; //旋转的角度  
    this.angle1 = 0; //辅助参数  
    this.getPos = function () //获取随机坐标  
    {  
        var xx = 20 + 1200 * Math.random();  
        var yy = 20 + 250 * Math.random();  
        this.x = Math.ceil(xx); this.y = Math.ceil(yy); //获取了随机坐标  
    }  
    this.getAngle = function () //得到随机的角度  
    {  
        this.angle = Math.random() * Math.PI;  
    }  
    this.getR = function () //获取半径  
    {  
        var i = 1 + 4 * Math.random();  
        this.r = Math.ceil(i); //获取随机半径  
    }  
    this.getColor = function () //获取随机颜色  
    {  
        var n = Math.random();  
        if (n < 0.5)  
            this.style = "white";  
        else  
            this.style = "#BBAAB1"; //灰白色  
  
    }  
    this.drawPartStar = function () //部分  
    {  
        cxt.save();  
        cxt.beginPath();  
        cxt.lineCap = "round"; cxt.lineWidth = 5;  
        cxt.fillStyle = this.style;  
        cxt.translate(this.x, this.y); //位移  
        cxt.rotate(this.angle1);  
        //cxt.globalAlpha = this.alpha; //设置透明度  
        cxt.moveTo(0, 0);  
        var xx = 0 - this.r * Math.sin(36 / 180 * 3.14);  
        var yy = 0 - this.r * Math.cos(36 / 180 * 3.14);  
        cxt.lineTo(xx, yy);  
        xx = 0;  
        yy = 0 - this.r * Math.cos(36 / 180 * 3.14) 
        - this.r * Math.sin(36 / 180 * 3.14) * Math.tan(72 / 180 * 3.14);  
        cxt.lineTo(xx, yy);  
        xx = this.r * Math.sin(36 / 180 * 3.14);  
        yy = 0 - this.r * Math.cos(36 / 180 * 3.14);  
        cxt.lineTo(xx, yy);  
        cxt.lineTo(0, 0);  
        cxt.closePath();  
        cxt.fill();  
        cxt.restore();  
    }  
    this.drawStar = function () //绘制完整的花  
    {  
        for (var i = 0; i <= 4; i++) {  
            this.angle1 = i * 72 / 180 * 3.14 + this.angle;  
            this.drawPartStar();  
        }  
    }  
    this.init = function ()  //初始化函数  
    {  
        this.getPos();  
        this.getR();  
        this.getColor();  
        this.getAngle();  
    }  
}  
/*****************以上是星星的对象**************************/</span
>


以上是HTML5应用-生日快乐动画之实现星星的示例代码分享的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
H5:HTML5的关键改进H5:HTML5的关键改进Apr 28, 2025 am 12:26 AM

HTML5带来了五个关键改进:1.语义化标签提升了代码清晰度和SEO效果;2.多媒体支持简化了视频和音频嵌入;3.表单增强简化了验证;4.离线与本地存储提高了用户体验;5.画布与图形功能增强了网页的可视化效果。

HTML5:标准及其对Web开发的影响HTML5:标准及其对Web开发的影响Apr 27, 2025 am 12:12 AM

HTML5的核心特性包括语义化标签、多媒体支持、离线存储与本地存储、表单增强。1.语义化标签如、等,提升代码可读性和SEO效果。2.和标签简化多媒体嵌入。3.离线存储和本地存储如ApplicationCache和LocalStorage,支持无网络运行和数据存储。4.表单增强引入新输入类型和验证属性,简化处理和验证。

H5代码示例:实际应用和教程H5代码示例:实际应用和教程Apr 25, 2025 am 12:10 AM

H5提供了多种新特性和功能,极大地增强了前端开发的能力。1.多媒体支持:通过和元素嵌入媒体,无需插件。2.画布(Canvas):使用元素动态渲染2D图形和动画。3.本地存储:通过localStorage和sessionStorage实现数据持久化存储,提升用户体验。

H5和HTML5之间的连接:相似性和差异H5和HTML5之间的连接:相似性和差异Apr 24, 2025 am 12:01 AM

H5和HTML5是不同的概念:HTML5是HTML的一个版本,包含新元素和API;H5是基于HTML5的移动应用开发框架。HTML5通过浏览器解析和渲染代码,H5应用则需要容器运行并通过JavaScript与原生代码交互。

H5代码的基础:密钥元素及其目的H5代码的基础:密钥元素及其目的Apr 23, 2025 am 12:09 AM

HTML5的关键元素包括、、、、、等,用于构建现代网页。1.定义头部内容,2.用于导航链接,3.表示独立文章内容,4.组织页面内容,5.展示侧边栏内容,6.定义页脚,这些元素增强了网页的结构和功能性。

HTML5和H5:了解常见用法HTML5和H5:了解常见用法Apr 22, 2025 am 12:01 AM

HTML5和H5没有区别,H5是HTML5的简称。1.HTML5是HTML的第五个版本,增强了网页的多媒体和交互功能。2.H5常用于指代基于HTML5的移动网页或应用,适用于各种移动设备。

HTML5:现代网络的基础(H5)HTML5:现代网络的基础(H5)Apr 21, 2025 am 12:05 AM

HTML5是超文本标记语言的最新版本,由W3C标准化。HTML5引入了新的语义化标签、多媒体支持和表单增强,提升了网页结构、用户体验和SEO效果。HTML5引入了新的语义化标签,如、、、等,使网页结构更清晰,SEO效果更好。HTML5支持多媒体元素和,无需第三方插件,提升了用户体验和加载速度。HTML5增强了表单功能,引入了新的输入类型如、等,提高了用户体验和表单验证效率。

H5代码:编写清洁有效的HTML5H5代码:编写清洁有效的HTML5Apr 20, 2025 am 12:06 AM

如何写出干净高效的HTML5代码?答案是通过语义化标签、结构化代码、性能优化和避免常见错误。1.使用语义化标签如、等,提升代码可读性和SEO效果。2.保持代码结构化和可读性,使用适当缩进和注释。3.优化性能,通过减少不必要的标签、使用CDN和压缩代码。4.避免常见错误,如标签未闭合,确保代码有效性。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器