zoukankan      html  css  js  c++  java
  • HTML52 ( Essential.Guide )

    内容提要

    - 渐变效果

    - Timing event

    - 表单输入

    Image 对象

    var img = new Image() ;   // 必须大写

    img.src = “a.jpg”;

    ctx.drawImage(img, 10, 20, 50, 50);  //10,20 分别代表图标最左上角的坐标, 50,50 分别代表宽和高

    画矩形 :

    fillRect(左上x, 左上y, 宽,高)  // 左上顶点坐标,  宽度和高度

    渐变效果

    在HTML5中,有两种渐变效果,一种是沿着直线的渐变方式,我们称之为线性渐变;另一种是从一个点或圆沿着一个圆的半径向四周渐变的方式,我们称之为径向渐变。

    下面分别来介绍这两种的渐变方式。

    1. 线性渐变

    在HTML5中,有关于线性渐变的最主要的函数是createLinearGradient(x0,y0,x1,y1) ;

    createLinearGradient(x0,y0,x1,y1) 创建一个沿直线从(x0,y0)到(x1,y1)进行渐变

    我们可以利用createLinearGradient来创建一个线性渐变,我们来指定这个渐变的宽度为400像素,那么我们可以用如下的方式创建:( 注意这里的400是像素,即此函数不仅定义了渐变色,还定义了范围,如果超过这个范围,那么全部以外围色为准,此例为红色 )

       1:  var a_canvas = document.getElementById("a");    //获取canvas元素节点
       2:  var context = a_canvas.getContext("2d");   //设置canvas元素节点
       3:  var my_gradient  =  createLinearGradient(0,0,400,0);   //创建一个线性渐变

    由于点(0,0)到点(400,0)是从左到右的,所以我们创建的渐变也会沿水平从左到右。

    有了一个渐变对象之后,我们就需要定义渐变的颜色了,定义渐变的函数有addColor(per,color);

    addColorStop(per,color); 定义一个渐变颜色, per表示开始渐变位置占渐变区域大小的百分比,为0-1之间的任意值,color为颜色样式。

    那么接下来,我们定义两个渐变颜色,使得渐变区域从黄色到红色进行渐变,代码如下:

       1:  my_gradient.addColorStop(0,"#ff0");    //定义黄色渐变色
       2:  my_gradient.addColorStop(1,"#f00");    //定义红色渐变色

    定义完了以后,这些渐变信息都只是存在了内存当中,并没有在canvas中显示出来,要让渐变产生实际的效果,我们需要设置canvas内容的fillStyle为当前的渐变对象,并且绘制这个图形,比如一个矩形或者一条直线。所以,为了看到渐变效果,我们还需要以下代码:

    线性渐变

    那么至此,一个线性渐变的图形便绘制出来了,在chrome中运行的结果如下:

    image

    假如你想实现一个上下的线性渐变的效果,那么你应该在调用createLinearGradient(x0,y0,x1,y1) 创建渐变的时候保证点(x0,y0),点(x1,y1)连成的直线为竖直直线,也就是x0=x1。当然你也可以实现对角线渐变的效果,只要(x0,y0) (x1,y1)组成一条对角线就可以了。创建上下渐变和对角线渐变的代码如下:

    线性渐变

    2.径向渐变

      在HTML5中,有关于线性渐变的最主要的函数是createRadiaGradient(x0,y0,r0,x1,y1,r1);

     createRadialGradient(x0,y0,r0,x1,y1,r1) 创建一个沿两个圆之间的锥面绘制渐变。前三个参数代表一个圆心为(x0,y0)半径为r0的开始圆,后三个参数代表圆心为(x1,y1)半径为r1的结束圆。

      首先我们可以利用createLinearGradient来创建一个线性渐变,我们来指定这个渐变的宽度为400像素,那么我们可以用如下的方式创建:

    径向渐变


    创建完了之后,和线性渐变一样,我们同样需要定义渐变颜色,这一点和线性渐变毫无区别,比如,我们分别定义红色渐变色和蓝色渐变色:

    径向渐变

    同样地,定义完了以后,这些渐变信息都只是存在了内存当中,并没有在canvas中显示出来,要让渐变产生实际的效果,我们需要设置canvas内容的fillStyle为当前的渐变对象,并且绘制这个图形,比如一个矩形,代码如下:

    径向渐变

    至此,一个径向渐变的图形便绘制出来了,在chrome中运行的结果如下:

    image

       1:  ctx = document.getElementById("canvas").getContext("2d");
       2:              //  直线, 直线渐变
       3:              grad = ctx.createLinearGradient(0,0,200,0);    //创建渐变
       4:              grad.addColorStop(0,"#ff0");    //创建开始颜色
       5:              grad.addColorStop(1,"#f00");    //创建结束颜色
       6:              ctx.strokeStyle = grad;    
       7:              ctx.lineWidth = 20;
       8:              ctx.beginPath();
       9:              ctx.moveTo(0,0);
      10:              ctx.lineTo(400,300);
      11:              ctx.stroke();
      12:              
      13:              // 径向,渐变
      14:              grad = ctx.createRadialGradient(200,200,20, 200,200,100);
      15:              grad.addColorStop(0,"#ff0");    //创建开始颜色
      16:              grad.addColorStop(1,"#f00");    //创建结束颜色
      17:              ctx.fillStyle = grad;    
      18:              //ctx.lineWidth = 20;
      19:              ctx.beginPath();
      20:              ctx.arc(200,200,100,0,Math.PI*2,false);
      21:              //ctx.closePath();
      22:              ctx.fill();
      23:              //ctx.stroke();

    Timing event

    其中第2个参数是,时间间隔, 1000 = 1秒, 前边是函数名称,表示在这个时间间隔要做的函数。

    注意 : 如果函数没有参数,则只能使用函数名,不能加 (), 就是 setInterval(moveball, 100);

              如果函数有参数,则可以使用 setInterval(function(){ moveball(参数1,参数2…); }, 100) ;

    var timeIntervalId= setInterval( moveball, 100 );

    clearInterval( aa );    // 可以暂停 Interval 事件
    setTimeout(执行函数或字符串,等待时间)

    注意 : 不建议传递字符串,而统一使用函数
    var timeoutid = setTimeout(moveball, 100);

    clearTimeout(timeoutid) // 取消

    注意: 超时调用的代码都是在全局作用域中执行的,因此函数中 this 的值通常会指向 window 对象.

    超时调用 比 间隔调用的好处是,不用去跟踪间隔调用的ID, 如果间隔调用不跟踪间隔ID的话,程序就会一直运行下去,并且超时调用还可以模拟间隔调用,例如 :

    if ( num < max ) {

      setTimeout( incrementNumber, 500) ;  // 没有跟踪间隔调用

    } else {

      alert(“Done”);

    }

    注意 : 所以,一般推荐使用 超时调用模拟间隔调用

    表单输入

    HTML5 provides new facilites for validating form input. ( 就是增加了一个 number 类型, 相对于原来的 type=”text”, 这样如果你输入的不是数字,就会给出提示有问题。)

       1:  <form name="f" id="f" onSubmit="return change();">
       2:    Horizontal velocity : <input name="hv" id="hv" value="4" type="number" min="-10" max="10"/>
       3:    Vertiacal velocity :<input name="vv" id="vv" value="8" type="number" min="-10" max="10"/>
       4:    <input type="submit" value="CHANGE" />
       5:  </form>

    这样就可以在 CSS 文件中输入 ( 以下: CSS中有可能不支持, valid )

    配合

    02 源代码

    .html
       1:  <!doctype html>
       2:  <html>
       3:  <head>
       4:      <title>Bouncing Ball with inputs</title>
       5:      <script type="text/javascript" src="bounce.js"></script>
       6:      <link rel="stylesheet" type="text/css" href="bounce.css"/>
       7:      <!--
       8:      <style>
       9:          form {
      10:               330px;
      11:              margin: 20px;
      12:              background-color: brown;
      13:              padding: 20px;
      14:          }
      15:      </style>
      16:      -->
      17:  </head>
      18:  <body onLoad="init();">
      19:      <canvas id="canvas" width="400" height="300"></canvas>
      20:      <br />
      21:      <form name="f" id="f" onSubmit="return change();">
      22:          Horizontal velocity <input name="hv" id="hv" value="4" type="number" min="-10" max="10" />
      23:          <br />
      24:          Vertical velocity   <input name="vv" id="vv" value="8" type="number" min="-10" max="10" />
      25:          <input type="submit" value="CHANGE" />
      26:          <br />
      27:          <button name="b" id="b" type="button" onclick="stop();">Stop</button>
      28:          <button name="b2" id="b2" type="button" onclick="start();">Start</button>
      29:      </form>
      30:  </body>
      31:  </html>
    .css
    CSS
    .js
    javascript


     

  • 相关阅读:
    人民币格式化 ,分割
    解决IE下页面空白或者报错:[vuex] vuex requires a Promise polyfill in this browser
    js生成图片
    适用于iview的表格转Excel插件
    js金额转大写数字
    webstorm vue cli 热更新不起作用解决办法
    纯css实现 switch开关
    vue 时间戳转 YYYY-MM-DD h:m:s
    Simple2D-20(重构)
    Simple2D-19(音乐播放器)播放器的源码实现
  • 原文地址:https://www.cnblogs.com/moveofgod/p/2800224.html
Copyright © 2011-2022 走看看