canvas教程

HTML5中Canvas(绘制)使用例子(3)

字号+ 作者:H5之家 来源:H5之家 2017-07-21 14:00 我要评论( )

onload = function() { draw(); }; function draw() { var canvas = document.getElementById('c1'); if ( ! canvas || ! canvas.getContext ) { return false; } var ctx = canvas.getContext('2d'); ctx.beginPat

onload = function() {
  draw();
};
function draw() {
  var canvas = document.getElementById('c1');
  if ( ! canvas || ! canvas.getContext ) { return false; }
  var ctx = canvas.getContext('2d');
  ctx.beginPath();
  ctx.fillStyle = 'rgb(192, 80, 77)'; // 红
  ctx.arc(70, 45, 35, 0, Math.PI*2, false);
  ctx.fill();
  ctx.beginPath();
  ctx.fillStyle = 'rgb(155, 187, 89)'; // 绿
  ctx.arc(45, 95, 35, 0, Math.PI*2, false);
  ctx.fill();
  ctx.beginPath();
  ctx.fillStyle = 'rgb(128, 100, 162)'; // 紫
  ctx.arc(95, 95, 35, 0, Math.PI*2, false);
  ctx.fill();
}

效果如下图:

指定透明度

和普通的CSS中一样,我们指定颜色的时候还可以带一个alpha值(不过用的不多,IE9之前都不支持)。看代码:


onload = function() {
  draw();
};
function draw() {
  var canvas = document.getElementById('c1');
  if ( ! canvas || ! canvas.getContext ) { return false; }
  var ctx = canvas.getContext('2d');
  ctx.beginPath();
  ctx.fillStyle = 'rgba(192, 80, 77, 0.7)'; //
  ctx.arc(70, 45, 35, 0, Math.PI*2, false);
  ctx.fill();
  ctx.beginPath();
  ctx.fillStyle = 'rgba(155, 187, 89, 0.7)'; //
  ctx.arc(45, 95, 35, 0, Math.PI*2, false);
  ctx.fill();
  ctx.beginPath();
  ctx.fillStyle = 'rgba(128, 100, 162, 0.7)'; //
  ctx.arc(95, 95, 35, 0, Math.PI*2, false);
  ctx.fill();
}

结果就是下面这样:


和上面的代码基本没变化,就是把rgb(r, g, b)变成了rgba(r, g, b, a)而已,a的值也是0~1,0表示完全透明,1则是完全不透明(所以alpha的值实际上是“不透明度”)。

全局透明度

上面我们给每一个圆加了0.7的alpha值,不过我们每个圆的alpha都是一样的,每个都写一遍未免有些麻烦(说是我没觉得麻烦……只不过不这么说就没法引出这个新功能啊:)

ctx.globalAlpha = alpha

这个参数指定了全局的alpha值,这么设定之后,所有画的图案都会有这么点的透明,除非你又特别指定了。所以把我们的第一个例子稍微改一下:

onload = function() {
  draw();
};
function draw() {
  var canvas = document.getElementById('c1');
  if ( ! canvas || ! canvas.getContext ) { return false; }
  var ctx = canvas.getContext('2d');
  ctx.globalAlpha = 0.7;    // 就多了这么一句
  ctx.beginPath();
  ctx.fillStyle = 'rgb(192, 80, 77)';
  ctx.arc(70, 45, 35, 0, Math.PI*2, false);
  ctx.fill();
  ctx.beginPath();
  ctx.fillStyle = 'rgb(155, 187, 89)';
  ctx.arc(45, 95, 35, 0, Math.PI*2, false);
  ctx.fill();
  ctx.beginPath();
  ctx.fillStyle = 'rgb(128, 100, 162)';
  ctx.arc(95, 95, 35, 0, Math.PI*2, false);
  ctx.fill();
}
然后我们的结果就和2完全一样了:

画图多的时候,还是能少打很多字的。

varhttp = require('http');

varexpress = require('express');

varapp = express();//实例化

varkey ='OxLYdFmu3YS1haMUcaBmGMBK0P7PbOqb';//百度api的key

varbodyParser = require('body-parser');

// 创建 application/x-www-form-urlencoded 编码解析

// var urlencodedParser = bodyParser.urlencoded({ extended: false })

app.use(bodyParser.json());//json编码

//设置跨域访问

app.all('*',function(req, res, next) {

res.header("Access-Control-Allow-Origin","*");

res.header("Access-Control-Allow-Headers","X-Requested-With,Content-Type");

res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE");

res.header("X-Powered-By",' 3.2.1')

res.header("Content-Type","application/json;charset=utf-8");

next();

});

//post请求,url/map

app.post('/map',function(req,res){

varipArr = req.body;

varresult = Array();

for(vari = 0; i < ipArr.length; i++) {

vartree ='';

varoptions = {

hostname:'api.map.baidu.com',

port: 80,

path:'/location/ip?ak='+ key +"&coor=bd09ll&ip="+ ipArr[i],

method:'GET'

};

// 向远程服务器端发送请求

vargetLocation = http.request(options,function(response){

response.on('data',function(data) {

tree += data;

result.push(tree);

//避免缓存

tree ='';

});

});

getLocation.end();

}

//延后发送请求响应

setTimeout(function(){

res.status(200).send(result);

}, 500);

})

//监听8081接口打印请求域名和端口

varserver = app.listen(8081,function() {

varhost = server.address().address

varport = server.address().port

console.log("应用实例,访问地址为 %s:%s", host, port)

})

@ResponseBody

@RequestMapping("entityFindByCode")

public String entityFindByCode(Entity bean, HttpSession httpSession, Model m,HttpServletResponse res) throws IOException{

  res.setContentType("text/plain; charset=UTF-8");

  //res.reset();

  //PrintWriter out = res.getWriter();

  String data=null;

  @SuppressWarnings("unchecked")

  List list = (List)this.service.find("beanByCode","Entity",newObject[]{bean.getCode()});

  if(list.size()==0){

    data="YES";

  }else{

    data="NO";

  }

  res.getOutputStream().write(data.getBytes());

  //out.print(data);

  //out.flush();

  //out.close();

  returndata;

}

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 用HTML5制作数字时钟的教程

    用HTML5制作数字时钟的教程

    2017-07-21 13:05

  • Immunity Canvas & Core Impact

    Immunity Canvas & Core Impact

    2017-07-21 13:00

  • canvas 和 express 的一款图片格式转换工具

    canvas 和 express 的一款图片格式转换工具

    2017-07-21 09:04

  • HTML5 Canvas实现玫瑰曲线和心形图案的代码实例

    HTML5 Canvas实现玫瑰曲线和心形图案的代码实例

    2017-07-21 08:00

网友点评
a