GVKun编程网logo

HTML5 Canvas移动手机端的幸运大奖盘特效(h5幸运大转盘)

18

在这里,我们将给大家分享关于HTML5Canvas移动手机端的幸运大奖盘特效的知识,让您更了解h5幸运大转盘的本质,同时也会涉及到如何更有效地7款炫酷的HTML5Canvas动画特效、HTML5can

在这里,我们将给大家分享关于HTML5 Canvas移动手机端的幸运大奖盘特效的知识,让您更了解h5幸运大转盘的本质,同时也会涉及到如何更有效地7款炫酷的HTML5 Canvas动画特效、HTML5 canvas 旋转进度加载特效、HTML5 Canvas 破碎重组的视频特效、HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图_html5教程技巧的内容。

本文目录一览:

HTML5 Canvas移动手机端的幸运大奖盘特效(h5幸运大转盘)

HTML5 Canvas移动手机端的幸运大奖盘特效(h5幸运大转盘)

简要教程

这是一款基于jquery和HTML5 Canvas的幸运大奖盘特效。该幸运大奖品特效支持移动端,它通过动态构造Canvas元素来生成大奖盘,并通过jquery代码来随机获取奖品。

 使用方法

HTML结构

抽奖用的大转盘使用图片来制作,开始时它们被隐藏。整个抽奖大奖盘放置在一个容器中,控制容器的大小即可以控制奖盘的大小。

<div>
  <img  src="images/1.png" id="shan-img"/ alt="HTML5 Canvas移动手机端的幸运大奖盘特效" >
  <img  src="images/2.png" id="sorry-img"/ alt="HTML5 Canvas移动手机端的幸运大奖盘特效" >
  <div>
    <div>
      <canvasid="wheelcanvas" width="422px" height="422px"></canvas>
      <imgsrc="images/turnplate-pointer.png"/ alt="HTML5 Canvas移动手机端的幸运大奖盘特效" >
    </div>
  </div>
</div>
登录后复制
CSS样式

为大奖盘添加下面的CSS样式:

.banner{display:block;width:95%;margin-left:auto;margin-right:auto;margin-bottom: 20px;}
.banner .turnplate{display:block;width:100%;position:relative;}
.banner .turnplate canvas.item{width:100%;}
.banner .turnplate img.pointer{position:absolute;width:31.5%;height:42.5%;left:34.6%;top:23%;}
登录后复制
JavaScript

整个大奖盘的jquery实现代码如下:

立即学习“前端免费学习笔记(深入)”;

var turnplate={
    restaraunts:[],       //大转盘奖品名称
    colors:[],          //大转盘奖品区块对应背景颜色
    outsideRadius:192,      //大转盘外圆的半径
    textRadius:155,       //大转盘奖品位置距离圆心的距离
    insideRadius:68,      //大转盘内圆的半径
    startAngle:0,       //开始角度
     
    bRotate:false       //false:停止;ture:旋转
};
 
$(document).ready(function(){
  //动态添加大转盘的奖品与奖品区域背景颜色
  turnplate.restaraunts = ["50M免费流量包", "10金币", "谢谢参与", "5金币", "10M免费流量包", "20M免费流量包", "20金币 ", "30M免费流量包", "100M免费流量包", "2金币"];
  turnplate.colors = ["#FFF4D6", "#FFFFFF", "#FFF4D6", "#FFFFFF","#FFF4D6", "#FFFFFF", "#FFF4D6", "#FFFFFF","#FFF4D6", "#FFFFFF"];
 
   
  var rotateTimeOut = function (){
    $(&#39;#wheelcanvas&#39;).rotate({
      angle:0,
      animateTo:2160,
      duration:8000,
      callback:function (){
        alert(&#39;网络超时,请检查您的网络设置!&#39;);
      }
    });
  };
 
  //旋转转盘 item:奖品位置; txt:提示语;
  var rotateFn = function (item, txt){
    var angles = item * (360 / turnplate.restaraunts.length) - (360 / (turnplate.restaraunts.length*2));
    if(angles<270){
      angles = 270 - angles; 
    }else{
      angles = 360 - angles + 270;
    }
    $(&#39;#wheelcanvas&#39;).stopRotate();
    $(&#39;#wheelcanvas&#39;).rotate({
      angle:0,
      animateTo:angles+1800,
      duration:8000,
      callback:function (){
        alert(txt);
        turnplate.bRotate = !turnplate.bRotate;
      }
    });
  };
 
  $(&#39;.pointer&#39;).click(function (){
    if(turnplate.bRotate)return;
    turnplate.bRotate = !turnplate.bRotate;
    //获取随机数(奖品个数范围内)
    var item = rnd(1,turnplate.restaraunts.length);
    //奖品数量等于10,指针落在对应奖品区域的中心角度[252, 216, 180, 144, 108, 72, 36, 360, 324, 288]
    rotateFn(item, turnplate.restaraunts[item-1]);
  });
});
 
function rnd(n, m){
  var random = Math.floor(Math.random()*(m-n+1)+n);
  return random;
   
}
 
 
//页面所有元素加载完毕后执行drawRouletteWheel()方法对转盘进行渲染
window.onload=function(){
  drawRouletteWheel();
};
 
function drawRouletteWheel() {    
  var canvas = document.getElementById("wheelcanvas");    
  if (canvas.getContext) {
    //根据奖品个数计算圆周角度
    var arc = Math.PI / (turnplate.restaraunts.length/2);
    var ctx = canvas.getContext("2d");
    //在给定矩形内清空一个矩形
    ctx.clearRect(0,0,422,422);
    //strokeStyle 属性设置或返回用于笔触的颜色、渐变或模式  
    ctx.stroke;
    //font 属性设置或返回画布上文本内容的当前字体属性
    ctx.font = &#39;16px Microsoft YaHei&#39;;      
    for(var i = 0; i < turnplate.restaraunts.length; i++) {       
      var angle = turnplate.startAngle + i * arc;
      ctx.fillStyle = turnplate.colors[i];
      ctx.beginPath();
      //arc(x,y,r,起始角,结束角,绘制方向) 方法创建弧/曲线(用于创建圆或部分圆)    
      ctx.arc(211, 211, turnplate.outsideRadius, angle, angle + arc, false);    
      ctx.arc(211, 211, turnplate.insideRadius, angle + arc, angle, true);
      ctx.stroke();  
      ctx.fill();
      //锁画布(为了保存之前的画布状态)
      ctx.save();   
       
      //----绘制奖品开始----
      ctx.fill;
      var text = turnplate.restaraunts[i];
      var line_height = 17;
      //translate方法重新映射画布上的 (0,0) 位置
      ctx.translate(211 + Math.cos(angle + arc / 2) * turnplate.textRadius, 211 + Math.sin(angle + arc / 2) * turnplate.textRadius);
       
      //rotate方法旋转当前的绘图
      ctx.rotate(angle + arc / 2 + Math.PI / 2);
       
      /** 下面代码根据奖品类型、奖品名称长度渲染不同效果,如字体、颜色、图片效果。(具体根据实际情况改变) **/
      if(text.indexOf("M")>0){//流量包
        var texts = text.split("M");
        for(var j = 0; j<texts.length; j++){
          ctx.font = j == 0?&#39;bold 20px Microsoft YaHei&#39;:&#39;16px Microsoft YaHei&#39;;
          if(j == 0){
            ctx.fillText(texts[j]+"M", -ctx.measureText(texts[j]+"M").width / 2, j * line_height);
          }else{
            ctx.fillText(texts[j], -ctx.measureText(texts[j]).width / 2, j * line_height);
          }
        }
      }else if(text.indexOf("M") == -1 && text.length>6){//奖品名称长度超过一定范围 
        text = text.substring(0,6)+"||"+text.substring(6);
        var texts = text.split("||");
        for(var j = 0; j<texts.length; j++){
          ctx.fillText(texts[j], -ctx.measureText(texts[j]).width / 2, j * line_height);
        }
      }else{
        //在画布上绘制填色的文本。文本的默认颜色是黑色
        //measureText()方法返回包含一个对象,该对象包含以像素计的指定字体宽度
        ctx.fillText(text, -ctx.measureText(text).width / 2, 0);
      }
       
      //添加对应图标
      if(text.indexOf("金币")>0){
        var img= document.getElementById("shan-img");
        img.onload=function(){  
          ctx.drawImage(img,-15,10);      
        }; 
        ctx.drawImage(img,-15,10);  
      }else if(text.indexOf("谢谢参与")>=0){
        var img= document.getElementById("sorry-img");
        img.onload=function(){  
          ctx.drawImage(img,-15,10);      
        };  
        ctx.drawImage(img,-15,10);  
      }
      //把当前画布返回(调整)到上一个save()状态之前 
      ctx.restore();
      //----绘制奖品结束----
    }     
  } 
}
登录后复制

以上就是HTML5 Canvas移动手机端的幸运大奖盘特效的内容。

7款炫酷的HTML5 Canvas动画特效

7款炫酷的HTML5 Canvas动画特效

HTML5真的是一个相当出色的Web技术,它不仅可以让你更加方便地操纵页面元素,而且可以通过canvas实现更多的动画特效,引进HTML5标准后,CSS3也就可以发挥更大的作用。本文主要介绍了一些基于HTML5 Canvas的动画特效,分享给大家,希望大家喜欢。

1、HTML5 Canvas瀑布动画 超逼真

这是一个很逼真的HTML5瀑布动画,基于Canvas实现的,效果相当酷。

在线演示源码下载

2、HTML5 Canvas彩色像素进度条动画

这也是一款基于HTML5 Canvas的动画特效,它是一个很有创意的HTML5进度条,大家可以试试。

在线演示源码下载

3、HTML5 Canvas粒子模拟效果

这是一款利用HTML5 Canvas模拟出来的30000个粒子动画,当你用鼠标在canvas画布上移动时,鼠标周围的一些粒子就会跟着你移动,并形成一定的图案,就像你在玩沙画一样,效果非常不错。这里,我们应用了一些HTML5的特性,让这个粒子动画显得相当动感。

在线演示源码下载

4、HTML5 Canvas放射线动画

这款HTML5 Canvas尽管不怎么实用,但是你可以从中学到很多HTML5的相关知识,包括如何绘制动态直线,如果计算节点之间的距离等。

在线演示源码下载

5、HTML5动感的火焰燃烧动画特效

这是一款非常逼真而且炫酷的HTML5火焰动画,火焰的窜动跟真的蜡烛火焰差不多。

在线演示源码下载

6、HTML5 Canvas 3D折线图表应用

这款HTML5图表很特别,首先它是基于Canvas的,其次它有3D的折线动画。

在线演示源码下载

7、HTML5 SVG 树枝分叉动画特效

它是一个可以自动分叉的树,动画将以二叉树的形式展开。这三颗SVG树先是用svg的g画笔来定义这些树枝,然后利用javascript来实现动态改变g从而实现树枝的分叉展开动画。

在线演示源码下载

以上这7款HTML5 Canvas动画都非常炫酷,你可以下载源码来研究HTML5的相关知识。

HTML5 canvas 旋转进度加载特效

HTML5 canvas 旋转进度加载特效

OSC 请你来轰趴啦!1028 苏州源创会,一起寻宝 AI 时代

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">

  <title>HTML5 Canvas 旋转进度加载特效 </title>

  <style>
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'''';content:none}table{border-collapse:collapse;border-spacing:0}

</style>

    <style>
body {
  background: #000;
}

img {
  display: block;
 
  margin: 0 auto;
}

canvas {
 display: block;

 margin:0 auto;

}
</style>

</head>

<body>


<canvas id="c"></canvas>

<script>

var c = document.getElementById(''c''),
    ctx = c.getContext(''2d''),
    cw = c.width = 400,
  ch = c.height = 300,
    rand = function(a,b){return ~~((Math.random()*(b-a+1))+a);},
    dToR = function(degrees){
        return degrees * (Math.PI / 180);
    },
    circle = {
      x: (cw / 2) + 5,
      y: (ch / 2) + 22,
      radius: 90,
      speed: 2,
      rotation: 0,
      angleStart: 270,
      angleEnd: 90,
      hue: 220,
      thickness: 18,
      blur: 25
    },
    particles = [],
    particleMax = 100,
    updateCircle = function(){
      if(circle.rotation < 360){
       circle.rotation += circle.speed;
      } else {
       circle.rotation = 0;
      }
    },
    renderCircle = function(){
      ctx.save();
      ctx.translate(circle.x, circle.y);
      ctx.rotate(dToR(circle.rotation));
      ctx.beginPath();
      ctx.arc(0, 0, circle.radius, dToR(circle.angleStart), dToR(circle.angleEnd), true);
      ctx.lineWidth = circle.thickness;   
      ctx.strokeStyle = gradient1;
      ctx.stroke();
      ctx.restore();
    },
    renderCircleBorder = function(){
      ctx.save();
      ctx.translate(circle.x, circle.y);
      ctx.rotate(dToR(circle.rotation));
      ctx.beginPath();
      ctx.arc(0, 0, circle.radius + (circle.thickness/2), dToR(circle.angleStart), dToR(circle.angleEnd), true);
      ctx.lineWidth = 2; 
      ctx.strokeStyle = gradient2;
      ctx.stroke();
      ctx.restore();
    },
  renderCircleFlare = function(){
      ctx.save();
      ctx.translate(circle.x, circle.y);
      ctx.rotate(dToR(circle.rotation+185));
      ctx.scale(1,1);
      ctx.beginPath();
      ctx.arc(0, circle.radius, 30, 0, Math.PI *2, false);
      ctx.closePath();
      var gradient3 = ctx.createRadialGradient(0, circle.radius, 0, 0, circle.radius, 30);     
      gradient3.addColorStop(0, ''hsla(330, 50%, 50%, .35)'');
      gradient3.addColorStop(1, ''hsla(330, 50%, 50%, 0)'');
      ctx.fillStyle = gradient3;
      ctx.fill();    
      ctx.restore();
    },
    renderCircleFlare2 = function(){
      ctx.save();
      ctx.translate(circle.x, circle.y);
      ctx.rotate(dToR(circle.rotation+165));
      ctx.scale(1.5,1);
      ctx.beginPath();
      ctx.arc(0, circle.radius, 25, 0, Math.PI *2, false);
      ctx.closePath();
      var gradient4 = ctx.createRadialGradient(0, circle.radius, 0, 0, circle.radius, 25);
      gradient4.addColorStop(0, ''hsla(30, 100%, 50%, .2)'');
      gradient4.addColorStop(1, ''hsla(30, 100%, 50%, 0)'');
      ctx.fillStyle = gradient4;
      ctx.fill();    
      ctx.restore();
    },
    createParticles = function(){
      if(particles.length < particleMax){
        particles.push({
          x: (circle.x + circle.radius * Math.cos(dToR(circle.rotation-85))) + (rand(0, circle.thickness*2) - circle.thickness),
          y: (circle.y + circle.radius * Math.sin(dToR(circle.rotation-85))) + (rand(0, circle.thickness*2) - circle.thickness),
          vx: (rand(0, 100)-50)/1000,
          vy: (rand(0, 100)-50)/1000,
          radius: rand(1, 6)/2,
          alpha: rand(10, 20)/100
        });
      }
    },
    updateParticles = function(){
      var i = particles.length;
      while(i--){
       var p = particles[i];
        p.vx += (rand(0, 100)-50)/750;
        p.vy += (rand(0, 100)-50)/750;
        p.x += p.vx;
        p.y += p.vy;
        p.alpha -= .01;
       
        if(p.alpha < .02){
          particles.splice(i, 1)
        }
      }
    },
    renderParticles = function(){
      var i = particles.length;
      while(i--){
       var p = particles[i];
        ctx.beginPath();
        ctx.fillRect(p.x, p.y, p.radius, p.radius);
        ctx.closePath();
        ctx.fillhsla(0, 0%, 100%, ''+p.alpha+'')'';
      }
    },
    clear = function(){
      ctx.globalCompositeOperation = ''destination-out'';
      ctx.fillrgba(0, 0, 0, .1)'';
      ctx.fillRect(0, 0, cw, ch);
      ctx.globalCompositeOperation = ''lighter'';  
    }
    loop = function(){
      clear();
      updateCircle();
      renderCircle();
      renderCircleBorder();
      renderCircleFlare();
      renderCircleFlare2();
      createParticles();
      updateParticles();
      renderParticles();
    }


ctx.shadowBlur = circle.blur;
ctx.shadowColor = ''hsla(''+circle.hue+'', 80%, 60%, 1)'';
ctx.lineCap = ''round''
 
var gradient1 = ctx.createLinearGradient(0, -circle.radius, 0, circle.radius);
gradient1.addColorStop(0, ''hsla(''+circle.hue+'', 60%, 50%, .25)'');
gradient1.addColorStop(1, ''hsla(''+circle.hue+'', 60%, 50%, 0)'');
 
var gradient2 = ctx.createLinearGradient(0, -circle.radius, 0, circle.radius);
gradient2.addColorStop(0, ''hsla(''+circle.hue+'', 100%, 50%, 0)'');
gradient2.addColorStop(.1, ''hsla(''+circle.hue+'', 100%, 100%, .7)'');
gradient2.addColorStop(1, ''hsla(''+circle.hue+'', 100%, 50%, 0)'');


setInterval(loop, 16);

</script>

</body>

</html>

HTML5 Canvas 破碎重组的视频特效

HTML5 Canvas 破碎重组的视频特效

也许你见过HTML5图片破碎动画特效,实现的原理也挺简单的。但是你应该没有见过视频也可以破碎重组,这个HTML5动画就是利用Canvas的相关特性,实现了点击鼠标让视频破碎重组的效果。在视频区域点击鼠标,即可让该区域的视频破碎,让后经过一段时间后,破碎的区域又可以重组还原,视觉效果非常棒。

在线演示源码下载

HTML代码

<divhttps://www.jb51.cc/tag/dis/" target="_blank">display:none">
		<video id="sourcevid" autoplay="true" loop="true">
			<source src="BigBuckBunny_640x360.mp4" type="video/mp4"/>
			<source src="BigBuckBunny_640x360.ogv" type="video/ogg"/>
		</video>
		<canvas id="sourcecopy" width="640" height="360"></canvas>
</div>
<div>
<center>
	<div>Click video to blow it up!</div>
	<canvas id="output" width="1000" height="600" onmousedown="dropBomb(event,this)">        </canvas>
</center>
</div>

JavaScript代码

var video;
var copy;
var copycanvas;
var draw;

var TILE_WIDTH = 32;
var TILE_HEIGHT = 24;
var TILE_CENTER_WIDTH = 16;
var TILE_CENTER_HEIGHT = 12;
var SOURCERECT = {x:0,y:0,width:0,height:0};
var PAINTRECT = {x:0,width:1000,height:600};

function init(){
	video = document.getElementById('sourcevid');
	copycanvas = document.getElementById('sourcecopy');
	copy = copycanvas.getContext('2d');
	var outputcanvas = document.getElementById('output');
	draw = outputcanvas.getContext('2d');
	setInterval("processFrame()",33);
}
function createTiles(){
	var offsetX = TILE_CENTER_WIDTH+(PAINTRECT.width-SOURCERECT.width)/2;
	var offsetY = TILE_CENTER_HEIGHT+(PAINTRECT.height-SOURCERECT.height)/2;
	var y=0;
	while(y < SOURCERECT.height){
		var x=0;
		while(x < SOURCERECT.width){
			var tile = new Tile();
			tile.videoX = x;
			tile.videoY = y;
			tile.originX = offsetX+x;
			tile.originY = offsetY+y;
			tile.currentX = tile.originX;
			tile.currentY = tile.originY;
			tiles.push(tile);
			x+=TILE_WIDTH;
		}
		y+=TILE_HEIGHT;
	}
}

var RAD = Math.PI/180;
var randomJump = false;
var tiles = [];
var debug = false;
function processFrame(){
	if(!isNaN(video.duration)){
		if(SOURCERECT.width == 0){
			SOURCERECT = {x:0,width:video.videoWidth,height:video.videoHeight};
			createTiles();
		}
		//this is to keep my sanity while developing
		if(randomJump){
			randomJump = false;
			video.currentTime = Math.random()*video.duration;
		}
		//loop
		if(video.currentTime == video.duration){
			video.currentTime = 0;
		}
	}
	var debugStr = "";
	//copy tiles
	copy.drawImage(video,0);
	draw.clearRect(PAINTRECT.x,PAINTRECT.y,PAINTRECT.width,PAINTRECT.height);

	for(var i=0; i<tiles.length; i++){
		var tile = tiles[i];
		if(tile.force > 0.0001){
			//expand
			tile.moveX *= tile.force;
			tile.moveY *= tile.force;
			tile.moveRotation *= tile.force;
			tile.currentX += tile.moveX;
			tile.currentY += tile.moveY;
			tile.rotation += tile.moveRotation;
			tile.rotation %= 360;
			tile.force *= 0.9;
			if(tile.currentX <= 0 || tile.currentX >= PAINTRECT.width){
				tile.moveX *= -1;
			}
			if(tile.currentY <= 0 || tile.currentY >= PAINTRECT.height){
				tile.moveY *= -1;
			}
		}else if(tile.rotation != 0 || tile.currentX != tile.originX || tile.currentY != tile.originY){
			//contract
			var diffx = (tile.originX-tile.currentX)*0.2;
			var diffy = (tile.originY-tile.currentY)*0.2;
			var diffRot = (0-tile.rotation)*0.2;

			if(Math.abs(diffx) < 0.5){
				tile.currentX = tile.originX;
			}else{
				tile.currentX += diffx;
			}
			if(Math.abs(diffy) < 0.5){
				tile.currentY = tile.originY;
			}else{
				tile.currentY += diffy;
			}
			if(Math.abs(diffRot) < 0.5){
				tile.rotation = 0;
			}else{
				tile.rotation += diffRot;
			}
		}else{
			tile.force = 0;
		}
		draw.save();
		draw.translate(tile.currentX,tile.currentY);
		draw.rotate(tile.rotation*RAD);
		draw.drawImage(copycanvas,tile.videoX,tile.videoY,TILE_WIDTH,TILE_HEIGHT,-TILE_CENTER_WIDTH,-TILE_CENTER_HEIGHT,TILE_HEIGHT);
		draw.restore();
	}
	if(debug){
		debug = false;
		document.getElementById('trace').innerHTML = debugStr;
	}
}

function explode(x,y){
	for(var i=0; i<tiles.length; i++){
		var tile = tiles[i];

		var xdiff = tile.currentX-x;
		var ydiff = tile.currentY-y;
		var dist = Math.sqrt(xdiff*xdiff + ydiff*ydiff);

		var randRange = 220+(Math.random()*30);
		var range = randRange-dist;
		var force = 3*(range/randRange);
		if(force > tile.force){
			tile.force = force;
			var radians = Math.atan2(ydiff,xdiff);
			tile.moveX = Math.cos(radians);
			tile.moveY = Math.sin(radians);
			tile.moveRotation = 0.5-Math.random();
		}
	}
	tiles.sort(zindexSort);
	processFrame();
}
function zindexSort(a,b){
	return (a.force-b.force);
}

function dropBomb(evt,obj){
	var posx = 0;
	var posy = 0;
	var e = evt || window.event;
	if (e.pageX || e.pageY){
		posx = e.pageX;
		posy = e.pageY;
	}else if (e.clientX || e.clientY) {
		posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}
	var canvasX = posx-obj.offsetLeft;
	var canvasY = posy-obj.offsetTop;
	explode(canvasX,canvasY);
}

function Tile(){
	this.originX = 0;
	this.originY = 0;
	this.currentX = 0;
	this.currentY = 0;
	this.rotation = 0;
	this.force = 0;
	this.z = 0;
	this.moveX= 0;
	this.moveY= 0;
	this.moveRotation = 0;

	this.videoX = 0;
	this.videoY = 0;
}

/*
	getPixel
	return pixel object {r,g,b,a}
*/
function getPixel(imageData,x,y){
	var data = imageData.data;
	var pos = (x + y * imageData.width) * 4;
	return {r:data[pos],g:data[pos+1],b:data[pos+2],a:data[pos+3]}
}
/*
	setPixel
	set pixel object {r,a}
*/
function setPixel(imageData,y,pixel){
	var data = imageData.data;
	var pos = (x + y * imageData.width) * 4;
	data[pos] = pixel.r;
	data[pos+1] = pixel.g;
	data[pos+2] = pixel.b;
	data[pos+3] = pixel.a;
}
/*
	copyPixel
	faster then using getPixel/setPixel combo
*/
function copyPixel(sImageData,sx,sy,dImageData,dx,dy){
	var spos = (sx + sy * sImageData.width) * 4;
	var dpos = (dx + dy * dImageData.width) * 4;
	dImageData.data[dpos] = sImageData.data[spos];     //R
	dImageData.data[dpos+1] = sImageData.data[spos+1]; //G
	dImageData.data[dpos+2] = sImageData.data[spos+2]; //B
	dImageData.data[dpos+3] = sImageData.data[spos+3]; //A
}
</script>

在线演示源码下载

HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图_html5教程技巧

HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图_html5教程技巧

html5火的正热,最近有个想法也是要用到html的相关功能,所以也要好好学习一把。

好好看了一下Canvas的功能,感觉HTML5在客户端交互的功能性越来越强了,今天看了一下Canvas绘图,下边是几个实例,记下以备后用。

1、使用Canvas绘制直线:


 

XML/HTML Code复制内容到剪贴板
  1. nbsp;html>  
  2. html>  
  3.     head>  
  4.         meta charset="UTF-8">  
  5.     head>  
  6.     style type="text/css">  
  7.         canvas{border:dashed 2px #CCC}   
  8.     style>  
  9.     script type="text/javascript">  
  10.         function $$(id){   
  11.             return document.getElementById(id);   
  12.         }   
  13.         function pageLoad(){   
  14.             var can = $$(''can'');   
  15.             var cancans = can.getContext(''2d'');   
  16.             cans.moveTo(20,30);//第一个起点   
  17.             cans.lineTo(120,90);//第二个点   
  18.             cans.lineTo(220,60);//第三个点(以第二个点为起点)   
  19.             cans.lineWidth=3;   
  20.             cans.strokeStyle = ''red'';   
  21.             cans.stroke();   
  22.         }   
  23.     script>  
  24.     body onload="pageLoad();">  
  25.         canvas id="can" width="400px" height="300px">4canvas>  
  26.     body>  
  27. html>  

这里用到的两个API方法,moveTo和lineTo分别是线段的起点和终点坐标,变量为(X坐标,Y坐标),strokeStyle、stroke分别路径绘制样式和绘制路径。

立即学习“前端免费学习笔记(深入)”;

2、绘制渐变线条

渐变线条就是颜色有渐变的效果,当然渐变的样式可以遵循路径的方向也可以不遵循路径的方向:

XML/HTML Code复制内容到剪贴板
  1. nbsp;html>  
  2. html>  
  3.     head>  
  4.         meta charset="UTF-8">  
  5.     head>  
  6.     style type="text/css">  
  7.         canvas{border:dashed 2px #CCC}   
  8.     style>  
  9.     script type="text/javascript">  
  10.         function $$(id){   
  11.             return document.getElementById(id);   
  12.         }   
  13.         function pageLoad(){   
  14.             var can = $$(''can'');   
  15.             var cancans = can.getContext(''2d'');   
  16.             cans.moveTo(0,0);   
  17.             cans.lineTo(400,300);   
  18.             var gnt1 = cans.createLinearGradient(0,0,400,300);//线性渐变的起止坐标   
  19.             gnt1.addColorStop(0,''red'');//创建渐变的开始颜色,0表示偏移量,个人理解为直线上的相对位置,最大为1,一个渐变中可以写任意个渐变颜色   
  20.             gnt1.addColorStop(1,''yellow'');   
  21.             cans.lineWidth=3;   
  22.             cans.strokeStyle = gnt1;   
  23.             cans.stroke();   
  24.         }   
  25.     script>  
  26.     body onload="pageLoad();">  
  27.         canvas id="can" width="400px" height="300px">4canvas>  
  28.     body>  
  29. html>  

3、绘制矩形或正方形:

这种矩形框如果使用HTML4只能使用后台代码才能生成了,现在HTML5提供的Canvas功能却很容易就能绘制,所以说HTML5的优越性是相当高的。

XML/HTML Code复制内容到剪贴板
  1. nbsp;html>  
  2. html>  
  3.     head>  
  4.         meta charset="UTF-8">  
  5.     head>  
  6.     style type="text/css">  
  7.         canvas{border:dashed 2px #CCC}   
  8.     style>  
  9.     script type="text/javascript">  
  10.         function $$(id){   
  11.             return document.getElementById(id);   
  12.         }   
  13.         function pageLoad(){   
  14.             var can = $$(''can'');   
  15.             var cancans = can.getContext(''2d'');   
  16.             cans.fillStyle = ''yellow'';   
  17.             cans.fillRect(30,30,340,240);   
  18.         }   
  19.     script>  
  20.     body onload="pageLoad();">  
  21.         canvas id="can" width="400px" height="300px">4canvas>  
  22.     body>  
  23. html>  

这里使用了一个方法——fillRect()从字面意思也能知道这个就是填充一个矩形,这里的参数值得说明一下fillRect(X,Y,Width,Height),这个和数学里的坐标是不一样的,具体请看

这里的X,Y是相对Canvas左上角的起点开始的,谨记!!

4、绘制一个简单的矩形框

上例中讲到要绘制一个矩形块,填充了颜色,这个例子只是简单地绘制一个矩形而不实现填充效果。

XML/HTML Code复制内容到剪贴板
  1. nbsp;html>  
  2. html>  
  3.     head>  
  4.         meta charset="UTF-8">  
  5.     head>  
  6.     style type="text/css">  
  7.         canvas{border:dashed 2px #CCC}   
  8.     style>  
  9.     script type="text/javascript">  
  10.         function $$(id){   
  11.             return document.getElementById(id);   
  12.         }   
  13.         function pageLoad(){   
  14.             var can = $$(''can'');   
  15.             var cancans = can.getContext(''2d'');   
  16.             cans.strokeStyle = ''red'';   
  17.             cans.strokeRect(30,30,340,240);   
  18.         }   
  19.     script>  
  20.     body onload="pageLoad();">  
  21.         canvas id="can" width="400px" height="300px">4canvas>  
  22.     body>  
  23. html>  
  24.   

这个很简单,和上例一样,就是将fill替换成了stroke,具体详见上例。

 5、绘制一个线性渐变的矩形

渐变是填充的一种相当不错的效果,结合实例2和实例3,我们可以创建一个渐变的矩形

XML/HTML Code复制内容到剪贴板
  1. nbsp;html>  
  2. html>  
  3.     head>  
  4.         meta charset="UTF-8">  
  5.     head>  
  6.     style type="text/css">  
  7.         canvas{border:dashed 2px #CCC}   
  8.     style>  
  9.     script type="text/javascript">  
  10.         function $$(id){   
  11.             return document.getElementById(id);   
  12.         }   
  13.         function pageLoad(){   
  14.             var can = $$(''can'');   
  15.             var cancans = can.getContext(''2d'');   
  16.             var gnt1 = cans.createLinearGradient(10,0,390,0);   
  17.             gnt1.addColorStop(0,''red'');   
  18.             gnt1.addColorStop(0.5,''green'');   
  19.             gnt1.addColorStop(1,''blue'');   
  20.             cans.fillStyle = gnt1;   
  21.             cans.fillRect(10,10,380,280);   
  22.         }   
  23.     script>  
  24.     body onload="pageLoad();">  
  25.         canvas id="can" width="400px" height="300px">4canvas>  
  26.     body>  
  27. html>  
  28.   

不解释了,记住fillRect(X,Y,Width,Height)就行了。

6、填充一个圆形


圆形的用途很广,当然也包含了椭圆。

XML/HTML Code复制内容到剪贴板
  1. nbsp;html>  
  2. html>  
  3.     head>  
  4.         meta charset="UTF-8">  
  5.     head>  
  6.     style type="text/css">  
  7.         canvas{border:dashed 2px #CCC}   
  8.     style>  
  9.     script type="text/javascript">  
  10.         function $$(id){   
  11.             return document.getElementById(id);   
  12.         }   
  13.         function pageLoad(){   
  14.             var can = $$(''can'');   
  15.             var cancans = can.getContext(''2d'');   
  16.             cans.beginPath();   
  17.             cans.arc(200,150,100,0,Math.PI*2,true);   
  18.             cans.closePath();   
  19.             cans.fillStyle = ''green'';//本来这里最初使用的是red,截图一看,傻眼了,怕上街被爱国者打啊,其实你懂的~~   
  20.             cans.fill();   
  21.         }   
  22.     script>  
  23.     body onload="pageLoad();">  
  24.         canvas id="can" width="400px" height="300px">4canvas>  
  25.     body>  
  26. html>  
  27.   

这里的arc方法的用法是 arc(X,Y,Radius,startAngle,endAngle,anticlockwise),意思是(圆心X坐标,圆心Y坐标,半径,开始角度(弧度),结束角度弧度,是否按照顺时针画);

arc中各参数比较:

a、cans.arc(200,150,100,0,Math.PI,true);

c、cans.arc(200,150,100,0,Math.PI/2,true);

c、cans.arc(200,150,100,0,Math.PI/2,true);

d、cans.arc(200,150,100,0,Math.PI/2,false);

 

 7、圆形区块

 

XML/HTML Code复制内容到剪贴板
  1. nbsp;html>  
  2. html>  
  3.     head>  
  4.         meta charset="UTF-8">  
  5.     head>  
  6.     style type="text/css">  
  7.         canvas{border:dashed 2px #CCC}   
  8.     style>  
  9.     script type="text/javascript">  
  10.         function $$(id){   
  11.             return document.getElementById(id);   
  12.         }   
  13.         function pageLoad(){   
  14.             var can = $$(''can'');   
  15.             var cancans = can.getContext(''2d'');   
  16.             cans.beginPath();   
  17.             cans.arc(200,150,100,0,Math.PI*2,false);   
  18.             cans.closePath();   
  19.             cans.lineWidth = 5;   
  20.             cans.strokeStyle = ''red'';   
  21.             cans.stroke();   
  22.         }   
  23.     script>  
  24.     body onload="pageLoad();">  
  25.         canvas id="can" width="400px" height="300px">4canvas>  
  26.     body>  
  27. html>  

这里不解释了,和上边的例子相同,lineWidth是控制线条的宽度的。

8、圆形渐变

 

XML/HTML Code复制内容到剪贴板
  1. nbsp;html>  
  2. html>  
  3.     head>  
  4.         meta charset="UTF-8">  
  5.     head>  
  6.     style type="text/css">  
  7.         canvas{border:dashed 2px #CCC}   
  8.     style>  
  9.     script type="text/javascript">  
  10.         function $$(id){   
  11.             return document.getElementById(id);   
  12.         }   
  13.         function pageLoad(){   
  14.             var can = $$(''can'');   
  15.             var cancans = can.getContext(''2d'');   
  16.             var gnt = cans.createRadialGradient(200,300,50,200,200,200);   
  17.             gnt.addColorStop(1,''red'');   
  18.             gnt.addColorStop(0,''green'');   
  19.             cans.fillStyle = gnt;   
  20.             cans.fillRect(0,0,800,600);   
  21.         }   
  22.     script>  
  23.     body onload="pageLoad();">  
  24.         canvas id="can" width="800px" height="600px">4canvas>  
  25.     body>  
  26. html>  

这里需要说明的是createRadialGradient方法,参数有(Xstart,Ystart,radiusStart,XEnd,YEnd,radiusEnd),也就是说,它在实行渐变时,使用了两个圆,一个是原始的圆,一个是渐变式圆,其实,这种通过坐标与半径控制的方式可以实现很多样式,比如

立体圆

 

XML/HTML Code复制内容到剪贴板
  1. var gnt = cans.createRadialGradient(200,150,0,200,50,250);   
  2. gnt.addColorStop(0,''red'');   
  3. gnt.addColorStop(1,''#333'');  

我们今天的关于HTML5 Canvas移动手机端的幸运大奖盘特效h5幸运大转盘的分享就到这里,谢谢您的阅读,如果想了解更多关于7款炫酷的HTML5 Canvas动画特效、HTML5 canvas 旋转进度加载特效、HTML5 Canvas 破碎重组的视频特效、HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图_html5教程技巧的相关信息,可以在本站进行搜索。

本文标签: