JavaScript中setInterval不能正确延时? chromejavascripthtml5动画canvas 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 alert会阻断代码执行,虽然不太清除你想实现怎么的效果,你可以吧timer累加放在showcolumns中,并且在执行函数中判断,当到达一定条件时清除定时器即可。 我并不需要那个alert 弹窗,浏览网页的人不可能看一次网页点200次确定哈我的意思是,如果我加进去alert,就能明显的看出动画效果,但是去掉alert就只显示最后一帧。 举个例子,你看电影,如果每秒钟弹出一个窗口,那么你就能正常的看到电影的每一帧,但是每次要按下确定;但是不加alert,就只显示电影结尾的演员列表。 参考如下,应该是在定时器执行的函数中做判断会比较容易var iT=0;var timer=null;function test(){ if(iT>=5)//控制动作为5次,5次后结束定时器 clearInterval(timer);//清除定时器 alert(iT);//事件处理 iT++;//累加}timer=setInterval('test()',1000); if(timer<=200){setInterval(showcolumns(),1000);timer++;}如果你这段代码是放在循环中的,那么会在瞬间执行完毕,也就是你延时1秒执行了200次。但是如果你要200秒来完成执行,那么你需要这样function showcolumns(){ if(timer<=200) { setInterval(showcolumns(),1000); timer++; }}timer=1;showcolumns(); 看成用setTimeout了, 如果用setTimeout可以这样用。 我觉得不是我代码逻辑上的问题,我的代码如下:var timer=0; function showcolumns() { context.fillStyle = c_rec1; for(i=0;i<data_list.length;i++) { x = zero_spot_x+i*column_width; y = zero_spot_y - c_height_array[i]*timer/200; context.fillRect(x+5,y,column_width-10,c_height_array[i]*timer/200); context.strokeRect(x+5,y,column_width-10,c_height_array[i]*timer/200); context.restore(); context.save(); } timer++; if(timer<=200) { //alert(timer); setInterval(showcolumns(),1000); } else timer = 0; } 我觉得你说的这个倒是有可能不过!我是读了别人的一个时钟的例子,仿照着时钟做的。别人的时钟就能50毫秒一次用setInterval刷新。 我找到了另外一篇文章,我怀疑可能与这个相关http://fins.iteye.com/blog/622493 我觉得你说的这个倒是有可能不过!我是读了别人的一个时钟的例子,仿照着时钟做的。别人的时钟就能50毫秒一次用setInterval刷新。能否有个较全的代码嘞? 我觉得你说的这个倒是有可能不过!我是读了别人的一个时钟的例子,仿照着时钟做的。别人的时钟就能50毫秒一次用setInterval刷新。能否有个较全的代码嘞?有的 我贴出来 <!doctype html><html><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><head><SCRIPT LANGUAGE='JavaScript'> //屏蔽js错误 function ResumeError() { return true; } window.onerror = ResumeError; </SCRIPT></head><body><h2>canvas 挂钟</h2><canvas id="clock" width="500" height="500"> 你的破 <!--[if lte IE 10]> IE <![endif]--> 浏览器不支持canvas标签,无法看到我们的激情小图片</canvas><script> var clock=document.getElementById('clock'); var cxt=clock.getContext('2d'); var now1 = new Date(); //表的配色 //var bp = '#FFFFFF';//表盘 var bk = '#ff9900';//表框 var sk = '#0066CC';//时刻度 var fk = '#0066CC';//分刻度 var sz = '#333399';//时针 var fz = '#333399';//分针 var mz = '#CCCC00';//秒针 var mh = '#FF0033';//秒针后小圆点 var mq = '#FF0033';//秒针钱小圆点 function drawClock(){ //清除画布 cxt.clearRect(0,0,500,500); var now =new Date(); var msec = now.getMilliseconds(); var sec=now.getSeconds(); var min=now.getMinutes(); var hour=now.getHours(); //小时必须获取浮点类型(小时+分数转化成的小时) hour=hour+min/60; //问题 19:23:30 //将24小时进制转换为12小时 hour=hour>12?hour-12:hour; //表盘(蓝色) //设置渐变色 var bbp = cxt.createRadialGradient(250,250,0,250,250,250); bbp.addColorStop(0.4,'#fff'); bbp.addColorStop(1,'#ffcc00'); cxt.lineWidth=12; cxt.strokeStyle=bk; cxt.fillStyle = bbp; cxt.beginPath(); cxt.arc(250,250,200,0,360,false); cxt.closePath(); cxt.stroke(); cxt.fill(); //刻度 //时刻度 for(var i=0;i<12;i++){ cxt.save(); //设置时针的粗细 cxt.lineWidth=7; //设置时针的颜色 cxt.strokeStyle=sk; //先设置0,0点 cxt.translate(250,250); //再设置旋转角度 cxt.rotate(i*30*Math.PI/180);//角度*Math.PI/180=弧度 cxt.beginPath(); cxt.moveTo(0,-170); cxt.lineTo(0,-190); cxt.closePath(); cxt.stroke(); cxt.restore(); } //分刻度 for(var i=0;i<60;i++){ cxt.save(); //设置分刻度的粗细 cxt.lineWidth=5; //设置颜色(使用时刻度的颜色) cxt.strokeStyle=fk; //设置或者重置画布的0,0点 cxt.translate(250,250); //设置旋转角度 cxt.rotate(i*6*Math.PI/180); //画分针刻度 cxt.beginPath(); cxt.moveTo(0,-180); cxt.lineTo(0,-190); cxt.closePath(); cxt.stroke(); cxt.restore(); } //时针 cxt.save(); //设置时针风格 cxt.lineWidth=7; //设置时针的颜色 cxt.strokeStyle=sz; //设置异次元空间的0,0点 cxt.translate(250,250); //设置旋转角度 cxt.rotate(hour*30*Math.PI/180); cxt.beginPath(); cxt.moveTo(0,-110); cxt.lineTo(0,10); cxt.closePath(); cxt.stroke(); cxt.restore(); //分针 cxt.save(); //设置分针的风格 cxt.lineWidth=5; cxt.strokeStyle=fz; //设置异次元空间分针画布的圆心 cxt.translate(250,250); //设置旋转角度 cxt.rotate(min*6*Math.PI/180); cxt.beginPath(); cxt.moveTo(0,-140); cxt.lineTo(0,15); cxt.closePath(); cxt.stroke(); cxt.restore(); //秒针 cxt.save(); //设置秒针的风格 //颜色红色 cxt.strokeStyle=mz; //粗细 3像素 cxt.lineWidth=3; //重置0,0点 cxt.translate(250,250); //设置旋转角度 //cxt.rotate(sec + msec*0.006*Math.PI/180); cxt.rotate((sec+msec/1000)*6*Math.PI/180); //画图 cxt.beginPath(); cxt.moveTo(0,-170); cxt.lineTo(0,20); cxt.closePath(); cxt.stroke(); //画出时针、分针、秒针的交叉点、 cxt.beginPath(); cxt.arc(0,0,5,0,360,false); cxt.closePath(); //设置填充样式 cxt.fillStyle=mh; cxt.fill(); //设置笔触样式(秒针已设置) cxt.stroke(); //设置秒针前段的小圆点 cxt.beginPath(); cxt.arc(0,-150,5,0,360,false); cxt.closePath(); //设置填充样式 cxt.fillStyle=mq; cxt.fill(); //设置笔触样式(秒针已设置) cxt.stroke(); cxt.restore(); } //使用setInterval(代码,毫秒时间) 让时钟动起来 drawClock(); setInterval(drawClock,50);</script></body></html> 我觉得你说的这个倒是有可能不过!我是读了别人的一个时钟的例子,仿照着时钟做的。别人的时钟就能50毫秒一次用setInterval刷新。能否有个较全的代码嘞?我再把我写的也贴出来吧,真心搞不懂哪里有问题了<!doctype html><html><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><head><SCRIPT LANGUAGE='JavaScript'> //屏蔽js错误 function ResumeError() { return true; } window.onerror = ResumeError; </SCRIPT></head><body><h2>canvas 挂钟</h2><canvas id="clock" width="500" height="500"> 你的破 <!--[if lte IE 10]> IE <![endif]--> 浏览器不支持canvas标签,无法看到我们的激情小图片</canvas><script> var clock=document.getElementById('clock'); var cxt=clock.getContext('2d'); var now1 = new Date(); //表的配色 //var bp = '#FFFFFF';//表盘 var bk = '#ff9900';//表框 var sk = '#0066CC';//时刻度 var fk = '#0066CC';//分刻度 var sz = '#333399';//时针 var fz = '#333399';//分针 var mz = '#CCCC00';//秒针 var mh = '#FF0033';//秒针后小圆点 var mq = '#FF0033';//秒针钱小圆点 function drawClock(){ //清除画布 cxt.clearRect(0,0,500,500); var now =new Date(); var msec = now.getMilliseconds(); var sec=now.getSeconds(); var min=now.getMinutes(); var hour=now.getHours(); //小时必须获取浮点类型(小时+分数转化成的小时) hour=hour+min/60; //问题 19:23:30 //将24小时进制转换为12小时 hour=hour>12?hour-12:hour; //表盘(蓝色) //设置渐变色 var bbp = cxt.createRadialGradient(250,250,0,250,250,250); bbp.addColorStop(0.4,'#fff'); bbp.addColorStop(1,'#ffcc00'); cxt.lineWidth=12; cxt.strokeStyle=bk; cxt.fillStyle = bbp; cxt.beginPath(); cxt.arc(250,250,200,0,360,false); cxt.closePath(); cxt.stroke(); cxt.fill(); //刻度 //时刻度 for(var i=0;i<12;i++){ cxt.save(); //设置时针的粗细 cxt.lineWidth=7; //设置时针的颜色 cxt.strokeStyle=sk; //先设置0,0点 cxt.translate(250,250); //再设置旋转角度 cxt.rotate(i*30*Math.PI/180);//角度*Math.PI/180=弧度 cxt.beginPath(); cxt.moveTo(0,-170); cxt.lineTo(0,-190); cxt.closePath(); cxt.stroke(); cxt.restore(); } //分刻度 for(var i=0;i<60;i++){ cxt.save(); //设置分刻度的粗细 cxt.lineWidth=5; //设置颜色(使用时刻度的颜色) cxt.strokeStyle=fk; //设置或者重置画布的0,0点 cxt.translate(250,250); //设置旋转角度 cxt.rotate(i*6*Math.PI/180); //画分针刻度 cxt.beginPath(); cxt.moveTo(0,-180); cxt.lineTo(0,-190); cxt.closePath(); cxt.stroke(); cxt.restore(); } //时针 cxt.save(); //设置时针风格 cxt.lineWidth=7; //设置时针的颜色 cxt.strokeStyle=sz; //设置异次元空间的0,0点 cxt.translate(250,250); //设置旋转角度 cxt.rotate(hour*30*Math.PI/180); cxt.beginPath(); cxt.moveTo(0,-110); cxt.lineTo(0,10); cxt.closePath(); cxt.stroke(); cxt.restore(); //分针 cxt.save(); //设置分针的风格 cxt.lineWidth=5; cxt.strokeStyle=fz; //设置异次元空间分针画布的圆心 cxt.translate(250,250); //设置旋转角度 cxt.rotate(min*6*Math.PI/180); cxt.beginPath(); cxt.moveTo(0,-140); cxt.lineTo(0,15); cxt.closePath(); cxt.stroke(); cxt.restore(); //秒针 cxt.save(); //设置秒针的风格 //颜色红色 cxt.strokeStyle=mz; //粗细 3像素 cxt.lineWidth=3; //重置0,0点 cxt.translate(250,250); //设置旋转角度 //cxt.rotate(sec + msec*0.006*Math.PI/180); cxt.rotate((sec+msec/1000)*6*Math.PI/180); //画图 cxt.beginPath(); cxt.moveTo(0,-170); cxt.lineTo(0,20); cxt.closePath(); cxt.stroke(); //画出时针、分针、秒针的交叉点、 cxt.beginPath(); cxt.arc(0,0,5,0,360,false); cxt.closePath(); //设置填充样式 cxt.fillStyle=mh; cxt.fill(); //设置笔触样式(秒针已设置) cxt.stroke(); //设置秒针前段的小圆点 cxt.beginPath(); cxt.arc(0,-150,5,0,360,false); cxt.closePath(); //设置填充样式 cxt.fillStyle=mq; cxt.fill(); //设置笔触样式(秒针已设置) cxt.stroke(); cxt.restore(); } //使用setInterval(代码,毫秒时间) 让时钟动起来 drawClock(); setInterval(drawClock,50);</script></body></html> 我觉得你说的这个倒是有可能不过!我是读了别人的一个时钟的例子,仿照着时钟做的。别人的时钟就能50毫秒一次用setInterval刷新。能否有个较全的代码嘞?贴重复了。。这个才是我的: 我觉得你说的这个倒是有可能不过!我是读了别人的一个时钟的例子,仿照着时钟做的。别人的时钟就能50毫秒一次用setInterval刷新。能否有个较全的代码嘞?贴重复了。。这个才是我的:没有代码? 首先js是单线程的,定时器做的事是阻塞线程,以达到延时的目的。出现这种情况的关键点是,定时器只对定时的这个方法有效,包含在这个方法体外的js还是会照样执行。这样就是形成N个定时器排队的情况。你可以将这个循环都写入定时器,才能达到你要的效果。 if和for循环在执行过程中会阻塞浏览器的渲染。而setTimeout和setInterval则正是解决这个阻塞问题的方法。如: //这样只看到最后结果 for(var i=0;i<1000;i++){ document.getElementsByTagName('div')[0].innerHTML=i } //这样则能看到数字的变化(原因就在于每隔一段时间执行一次循环体,而不是像上面一样不间断连续执行) //(1)用setInterval var i=0; function foo(){ if(i<1000){ document.getElementsByTagName('div')[0].innerHTML=i; i++; } }; setInterval(foo,100) //(1)用setTimeout var i=0; function foo(){ if(i<1000){ document.getElementsByTagName('div')[0].innerHTML=i; i++; setTimeout(foo,100) } }; setTimeout(foo,100)PS:延时建议用setTimeout.setInterval和setTimeout在延时机制上是不同的,在程序比较复杂的时候 setInterval在无法保证定时器的准确性。两者具体的区别楼主可以自行google一下。 alert会阻断代码执行 就不会这样的了 setInterval(showcolumns,1000);即可。setInterval、setTimeout的第一个参数是个function,你写的showcolumns()会立即执行的。 AWWWB.COM网站克隆器 非常好用哦 呵呵 window.setInterval("a()","5000")这个写在被调用方法的外边,第一个参数也是字符串, 第二个参数要是字符串 。setTimeout("a()",2000)这个必须写在方法内,自己调用自己,第二个参数是整数 。 你这是把setInterval当成setTimeout用了吧 恩 你说得对 是 那个名字的问题 另外setInerval和setTimeout那个说的也很好 谢谢啦 请问布尔类型 用JQUERY getJSON 跨域拿 HTML代码 怎么拿啊,我这个例子没成功 [求助]这段代码有什么错误? 图片操作 请问,怎么样可以做像QQ空间里的背景音乐里的那种可以调整歌曲顺序的按钮 什么是迭代,啥是序列化 菜鸟的一个简单问题! 哪位高手知道象电子地图那样,可以将图片放大缩小,是怎么实现的呢? 求正则表达式 请教大侠 获取JSON返回数据问题 有个标志图标要显示2天,两天过后就不显示,用cookie怎么实现呢? document.getElementById(divID).style.left IE可以而谷歌不行
我并不需要那个alert 弹窗,浏览网页的人不可能看一次网页点200次确定哈我的意思是,如果我加进去alert,就能明显的看出动画效果,但是去掉alert就只显示最后一帧。 举个例子,你看电影,如果每秒钟弹出一个窗口,那么你就能正常的看到电影的每一帧,但是每次要按下确定;但是不加alert,就只显示电影结尾的演员列表。
var iT=0;
var timer=null;
function test()
{
if(iT>=5)//控制动作为5次,5次后结束定时器
clearInterval(timer);//清除定时器
alert(iT);//事件处理
iT++;//累加
}
timer=setInterval('test()',1000);
{
setInterval(showcolumns(),1000);
timer++;
}
如果你这段代码是放在循环中的,那么会在瞬间执行完毕,也就是你延时1秒执行了200次。
但是如果你要200秒来完成执行,那么你需要这样function showcolumns()
{
if(timer<=200)
{
setInterval(showcolumns(),1000);
timer++;
}
}
timer=1;
showcolumns();
我觉得不是我代码逻辑上的问题,我的代码如下:
var timer=0;
function showcolumns()
{
context.fillStyle = c_rec1;
for(i=0;i<data_list.length;i++)
{
x = zero_spot_x+i*column_width;
y = zero_spot_y - c_height_array[i]*timer/200;
context.fillRect(x+5,y,column_width-10,c_height_array[i]*timer/200);
context.strokeRect(x+5,y,column_width-10,c_height_array[i]*timer/200);
context.restore();
context.save();
}
timer++;
if(timer<=200)
{
//alert(timer);
setInterval(showcolumns(),1000);
}
else
timer = 0;
}
我觉得你说的这个倒是有可能不过!
我是读了别人的一个时钟的例子,仿照着时钟做的。别人的时钟就能50毫秒一次用setInterval刷新。
http://fins.iteye.com/blog/622493
我觉得你说的这个倒是有可能不过!
我是读了别人的一个时钟的例子,仿照着时钟做的。别人的时钟就能50毫秒一次用setInterval刷新。
能否有个较全的代码嘞?
我觉得你说的这个倒是有可能不过!
我是读了别人的一个时钟的例子,仿照着时钟做的。别人的时钟就能50毫秒一次用setInterval刷新。
能否有个较全的代码嘞?有的 我贴出来 <!doctype html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<head>
<SCRIPT LANGUAGE='JavaScript'>
//屏蔽js错误
function ResumeError() {
return true;
}
window.onerror = ResumeError;
</SCRIPT>
</head>
<body>
<h2>canvas 挂钟</h2>
<canvas id="clock" width="500" height="500">
你的破
<!--[if lte IE 10]>
IE
<![endif]-->
浏览器不支持canvas标签,无法看到我们的激情小图片
</canvas><script>
var clock=document.getElementById('clock');
var cxt=clock.getContext('2d');
var now1 = new Date();
//表的配色
//var bp = '#FFFFFF';//表盘
var bk = '#ff9900';//表框
var sk = '#0066CC';//时刻度
var fk = '#0066CC';//分刻度
var sz = '#333399';//时针
var fz = '#333399';//分针
var mz = '#CCCC00';//秒针
var mh = '#FF0033';//秒针后小圆点
var mq = '#FF0033';//秒针钱小圆点
function drawClock(){
//清除画布
cxt.clearRect(0,0,500,500);
var now =new Date();
var msec = now.getMilliseconds();
var sec=now.getSeconds();
var min=now.getMinutes();
var hour=now.getHours();
//小时必须获取浮点类型(小时+分数转化成的小时)
hour=hour+min/60;
//问题 19:23:30
//将24小时进制转换为12小时
hour=hour>12?hour-12:hour;
//表盘(蓝色)
//设置渐变色
var bbp = cxt.createRadialGradient(250,250,0,250,250,250);
bbp.addColorStop(0.4,'#fff');
bbp.addColorStop(1,'#ffcc00');
cxt.lineWidth=12;
cxt.strokeStyle=bk;
cxt.fillStyle = bbp;
cxt.beginPath();
cxt.arc(250,250,200,0,360,false);
cxt.closePath();
cxt.stroke();
cxt.fill();
//刻度
//时刻度
for(var i=0;i<12;i++){
cxt.save();
//设置时针的粗细
cxt.lineWidth=7;
//设置时针的颜色
cxt.strokeStyle=sk;
//先设置0,0点
cxt.translate(250,250);
//再设置旋转角度
cxt.rotate(i*30*Math.PI/180);//角度*Math.PI/180=弧度
cxt.beginPath();
cxt.moveTo(0,-170);
cxt.lineTo(0,-190);
cxt.closePath();
cxt.stroke();
cxt.restore();
}
//分刻度
for(var i=0;i<60;i++){
cxt.save();
//设置分刻度的粗细
cxt.lineWidth=5;
//设置颜色(使用时刻度的颜色)
cxt.strokeStyle=fk;
//设置或者重置画布的0,0点
cxt.translate(250,250);
//设置旋转角度
cxt.rotate(i*6*Math.PI/180);
//画分针刻度
cxt.beginPath();
cxt.moveTo(0,-180);
cxt.lineTo(0,-190);
cxt.closePath();
cxt.stroke();
cxt.restore();
}
//时针
cxt.save();
//设置时针风格
cxt.lineWidth=7;
//设置时针的颜色
cxt.strokeStyle=sz;
//设置异次元空间的0,0点
cxt.translate(250,250);
//设置旋转角度
cxt.rotate(hour*30*Math.PI/180);
cxt.beginPath();
cxt.moveTo(0,-110);
cxt.lineTo(0,10);
cxt.closePath();
cxt.stroke();
cxt.restore();
//分针
cxt.save();
//设置分针的风格
cxt.lineWidth=5;
cxt.strokeStyle=fz;
//设置异次元空间分针画布的圆心
cxt.translate(250,250);
//设置旋转角度
cxt.rotate(min*6*Math.PI/180);
cxt.beginPath();
cxt.moveTo(0,-140);
cxt.lineTo(0,15);
cxt.closePath();
cxt.stroke();
cxt.restore();
//秒针
cxt.save();
//设置秒针的风格
//颜色红色
cxt.strokeStyle=mz;
//粗细 3像素
cxt.lineWidth=3;
//重置0,0点
cxt.translate(250,250);
//设置旋转角度
//cxt.rotate(sec + msec*0.006*Math.PI/180);
cxt.rotate((sec+msec/1000)*6*Math.PI/180);
//画图
cxt.beginPath();
cxt.moveTo(0,-170);
cxt.lineTo(0,20);
cxt.closePath();
cxt.stroke();
//画出时针、分针、秒针的交叉点、
cxt.beginPath();
cxt.arc(0,0,5,0,360,false);
cxt.closePath();
//设置填充样式
cxt.fillStyle=mh;
cxt.fill();
//设置笔触样式(秒针已设置)
cxt.stroke();
//设置秒针前段的小圆点
cxt.beginPath();
cxt.arc(0,-150,5,0,360,false);
cxt.closePath();
//设置填充样式
cxt.fillStyle=mq;
cxt.fill();
//设置笔触样式(秒针已设置)
cxt.stroke();
cxt.restore();
}
//使用setInterval(代码,毫秒时间) 让时钟动起来
drawClock();
setInterval(drawClock,50);
</script>
</body>
</html>
我觉得你说的这个倒是有可能不过!
我是读了别人的一个时钟的例子,仿照着时钟做的。别人的时钟就能50毫秒一次用setInterval刷新。
能否有个较全的代码嘞?我再把我写的也贴出来吧,真心搞不懂哪里有问题了<!doctype html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<head>
<SCRIPT LANGUAGE='JavaScript'>
//屏蔽js错误
function ResumeError() {
return true;
}
window.onerror = ResumeError;
</SCRIPT>
</head>
<body>
<h2>canvas 挂钟</h2>
<canvas id="clock" width="500" height="500">
你的破
<!--[if lte IE 10]>
IE
<![endif]-->
浏览器不支持canvas标签,无法看到我们的激情小图片
</canvas><script>
var clock=document.getElementById('clock');
var cxt=clock.getContext('2d');
var now1 = new Date();
//表的配色
//var bp = '#FFFFFF';//表盘
var bk = '#ff9900';//表框
var sk = '#0066CC';//时刻度
var fk = '#0066CC';//分刻度
var sz = '#333399';//时针
var fz = '#333399';//分针
var mz = '#CCCC00';//秒针
var mh = '#FF0033';//秒针后小圆点
var mq = '#FF0033';//秒针钱小圆点
function drawClock(){
//清除画布
cxt.clearRect(0,0,500,500);
var now =new Date();
var msec = now.getMilliseconds();
var sec=now.getSeconds();
var min=now.getMinutes();
var hour=now.getHours();
//小时必须获取浮点类型(小时+分数转化成的小时)
hour=hour+min/60;
//问题 19:23:30
//将24小时进制转换为12小时
hour=hour>12?hour-12:hour;
//表盘(蓝色)
//设置渐变色
var bbp = cxt.createRadialGradient(250,250,0,250,250,250);
bbp.addColorStop(0.4,'#fff');
bbp.addColorStop(1,'#ffcc00');
cxt.lineWidth=12;
cxt.strokeStyle=bk;
cxt.fillStyle = bbp;
cxt.beginPath();
cxt.arc(250,250,200,0,360,false);
cxt.closePath();
cxt.stroke();
cxt.fill();
//刻度
//时刻度
for(var i=0;i<12;i++){
cxt.save();
//设置时针的粗细
cxt.lineWidth=7;
//设置时针的颜色
cxt.strokeStyle=sk;
//先设置0,0点
cxt.translate(250,250);
//再设置旋转角度
cxt.rotate(i*30*Math.PI/180);//角度*Math.PI/180=弧度
cxt.beginPath();
cxt.moveTo(0,-170);
cxt.lineTo(0,-190);
cxt.closePath();
cxt.stroke();
cxt.restore();
}
//分刻度
for(var i=0;i<60;i++){
cxt.save();
//设置分刻度的粗细
cxt.lineWidth=5;
//设置颜色(使用时刻度的颜色)
cxt.strokeStyle=fk;
//设置或者重置画布的0,0点
cxt.translate(250,250);
//设置旋转角度
cxt.rotate(i*6*Math.PI/180);
//画分针刻度
cxt.beginPath();
cxt.moveTo(0,-180);
cxt.lineTo(0,-190);
cxt.closePath();
cxt.stroke();
cxt.restore();
}
//时针
cxt.save();
//设置时针风格
cxt.lineWidth=7;
//设置时针的颜色
cxt.strokeStyle=sz;
//设置异次元空间的0,0点
cxt.translate(250,250);
//设置旋转角度
cxt.rotate(hour*30*Math.PI/180);
cxt.beginPath();
cxt.moveTo(0,-110);
cxt.lineTo(0,10);
cxt.closePath();
cxt.stroke();
cxt.restore();
//分针
cxt.save();
//设置分针的风格
cxt.lineWidth=5;
cxt.strokeStyle=fz;
//设置异次元空间分针画布的圆心
cxt.translate(250,250);
//设置旋转角度
cxt.rotate(min*6*Math.PI/180);
cxt.beginPath();
cxt.moveTo(0,-140);
cxt.lineTo(0,15);
cxt.closePath();
cxt.stroke();
cxt.restore();
//秒针
cxt.save();
//设置秒针的风格
//颜色红色
cxt.strokeStyle=mz;
//粗细 3像素
cxt.lineWidth=3;
//重置0,0点
cxt.translate(250,250);
//设置旋转角度
//cxt.rotate(sec + msec*0.006*Math.PI/180);
cxt.rotate((sec+msec/1000)*6*Math.PI/180);
//画图
cxt.beginPath();
cxt.moveTo(0,-170);
cxt.lineTo(0,20);
cxt.closePath();
cxt.stroke();
//画出时针、分针、秒针的交叉点、
cxt.beginPath();
cxt.arc(0,0,5,0,360,false);
cxt.closePath();
//设置填充样式
cxt.fillStyle=mh;
cxt.fill();
//设置笔触样式(秒针已设置)
cxt.stroke();
//设置秒针前段的小圆点
cxt.beginPath();
cxt.arc(0,-150,5,0,360,false);
cxt.closePath();
//设置填充样式
cxt.fillStyle=mq;
cxt.fill();
//设置笔触样式(秒针已设置)
cxt.stroke();
cxt.restore();
}
//使用setInterval(代码,毫秒时间) 让时钟动起来
drawClock();
setInterval(drawClock,50);
</script>
</body>
</html>
我觉得你说的这个倒是有可能不过!
我是读了别人的一个时钟的例子,仿照着时钟做的。别人的时钟就能50毫秒一次用setInterval刷新。
能否有个较全的代码嘞?贴重复了。。这个才是我的:
我觉得你说的这个倒是有可能不过!
我是读了别人的一个时钟的例子,仿照着时钟做的。别人的时钟就能50毫秒一次用setInterval刷新。
能否有个较全的代码嘞?贴重复了。。这个才是我的:没有代码?
出现这种情况的关键点是,定时器只对定时的这个方法有效,包含在这个方法体外的js还是会照样执行。
这样就是形成N个定时器排队的情况。
你可以将这个循环都写入定时器,才能达到你要的效果。
if和for循环在执行过程中会阻塞浏览器的渲染。而setTimeout和setInterval则正是解决这个阻塞问题的方法。
如: //这样只看到最后结果
for(var i=0;i<1000;i++){
document.getElementsByTagName('div')[0].innerHTML=i
} //这样则能看到数字的变化(原因就在于每隔一段时间执行一次循环体,而不是像上面一样不间断连续执行)
//(1)用setInterval
var i=0;
function foo(){
if(i<1000){
document.getElementsByTagName('div')[0].innerHTML=i;
i++;
}
};
setInterval(foo,100)
//(1)用setTimeout
var i=0;
function foo(){
if(i<1000){
document.getElementsByTagName('div')[0].innerHTML=i;
i++;
setTimeout(foo,100)
}
};
setTimeout(foo,100)PS:延时建议用setTimeout.
setInterval和setTimeout在延时机制上是不同的,在程序比较复杂的时候 setInterval在无法保证定时器的准确性。两者具体的区别楼主可以自行google一下。
即可。
setInterval、setTimeout的第一个参数是个function,你写的showcolumns()会立即执行的。
setTimeout("a()",2000)这个必须写在方法内,自己调用自己,第二个参数是整数 。
恩 你说得对 是 那个名字的问题 另外setInerval和setTimeout那个说的也很好 谢谢啦