zoukankan      html  css  js  c++  java
  • 时钟特效程序

    做了个特效小程序,在过程中发现自己在学过的知识中有掌握的不够牢固的,今天在这里复习一下:

    一、三目运算符中能否使用{}吗?

      不可以,三目运算符的语法:条件 ? 结果1 : 结果2;

      结果不可以用语句代替

    二、canvas可以嵌套吗?

      不可以,

     1 <!DOCTYPE html>
     2 <html>
     3 <head lang="en">
     4     <meta charset="UTF-8">
     5     <title></title>
     6     <style>
     7         #can1{background:#000;}
     8         #can2{background:red;}
     9     </style>
    10 </head>
    11 <body>
    12 <canvas id="can1">
    13     <canvas id="can2"></canvas>
    14 </canvas>
    15 <script>
    16     var can1=document.getElementById('can1');
    17     var can2=document.getElementById('can2');
    18     var con1=can1.getContext('2d');
    19     var con2=can2.getContext('2d');
    20 </script>
    21 </body>
    22 </html>

    这个代码的显示结果为

    并没有显示出颜色为红的画布,所以在需要画布的更新时尽量使用局部更新

    三、jCanvaScript.js的使用

      jCanvaScript.js是一个方便用户进行canvas绘图的插件,使用时将该js文件链接进来即可

      使用方法:

      

    1   var can1=document.getElementById('can1');
    2     var con1=can1.getContext('2d');
    3     jc.start('can1',true);
    4     jc.circle(10,10,10,'#ff0000',1);

    在(10,10)处绘制一个半径为10px的红色的圆。

    其他详细使用信息:

    <script type="text/javascript" src="jCancaScript.1.5.18.min.js"></script>
    <script>
    var oInput=document.getElmentById("input1");
    var oc=document.getElmentById("c1");
    var ogc=oc.getContext("2d");
    //开始
    jc.start("c1");//代表:只是指定id为c1的画布 只绘制了一次 ,只能进行一次操作
    //jc.start("c1",true);//第二个参数代表可以重绘,可以进行多个操作
    //jc.rect(100,100,50,50);带边框的正方形 默认
    //jc.rect(100,100,50,50,1);带边框的正方形  bool为1或者true时 : 整个正方形是填充的
    //jc.rect(100,100,50,50,"#ff0000",1);填充色是红色
     
    //下面画个圆形
    jc.circle(100,100,50,"#ff0000",1);
     
    接下来 给这个圆形加个点击事件【以下代码运行无效 木有点击事件产生  原因:红色代码】
    jc.circle(100,100,50,"#ff0000",1).click(function(){
    alert(123);
    });
     
    //在画布中间对画出的圆进行任意方向的拖拽
    jc.circle(100,100,50,"#ff0000",1).draggable();
     
    //在画布外面添加一个按钮点击改变图形的颜色,请看蓝色代码
    jc.circle(100,100,50,"#ff0000",1).id("c1");//id是针对单个,name可以针对一组
    //结束
    jc.start("c1");
     
    oInput.onclick=function(){
    jc("#c1").color("#ffff00");
    //jc("#c1").color("#ffff00").animate({x:200,y:200,radius:5},2000);//从坐标为100,100半径为50的
    //大圆慢慢匀速缩小到坐标为200,200半径为5的小圆,总共耗时2秒.
    }
    </script>
     
    <canvas id="c1" style="400px;height:400px;background:blue"></canvas>
    <input type="button" value="点击" id="input1" />

    四、js中判断获取的时间是否相等  :

       var date1=new date(),date2=new date();  

       date1.getTime()==date2.getTime()?

    五、删除数组中x开始的n的字符

      arry.splice(x,n);

      其他数组操作方法:

      

    1、数组元素的添加
    arrayObj. push([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组结尾,并返回数组新长度
    arrayObj.unshift([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组开始,数组中的元素自动后移,返回数组新长度
    arrayObj.splice(insertPos,0,[item1[, item2[, . . . [,itemN]]]]);//将一个或多个新元素插入到数组的指定位置,插入位置的元素自动后移,返回""。
    
    2、数组元素的删除
    arrayObj.pop(); //移除最后一个元素并返回该元素值
    arrayObj.shift(); //移除最前一个元素并返回该元素值,数组中元素自动前移
    arrayObj.splice(deletePos,deleteCount); //删除从指定位置deletePos开始的指定数量deleteCount的元素,数组形式返回所移除的元素
    
    3、数组的截取和合并
    arrayObj.slice(start, [end]); //以数组的形式返回数组的一部分,注意不包括 end 对应的元素,如果省略 end 将复制 start 之后的所有元素
    arrayObj.concat([item1[, item2[, . . . [,itemN]]]]); //将多个数组(也可以是字符串,或者是数组和字符串的混合)连接为一个数组,返回连接好的新的数组
    
    4、数组的拷贝
    arrayObj.slice(0); //返回数组的拷贝数组,注意是一个新的数组,不是指向
    arrayObj.concat(); //返回数组的拷贝数组,注意是一个新的数组,不是指向
    
    5、数组元素的排序
    arrayObj.reverse(); //反转元素(最前的排到最后、最后的排到最前),返回数组地址
    arrayObj.sort(); //对数组元素排序,返回数组地址
    
    6、数组元素的字符串化
    arrayObj.join(separator); //返回字符串,这个字符串将数组的每一个元素值连接在一起,中间用 separator 隔开。

      顺便再复习一下字符串操作方法:

      

    concat() – 将两个或多个字符的文本组合起来,返回一个新的字符串。 
    indexOf() – 返回字符串中一个子串第一处出现的索引。如果没有匹配项,返回 -1 。 
    charAt() – 返回指定位置的字符。 
    lastIndexOf() – 返回字符串中一个子串最后一处出现的索引,如果没有匹配项,返回 -1 。 
    match() – 检查一个字符串是否匹配一个正则表达式。 
    substring() – 返回字符串的一个子串。传入参数是起始位置和结束位置。 
    replace() – 用来查找匹配一个正则表达式的字符串,然后使用新字符串代替匹配的字符串。 
    search() – 执行一个正则表达式匹配查找。如果查找成功,返回字符串中匹配的索引值。否则返回 -1 。 
    slice() – 提取字符串的一部分,并返回一个新字符串。 
    split() – 通过将字符串划分成子串,将一个字符串做成一个字符串数组。 
    length – 返回字符串的长度,所谓字符串的长度是指其包含的字符的个数。 
    toLowerCase() – 将整个字符串转成小写字母。 
    toUpperCase() – 将整个字符串转成大写字母。

    另外,通过这次写的这个小代码,我总结了一下自己思考问题上的不足之处:

    之前写代码时总是很乱,不会将要实现的目标模块化,导致自己总是在写过的代码上添添删删,导致这个部分变得臃肿且不清晰,然后代码就越写越乱,要改的地方也变得越来越多,参考了别人的代码后,我总结一下今后应该怎样解决比较复杂的问题:

    1.仔细分析问题,将问题模块化

    2.针对每一个模块写对应的函数,每个函数完成一个特定功能

    3.学会多角度思考问题,切莫钻进一个牛角尖,其实换个思路解决问题说不定会更简单

    以下是程序源代码:

      1 <!DOCTYPE html>
      2 <html>
      3 <head lang="en">
      4     <meta charset="UTF-8">
      5     <title></title>
      6     <style>
      7         canvas{background:#fff;margin-top:50px;margin-left:50px;}
      8     </style>
      9 </head>
     10 <body>
     11     <canvas id="canvas"></canvas>
     12     <script src="jCanvaScript.1.5.18.js"></script>
     13     <script>
     14         var RADIUS=8;        //定义圆的半径
     15         var timer;             //定义计时器
     16         var oTime;           //定义时间变量
     17         var nowTimer;          //获取现在时间的时、分、秒
     18         var lastTimer;          //获取上次时间的时、分、秒
     19         var nowTime=new Date();;           //现在时间
     20         var lastTime;           //上次时间
     21         var addBalls=[];      //添加掉落的小球
     22 
     23         var canvas=document.getElementsByTagName('canvas')[0],
     24                 content=canvas.getContext('2d');
     25 
     26         var arry = [
     27             [
     28                 [0, 0, 1, 1, 1, 0, 0],
     29                 [0, 1, 1, 0, 1, 1, 0],
     30                 [1, 1, 0, 0, 0, 1, 1],
     31                 [1, 1, 0, 0, 0, 1, 1],
     32                 [1, 1, 0, 0, 0, 1, 1],
     33                 [1, 1, 0, 0, 0, 1, 1],
     34                 [1, 1, 0, 0, 0, 1, 1],
     35                 [1, 1, 0, 0, 0, 1, 1],
     36                 [0, 1, 1, 0, 1, 1, 0],
     37                 [0, 0, 1, 1, 1, 0, 0]
     38             ], //0
     39             [
     40                 [0, 0, 0, 1, 1, 0, 0],
     41                 [0, 1, 1, 1, 1, 0, 0],
     42                 [0, 0, 0, 1, 1, 0, 0],
     43                 [0, 0, 0, 1, 1, 0, 0],
     44                 [0, 0, 0, 1, 1, 0, 0],
     45                 [0, 0, 0, 1, 1, 0, 0],
     46                 [0, 0, 0, 1, 1, 0, 0],
     47                 [0, 0, 0, 1, 1, 0, 0],
     48                 [0, 0, 0, 1, 1, 0, 0],
     49                 [1, 1, 1, 1, 1, 1, 1]
     50             ], //1
     51             [
     52                 [0, 1, 1, 1, 1, 1, 0],
     53                 [1, 1, 0, 0, 0, 1, 1],
     54                 [0, 0, 0, 0, 0, 1, 1],
     55                 [0, 0, 0, 0, 1, 1, 0],
     56                 [0, 0, 0, 1, 1, 0, 0],
     57                 [0, 0, 1, 1, 0, 0, 0],
     58                 [0, 1, 1, 0, 0, 0, 0],
     59                 [1, 1, 0, 0, 0, 0, 0],
     60                 [1, 1, 0, 0, 0, 1, 1],
     61                 [1, 1, 1, 1, 1, 1, 1]
     62             ], //2
     63             [
     64                 [1, 1, 1, 1, 1, 1, 1],
     65                 [0, 0, 0, 0, 0, 1, 1],
     66                 [0, 0, 0, 0, 1, 1, 0],
     67                 [0, 0, 0, 1, 1, 0, 0],
     68                 [0, 0, 1, 1, 1, 0, 0],
     69                 [0, 0, 0, 0, 1, 1, 0],
     70                 [0, 0, 0, 0, 0, 1, 1],
     71                 [0, 0, 0, 0, 0, 1, 1],
     72                 [1, 1, 0, 0, 0, 1, 1],
     73                 [0, 1, 1, 1, 1, 1, 0]
     74             ], //3
     75             [
     76                 [0, 0, 0, 0, 1, 1, 0],
     77                 [0, 0, 0, 1, 1, 1, 0],
     78                 [0, 0, 1, 1, 1, 1, 0],
     79                 [0, 1, 1, 0, 1, 1, 0],
     80                 [1, 1, 0, 0, 1, 1, 0],
     81                 [1, 1, 1, 1, 1, 1, 1],
     82                 [0, 0, 0, 0, 1, 1, 0],
     83                 [0, 0, 0, 0, 1, 1, 0],
     84                 [0, 0, 0, 0, 1, 1, 0],
     85                 [0, 0, 0, 1, 1, 1, 1]
     86             ], //4
     87             [
     88                 [1, 1, 1, 1, 1, 1, 1],
     89                 [1, 1, 0, 0, 0, 0, 0],
     90                 [1, 1, 0, 0, 0, 0, 0],
     91                 [1, 1, 1, 1, 1, 1, 0],
     92                 [0, 0, 0, 0, 0, 1, 1],
     93                 [0, 0, 0, 0, 0, 1, 1],
     94                 [0, 0, 0, 0, 0, 1, 1],
     95                 [0, 0, 0, 0, 0, 1, 1],
     96                 [1, 1, 0, 0, 0, 1, 1],
     97                 [0, 1, 1, 1, 1, 1, 0]
     98             ], //5
     99             [
    100                 [0, 0, 0, 0, 1, 1, 0],
    101                 [0, 0, 1, 1, 0, 0, 0],
    102                 [0, 1, 1, 0, 0, 0, 0],
    103                 [1, 1, 0, 0, 0, 0, 0],
    104                 [1, 1, 0, 1, 1, 1, 0],
    105                 [1, 1, 0, 0, 0, 1, 1],
    106                 [1, 1, 0, 0, 0, 1, 1],
    107                 [1, 1, 0, 0, 0, 1, 1],
    108                 [1, 1, 0, 0, 0, 1, 1],
    109                 [0, 1, 1, 1, 1, 1, 0]
    110             ], //6
    111             [
    112                 [1, 1, 1, 1, 1, 1, 1],
    113                 [1, 1, 0, 0, 0, 1, 1],
    114                 [0, 0, 0, 0, 1, 1, 0],
    115                 [0, 0, 0, 0, 1, 1, 0],
    116                 [0, 0, 0, 1, 1, 0, 0],
    117                 [0, 0, 0, 1, 1, 0, 0],
    118                 [0, 0, 1, 1, 0, 0, 0],
    119                 [0, 0, 1, 1, 0, 0, 0],
    120                 [0, 0, 1, 1, 0, 0, 0],
    121                 [0, 0, 1, 1, 0, 0, 0]
    122             ], //7
    123             [
    124                 [0, 1, 1, 1, 1, 1, 0],
    125                 [1, 1, 0, 0, 0, 1, 1],
    126                 [1, 1, 0, 0, 0, 1, 1],
    127                 [1, 1, 0, 0, 0, 1, 1],
    128                 [0, 1, 1, 1, 1, 1, 0],
    129                 [1, 1, 0, 0, 0, 1, 1],
    130                 [1, 1, 0, 0, 0, 1, 1],
    131                 [1, 1, 0, 0, 0, 1, 1],
    132                 [1, 1, 0, 0, 0, 1, 1],
    133                 [0, 1, 1, 1, 1, 1, 0]
    134             ], //8
    135             [
    136                 [0, 1, 1, 1, 1, 1, 0],
    137                 [1, 1, 0, 0, 0, 1, 1],
    138                 [1, 1, 0, 0, 0, 1, 1],
    139                 [1, 1, 0, 0, 0, 1, 1],
    140                 [0, 1, 1, 1, 0, 1, 1],
    141                 [0, 0, 0, 0, 0, 1, 1],
    142                 [0, 0, 0, 0, 0, 1, 1],
    143                 [0, 0, 0, 0, 1, 1, 0],
    144                 [0, 0, 0, 1, 1, 0, 0],
    145                 [0, 1, 1, 0, 0, 0, 0]
    146             ], //9
    147             [
    148                 [0, 0, 0, 0],
    149                 [0, 0, 0, 0],
    150                 [0, 1, 1, 0],
    151                 [0, 1, 1, 0],
    152                 [0, 0, 0, 0],
    153                 [0, 0, 0, 0],
    154                 [0, 1, 1, 0],
    155                 [0, 1, 1, 0],
    156                 [0, 0, 0, 0],
    157                 [0, 0, 0, 0]
    158             ] //:
    159         ];            //0~9的显示数组
    160         var color=['#E98F4E','#E93C59','#8948E9','#6DBFE9','#25E9AF','#6EE975','#9315E9','#E9C71C','#E98893'];   //掉落小球的颜色
    161 
    162 
    163         canvas.width=1000;                   //在js里设置canvas的宽和高,在style里设置会拉伸画布,即画布中的内容也拉伸
    164         canvas.height=350;
    165         /*主函数*/
    166         (function(){
    167             timer=setInterval(function(){
    168                 updateTime();
    169                 ballTime();        //调用ballTime函数画出时间,传递参数是updateTime函数获取到的当前时间
    170                 update();
    171             },50);
    172         })();
    173 
    174         function updateTime(){
    175             lastTime=nowTime;                    //获取50ms以前的时间
    176             nowTime = new Date();                //获取当前时间
    177             lastTimer=[parseInt(lastTime.getHours()/10),
    178                 parseInt(lastTime.getHours()%10),
    179                 parseInt(lastTime.getMinutes()/10),
    180                 parseInt(lastTime.getMinutes()%10),
    181                 parseInt(lastTime.getSeconds()/10),
    182                 parseInt(lastTime.getSeconds()%10)];
    183 
    184             nowTimer=[parseInt(nowTime.getHours()/10),
    185                 parseInt(nowTime.getHours()%10),
    186                 parseInt(nowTime.getMinutes()/10),
    187                 parseInt(nowTime.getMinutes()%10),
    188                 parseInt(nowTime.getSeconds()/10),
    189                 parseInt(nowTime.getSeconds()%10)];
    190         }
    191 
    192         function ballTime(){
    193             jc.clear('canvas');            //清除上次绘制内容
    194             for(var i=0;i<6;i++){
    195                 var space=(i==0||i==2||i==4)?30:0; //时与分、分与秒之间的间隔
    196                 for (var y = 0; y < 10; y++) {
    197                     for (var x = 0; x < 7; x++) {
    198                         jc.start('canvas', true);
    199                         if (arry[nowTimer[i]][y][x] == 1) {
    200                             jc.circle(i * 150 + x * 2*RADIUS + RADIUS + space, y * 2*RADIUS + RADIUS + 20, RADIUS, '#008', 1).id('canvas');
    201                         } else {
    202                             jc.circle(i * 150 + x * 2*RADIUS + RADIUS + space, y * 2*RADIUS + RADIUS + 20, RADIUS, '#fff', 1).id('canvas');
    203                         }
    204                     }
    205                 }
    206             }
    207         }
    208 
    209         function update(){            //更新时间,判断是否有新的掉落小球生成
    210             for(var index=0;index<nowTimer.length;index++){
    211                 if(lastTimer[index]!=nowTimer[index]){
    212                     addBall(index);          //将新的掉落小球添加进数组中
    213                 }
    214             }
    215             updateBalls();              //在画布上画出
    216         }
    217 
    218         function addBall(index){
    219             var space=(index==1||index==4)?30:0;   //时与分、分与秒之间的间隔
    220             for (var y = 0; y < 10; y++) {
    221                 for (var x = 0; x < 7; x++) {
    222                     jc.start('canvas', true);
    223                     if (arry[nowTimer[index]][y][x] == 1) {
    224                         var balls={                          //添加掉落小球的属性
    225                             x:index * 150 + x * 2*RADIUS + RADIUS + space,           //掉落小球的位置
    226                             y:y * 2*RADIUS + RADIUS,
    227                             color:color[Math.floor(Math.random()*8+1)],
    228                             speedX:Math.floor(Math.random()*12-6),                       //初始横向速度
    229                             speedY:0,
    230                             thisTime:index
    231                         };
    232                         addBalls.push(balls);
    233                     }
    234                 }
    235             }
    236         }
    237     /*在画布上绘制掉落小球*/
    238         function updateBalls(){
    239             for(var index=0;index<addBalls.length;index++){
    240                 jc.start('canvas',true);
    241                 if((addBalls[index].y+2*RADIUS+50)<canvas.height){
    242                     jc.circle(addBalls[index].x+=addBalls[index].speedX,addBalls[index].y+=addBalls[index].speedY,RADIUS,addBalls[index].color,1).id('canvas');
    243                     addBalls[index].speedY+=2;              //从高处掉落的速度
    244                 }else{
    245                     addBalls[index].speedY=8-addBalls[index].speedY;                //掉落到地上后反弹起来的速度
    246                     if(addBalls[index].speedY>0||addBalls[index].x>canvas.width||addBalls[index]<0||addBalls[index].speedY==0){
    247                         addBalls.splice(index,1);          //如果某个掉落小球的横向坐标超出画布范围或者速度小于8则删除该小球
    248                     }
    249                     if(addBalls.length>200){
    250                         addBalls.splice(0,100);
    251                     }
    252                     jc.circle(addBalls[index].x+=addBalls[index].speedX,addBalls[index].y+=addBalls[index].speedY,RADIUS,addBalls[index].color,1).id('canvas');
    253                 }
    254             }
    255         }
    256     </script>
    257 </body>
    258 </html>
  • 相关阅读:
    分布式哈希和一致性哈希算法
    消息队列rabbitmq的五种工作模式(go语言版本)
    Mysql查询缓存
    数据库的三大设计范式
    二叉树的常见算法
    消息队列选型分析
    Mysql防止索引失效原则
    Mysql索引优化单表、两表、三表实践
    数据结构 【栈与队列】
    谷歌实用插件
  • 原文地址:https://www.cnblogs.com/ljuyi/p/6032031.html
Copyright © 2011-2022 走看看