canvas学习笔记4--刮刮卡

globalCompositeOperation
该属性设置或返回如何将一个源(新的)图像绘制到目标(已有的)的图像上。
源图像 = 你打算放置到画布上的绘图
目标图像 = 你已经放置在画布上的绘图

在这里插入图片描述

<canvas id="canvas" width="800" height="600"></canvas>

<script>
	var canvas = document.querySelector("#canvas")
	var ctx = canvas.getContext("2d")
	//第一个红色矩形为目标图像
	ctx.fillStyle = "hotpink"
	ctx.fillRect(100,100,200,200)
	
	//第二个蓝色矩形为源图像
	ctx.fillStyle = "deepskyblue"
	ctx.fillRect(200,200,200,200)
</script>

在这里插入图片描述
设置globalCompositeOperation的值是atop
在这里插入图片描述
设置source-in,如下
在这里插入图片描述
设置source-out,如下
在这里插入图片描述
设置destination-over,如下
在这里插入图片描述
设置destination-atop,如下
在这里插入图片描述
设置destination-in,如下
在这里插入图片描述
设置destination-out,如下(刮刮卡就是用这个)
在这里插入图片描述
设置lighter,如下
在这里插入图片描述
设置copy,如下(copy就是之前的图片都不见了,只保留最新的图像)
在这里插入图片描述
设置xor,如下(等同于设置lighter)
在这里插入图片描述

刮刮卡功能实现

<style type="text/css">
	#ggk{
		width:400px;
		height:100px;
		position:relative;
	}
	#ggk .jp{
		width:400px;
		height:100px;
		position:absolute;
		left:0;
		top:0;
		text-align:center;
		color:deeppink;
		font-size:50px;
		line-height:100px;
	}
	#canvas{
		width:400px;
		height:100px;
		position:absolute;
		left:0;
		top:0;
	}
</style>

<body>
	<div id="ggk">
		<div class="jp">谢谢惠顾</div>
		<canvas id="canvas" width="400" height="100"></canvas>
</body>

<script>
	var canvas = document,querySelector("#canvas")
	var ggkDom = document,querySelector("#ggk")
	var ctx = canvas.getContext('2d')
	ctx.fillStyle = 'darkgray'
	ctx.fillRect(0,0,400,100)
	ctx.font = "20px 微软雅黑"
	ctx.fillStyle = 'fff'
	ctx.fillText("刮刮卡".180,50)
	var isDraw = false;
	// 设置isDraw = true,即为允许绘制
	canvas.onmousedown = function(){
		isDraw = true
	}

	// 移动的时候绘制圆形,将源图像内的目标的内容给清除掉
	canvas.onmousemove = function(e){
		if(isDraw){
			var x = e.pageX - ggkDom.offsetLeft
			var y = e.pageY - ggkDom.offsetTop
			ctx.globalCompositeOperation = "destination-out"
			ctx.arc(x,y,20,0,2*Math.PI)
			ctx.fill()
		}
		
	}
	
	canvas.onmouseup = function(){
		isDraw = false
	}
</script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值