canvas和setInterval很诡异的问题

问题描述

canvas和setInterval很诡异的问题

本人萌新,写了一个关于canvas扇形图的动画效果,但是setInterval执行的时候很诡异的只有
第三次才能执行代码,看了半天也不知道哪里出错了,请大神们帮帮忙,感激不尽!!
代码如下,三个框框里面可以输入数字表示百分比

 <!DOCTYPE html>
<html>
<head>
<title>扇形图动态效果</title>
<meta http-equiv="content-type" content = "text/html;charset = utf-8">
</head>

<body>
<canvas id = "mycanvas" width = "1200px" height = "400px" style = "border : 1px solid ">
Your website can't support canvas,please update it.
</canvas>
<input id = "part1"><input id = "part2"><input id = "part3">
<button id = "doit" style = "height : 40px" onclick = "drawcircle()"></button>
<script>
var mycanvasg = document.getElementById("mycanvas");
var pen = mycanvasg.getContext("2d");
var x = 600; //x,y为圆心坐标
var y = 300;
var r = 200;
var basicAngle = Math.PI * 2 /100;
var sAngle = Math.random().toFixed(2) * 100 * basicAngle;
var eAngle = sAngle;
//alert("intializing--sAngle is " + sAngle + "eAngle is "+ eAngle);
//alert("basicAngle is " + basicAngle);
var drawtimes = 3;
var amanation_inteval = 1000;
var times;
var xh;

function addZero(object)
{
    //执行正常
   return object.length = 2 ? object : '0' + object;
}

function randomColors()
{
    //执行正常
    return "#" + addZero((Math.random().toFixed(2) *100).toString(16)) +addZero((Math.random().toFixed(2) *100).toString(16)) + addZero((Math.random().toFixed(2) *100).toString(16));
}

function drawcircle()
{
    for(i = 1;i <= drawtimes;i++)
    {
    eAngle = parseInt(document.getElementById("part" + i).value) * basicAngle + eAngle;
    //alert("bigcircle--sAngle is " + sAngle + "eAngle is "+ eAngle);
    //alert("eAngle is " + eAngle + "sAngle is " + sAngle);
    pen.fillStyle = randomColors(); //分为两个周期,大周期是不同的颜色,小周期颜色相同
    //alert("Excecuted for" + i + "times,color code is " + pen.fillStyle);
    xh = setInterval(amanation,amanation_inteval);
    }
}

var amanation = function(){
    //执行正常
    if(sAngle < eAngle)
    {
    //alert("smallcircle--amanation executed,sAngle is " + sAngle + ",eAngle is " + eAngle);
    pen.beginPath();
    pen.arc(x,y,r,sAngle,(sAngle + basicAngle));
    pen.lineTo(x,y);  //这三个语句是路径演算
    pen.fill();  //每一次执行完路径绘制以后还要还原sAngle 和eAngle的值
    pen.closePath();
    sAngle = (basicAngle + sAngle);
    }
    else
    clearInterval(xh);
}
</script>
</body>
</html>

解决方案

setInterval是同时进行的,而且绘制扇形操作的是同一个变量,所以3个计时器效果都是最后一个的eAngle ,并且你只能清除最后一次的计时器,另外2个计时器还会一直运行,浪费资源

要设置不同eAngle ,不要操作同一个变量

时间: 2024-12-29 09:59:13

canvas和setInterval很诡异的问题的相关文章

asp.net网站不兼容360浏览器问题,很诡异,求大神帮忙

问题描述 asp.net网站不兼容360浏览器问题,很诡异,求大神帮忙 如下图这个是在本地用VS调试的情况,用360浏览器运行这个很正常,但是部署到服务器以后再用360浏览器访问是这样,布局已经乱了.这是怎么回事呢?IE 火狐 猎豹等等十几个目前主流的浏览器里面都测试了,只有360有这个问题,其他都很正常,请问这是怎么回事呢?求大神帮忙!!! 解决方案 Firefox好的360急速应该没问题..chrome显示怎么样?360急速模式用的webkit核心,和chrome一样,有开发工具的,右键审核

用火狐下载文件出现很诡异的问题

问题描述 用火狐下载文件出现很诡异的问题 在csdn上下载文件 文件后缀名总是自动多出一个'_' 更奇怪的是 下载下来会有两个同名文件 其中一个是空文件 删除空文件后缀名还会报错 说此文件不在这个路径下 无法执行删除操作 不知道这个是怎么了 就是在csdn上下载东西会出现这个问题 解决方案 这个我也遇到过,你下载完后,对文件夹重新命名,把最后字符下划线去掉,不影响你对rar文件的使用.谢谢 解决方案二: 删除空文件没有作用 说找不到这个文件的位置 解决方案三: 这是火狐浏览器的问题,应该是在下载

html-麻烦帮忙看一个很诡异的CSS高度设置的问题

问题描述 麻烦帮忙看一个很诡异的CSS高度设置的问题 我有一个html文件,把一个div元素高度设置为45px,如果把文件直接拖到浏览器,这个div是正常的45px.但是如果是通过服务器访问,即localhost:8080/webroot/myhtml.html这样的形式访问,则这个div是46px,并且只会在谷歌出现这个问题更奇葩的是,只有最后一个数字是5的时候才出现问题,例如我设置为44px,53px是正常的,但是如果设置为45px,55px,65px就出问题了,下面是我的完整代码 <!DO

treeSet 一个很诡异的重复性判断问题

问题描述 有一个需求是这样的,要求去掉重复Id的文章,如果id相同就去掉,如果不同就按文章发表时间排序,但写完代码发现,id相同的文章怎么也去重不了:public class ArticleSource implements Comparable<ArticleSource> {private long id;private int sourceId;private long time;public ArticleSource(long id,int sourceId,long time) {

多对一-Hibernate上一个很诡异的问题

问题描述 Hibernate上一个很诡异的问题 User.hbm.xml: <set cascade="all" inverse="true" name="activeFriends" sort="unsorted"> <key column="concernedUserId"/> <one-to-many class="Friends"/> <

使用apache的BeanUtils,一个很诡异的问题

问题描述 public class MyBeanUtils extends org.apache.commons.beanutils.BeanUtils {public static void copyBeanNotNull2Bean(Object databean,Object tobean)throws Exception { PropertyDescriptor origDescriptors[] = PropertyUtils.getPropertyDescriptors(databea

默多克炮轰“山达基教”:很诡异

默多克在Twitter上写道:"山达基教再成新闻.非常诡异的教派,但很有钱,汤姆·克鲁斯是教派里第二号或第三号人物."汤姆·克鲁斯传媒大亨.新闻集团董事长鲁伯特·默多克7月1日在Twitter上分享了他对好莱坞影星汤姆·克鲁斯所属的山达基教(美国科幻小说作家L·罗恩·贺伯特创立的信仰系统,又称科学神教)看法,称山达基教"很诡异".默多克因此用Twitter认证账号@ rupertm urdoch发表了对山达基教的看法:"关注凯蒂·霍尔姆斯和山达基教的后续报

说一个界面很奇怪,很诡异时,我们在说什么?

  1.可能是信息的相关性弱 当把相关性弱的信息放在一块时,就会让你产生奇怪和诡异的感觉(无关于对齐和留白); 这里不多说了,设计师一般都有这个敏感度 对比两种信息摆放方式 2.可能是认知模式无法匹配 没有契合用户的认知模型,功能逻辑再正确也是别扭的; 最初美团商家中心的房态管理模块非常奇怪,是用下拉框选择项目,再去选择一个房型,日期控件选择一个日期,最后选择一个有房 or 满房的状态.听我说起来似乎功能合理,但是实际操作多个房型的状态时,在同一个控件区域不停的进行操作,感觉怪不可言,如下图:

新潮实业“很诡异”董事长过世8个月仍现身年报

新潮实业5月15日发布关于公司实质控制人将发生变更的公告.但让记者吃惊的是,新潮实业控股股东烟台东润投资发展有限公司董事长常宗琳去世已有8个月之久,而这一消息新潮实业一直未予公告.这使得新潮实业控股股东转让股份充满了诡异. 董事长去年9月过世 4月份仍现身年报 新潮实业4月22日发布的年报显示,其控股股东东润投资法定代表人为常宗琳,持有东润投资51%的股权.2005年至2008年4月,常宗琳任新牟国际集团公司董事长,2008年2月至今,任烟台东润投资发展有限公司董事长. 新潮实业1998年4月1