闲着没事用html5写了一个canvas时钟。

Crazywa 2011-03-13 08:24:46

<!DOCTYPE html>
<html>
<head>
<title>canvas时钟</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
</head>

<body>
<canvas id="canvas" width="200" height="200" style="border:1px solid #000;">您的浏览器不支持Canvas。</canvas>
<script type="text/javascript" language="javascript" charset="utf-8">
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
if(ctx){
var timerId;
var frameRate = 60;
function canvObject(){
this.x = 0;
this.y = 0;
this.rotation = 0;
this.borderWidth = 2;
this.borderColor = '#000000';
this.fill = false;
this.fillColor = '#ff0000';
this.update = function(){
if(!this.ctx)throw new Error('你没有指定ctx对象。');
var ctx = this.ctx
ctx.save();
ctx.lineWidth = this.borderWidth;
ctx.strokeStyle = this.borderColor;
ctx.fillStyle = this.fillColor;
ctx.translate(this.x, this.y);
if(this.rotation)ctx.rotate(this.rotation * Math.PI/180);
if(this.draw)this.draw(ctx);
if(this.fill)ctx.fill();
ctx.stroke();
ctx.restore();
}
};
function Line(){};
Line.prototype = new canvObject();
Line.prototype.fill = false;
Line.prototype.start = [0,0];
Line.prototype.end = [5,5];
Line.prototype.draw = function(ctx){
ctx.beginPath();
ctx.moveTo.apply(ctx,this.start);
ctx.lineTo.apply(ctx,this.end);
ctx.closePath();
};

function Circle(){};
Circle.prototype = new canvObject();
Circle.prototype.draw = function(ctx){
ctx.beginPath();
ctx.arc(0, 0, this.radius, 0, 2 * Math.PI, true);
ctx.closePath();
};

var circle = new Circle();
circle.ctx = ctx;
circle.x = 100;
circle.y = 100;
circle.radius = 90;
circle.fill = true;
circle.borderWidth = 6;
circle.fillColor = '#ffffff';

var hour = new Line();
hour.ctx = ctx;
hour.x = 100;
hour.y = 100;
hour.borderColor = "#000000";
hour.borderWidth = 10;
hour.rotation = 0;
hour.start = [0,20];
hour.end = [0,-50];

var minute = new Line();
minute.ctx = ctx;
minute.x = 100;
minute.y = 100;
minute.borderColor = "#333333";
minute.borderWidth = 7;
minute.rotation = 0;
minute.start = [0,20];
minute.end = [0,-70];

var seconds = new Line();
seconds.ctx = ctx;
seconds.x = 100;
seconds.y = 100;
seconds.borderColor = "#ff0000";
seconds.borderWidth = 4;
seconds.rotation = 0;
seconds.start = [0,20];
seconds.end = [0,-80];

var center = new Circle();
center.ctx = ctx;
center.x = 100;
center.y = 100;
center.radius = 5;
center.fill = true;
center.borderColor = 'orange';

for(var i=0,ls=[],cache;i<12;i++){
cache = ls[i] = new Line();
cache.ctx = ctx;
cache.x = 100;
cache.y = 100;
cache.borderColor = "orange";
cache.borderWidth = 2;
cache.rotation = i * 30;
cache.start = [0,-70];
cache.end = [0,-80];
}

timerId = setInterval(function(){
// 清除画布
ctx.clearRect(0,0,200,200);
// 填充背景色
ctx.fillStyle = 'orange';
ctx.fillRect(0,0,200,200);
// 表盘
circle.update();
// 刻度
for(var i=0;cache=ls[i++];)cache.update();
// 时针
hour.rotation = (new Date()).getHours() * 30;
hour.update();
// 分针
minute.rotation = (new Date()).getMinutes() * 6;
minute.update();
// 秒针
seconds.rotation = (new Date()).getSeconds() * 6;
seconds.update();
// 中心圆
center.update();
},(1000/frameRate)|0);
}else{
alert('您的浏览器不支持Canvas无法预览.\n跟我一起说:"Fuck Internet Exploer!"');
}
</script>
</body>
</html>

还写了个WebSocket的聊天室,服务器端用PHP Socket写的,聊天表情部分服务器端传输暂时没有处理好,就不分享代码了。
...全文
548 16 打赏 收藏 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
老人与海 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sysdzw 的回复:]

效果不错啊,楼主!

跟我一起说:"楼主,你好厉害!"
[/Quote]
"楼主,你好厉害!"
madpc 2011-03-14
  • 打赏
  • 举报
回复
还有 hitTest, 层次关系,碰撞。。。 都是非重要的东西
madpc 2011-03-14
  • 打赏
  • 举报
回复
库最好能向flash靠拢, 支持缩放,旋转,翻转,嵌套,色彩混合,关键帧,坐标变换 ...

话说,做网页动画的ide已经有了,好像是 css3 为主实现的
无·法 2011-03-14
  • 打赏
  • 举报
回复
效果不错啊,楼主!

跟我一起说:"楼主,你好厉害!"
hch126163 2011-03-14
  • 打赏
  • 举报
回复
楼主牛人!厉害
bhbhxy 2011-03-14
  • 打赏
  • 举报
回复
建议先判断浏览器是否支持getContext方法
不然在不支持html5的浏览器会出现脚本错误
if(element.getContext) {
var obj = element.getContext("2d");
}
kaifadi 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 theforever 的回复:]

时间和现实会让人变得成熟也变得淡漠。
[/Quote]
+++++++++
人就是这样,一切都是因为虚荣心在做怪!最后都为了生活!

楼主的代码不错,挺一下!
  • 打赏
  • 举报
回复
时间和现实会让人变得成熟也变得淡漠。
  • 打赏
  • 举报
回复
前些时候想研究一下HTML5的,但一想到研究与应用之间的距离,就没兴趣了。想学的东西太多,学哪一个都是舍弃了其余很多,所以只有马上可以应用的才是最合适去学的。时间和现实会让人觉得成熟也变得淡漠。
上海程序员3 2011-03-13
  • 打赏
  • 举报
回复
有没有在线看的地址?
zoujp_xyz 2011-03-13
  • 打赏
  • 举报
回复
html5 很不错。。。
Crazywa 2011-03-13
  • 打赏
  • 举报
回复
其实一开始想做的是一个canvas动画小库,先实现一个具体功能,然后再抽象出来动画需要的模块来。
看那个frameRate就能看出来。
所有新的动画对象模型都可以继承canvObject来扩展。
过两天有空的时候再抽象一下。

之前写过一个dom元素的动画小库,类似jQ的动画,自定义比jQ的要好一些,可惜公司做电子商务的,用不上,只能自己摆弄着玩了。
叶子 2011-03-13
  • 打赏
  • 举报
回复
不错 赞一个!
showenxxx 2011-03-13
  • 打赏
  • 举报
回复
呵呵 Fuck Internet Exploer

IE9已经开始支持了

楼主自己写的吗,挺厉害
内容概要:本文介绍了基于Matlab代码实现的电力系统机组组合优化调度方法,适用于IEEE14、IEEE30和IEEE118节点标准测试系统。该资源聚焦于电力系统中发电机组的优化调度问题,通过智能优化算法实现对机组启停、出力分配等决策的最优化,旨在降低运行成本、提升系统可靠性和经济性。文中系统阐述了从数学模型构建、多类型约束处理到优化算法设计与仿真实验验证的完整研究流程,并提供了可复现的Matlab代码,涵盖目标函数设定、约束条件建模及算法求解过程,适用于电力系统调度、能源优化等相关领域的科研与教学实践。; 适合人群:具备电力系统分析、运筹学基础及Matlab编程能力的高校学生、科研人员和工程技术人员,尤其适合从事电力系统优化、智能算法应用研究的研究生与青年学者。; 使用场景及目标:①用于电力系统机组组合(UC)问题的教学实验与课程设计;②支撑科研工作中对遗传算法、粒子群算法等智能优化算法在电力系统调度中应用的研究;③为含可再生能源接入的现代电网调度提供仿真平台与技术参考,助力低碳电力系统规划与运行。; 阅读建议:建议读者结合电力系统调度理论与优化建模知识,深入理解机组组合问题的数学本质与物理约束,再通过Matlab代码进行仿真实践,重点关注算法收敛性、多目标权衡策略与不同测试系统间的性能对比,以实现理论与实践的深度融合。
内容概要:本文研究了一种基于TCN-BiGRU-Attention混合神经网络模型的风电功率预测方法,旨在提升预测精度。该模型融合了时间卷积网络(TCN)对局部时序特征的强大提取能力、双向门控循环单元(BiGRU)对时间序列前后依赖关系的双向捕捉能力,以及注意力(Attention)机制对关键时间步特征的自适应加权聚焦能力。研究采用多变量输入方式,综合纳入风速、风向、温度等多种气象因素作为输入特征,实现风电功率的单步预测。通过对实际风电场数据的实验验证,该模型在预测精度方面相较于单一模型或其他组合模型展现出显著优势,有效降低了预测误差。; 适合人群:具备一定机器学习与深度学习基础,从事新能源预测、电力系统调度或相关领域研究的科研人员与工程技术人员。; 使用场景及目标:①应用于风电场功率实时预测,提升电网调度的稳定性与安全性;②为电力市场交易、储能配置和可再生能源消纳提供高精度数据支持;③作为深度学习模型融合设计的参考案例,推动时序预测技术的发展。; 阅读建议:此资源提供了完整的Matlab代码实现,读者在学习时应重点关注模型结构的设计原理、多变量特征的处理方式以及Attention机制的融入方法,建议结合代码进行复现实验,调整参数以深入理解各组件对最终预测性能的影响。
内容概要:本文聚焦于非线性值迭代自适应动态规划(ADP)算法的研究,通过复现Matlab代码深入探讨离散时间非线性系统的策略迭代方法。文章系统阐述了ADP算法的核心原理,重点分析了其在处理非线性系统时的优势与挑战,并详细展示了值迭代与策略迭代在优化控制策略中的具体实现过程。研究强调了通过迭代优化实现系统性能最大化的方法论,同时提供了完整的代码与文档资源,便于读者进行深入学习与实践。; 适合人群:具备一定编程基础,尤其是对Matlab有初步了解的研发人员,以及从事控制理论、自动化、人工智能等领域的研究人员和研究生。; 使用场景及目标:① 为控制理论与自动化领域的研究者提供非线性系统控制策略设计与实现的实用案例;② 为学生和初学者提供学习与理解自适应动态规划算法及其在非线性系统中应用的实践机会;③ 推动相关领域的学术交流与技术进步,激发更多研究者投身于非线性控制系统的研究与优化。; 阅读建议:此资源兼具理论深度与实践指导。建议读者在学习过程中紧密结合理论知识与代码操作,动手实现算法,并通过调整参数或应用场景来深化理解。同时,可参考提供的参考资料,进一步探索自适应动态规划领域的最新研究进展。

87,984

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧