canvas drawbitmap不出现_canvas-图像重叠效果

图像重叠
globalCompositeOperation : 绘制的图像,在重叠的时候所产生的效果(复合操作)

globalCompositeOperation = ‘source-over’ 默认 后覆盖前
globalCompositeOperation = 'destination-over' 前覆盖后

属性值描述source-over新图形会覆盖原有内容之上source-atop新图形中与原有内容重叠的部分会被绘制,并覆盖于原来内容之上source-in新图形只会出现原有内容重叠的部分,其他区域变成透明色source-out只有新图形中与原有的内容不重叠的部分被保留destination-over会在原有内容之下绘制新图形destination-atop原有内容中与新内容重叠的部分会被保留,并会在原有内容之下绘制新图形destination-in原有内容中与新图形重叠的部分会被保留,其它区域都变成透明的destination-out: 原有内容中与新图形不重叠的部分会被保留。lighter两图形中重叠部分作加色处理。copy只有新图形会被保留,其它都被清除掉xor重叠的部分会变成透明darker两图形中重叠的部分作减色处理

8fe8d3cb39c7d66f8db9fd1a5f85dfd0.gif


operation.gif

代码
HTML

<div id="types">
        <span  class="active">source-over</span>
        <span>source-atop</span>
        <span>source-in</span>
        <span>source-out</span>
        <hr>
        <span>destination-over</span>
        <span>destination-atop</span>
        <span>destination-in</span>
        <span>destination-out</span>
        <hr>
        <span>lighter</span>
        <span>copy</span>
        <span>xor</span>
        <span>darker</span>

    </div>
    <div>
        <pre>
            // source-over: 新图形会覆盖原有内容之上
            // source-atop: 新图形中与原有内容重叠的部分会被绘制,并覆盖于原来内容之上
            // source-in : 新图形只会出现原有内容重叠的部分,其他区域变成透明色
            // source-out : 只有新图形中与原有的内容不重叠的部分被保留

            // destination-over : 会在原有内容之下绘制新图形
            // destination-atop: 原有内容中与新内容重叠的部分会被保留,并会在原有内容之下绘制新图形
            // destination-in : 原有内容中与新图形重叠的部分会被保留,其它区域都变成透明的
            // destination-out : 原有内容中与新图形不重叠的部分会被保留。

            // lighter : 两图形中重叠部分作加色处理。
            // copy: 只有新图形会被保留,其它都被清除掉
            // xor : 重叠的部分会变成透明
            //darker 两图形中重叠的部分作减色处理
        </pre>
    </div>

CSS

<style>
        span {
            margin: 0 20px;
            border: 1px solid #CCC;
        }

        .active {
            background-color: orange;
            color: #FFF;
        }
    </style>

JS

var canvas = document.createElement('canvas');

canvas.width = 500;
canvas.height = 500;

document.body.appendChild(canvas);

var ctx = canvas.getContext('2d');

更改图形重叠函数

function changeOperation(oper) {
    ctx.save();
    ctx.clearRect(0, 0, 500, 500);

    ctx.beginPath();
    ctx.fillStyle = 'green';
    ctx.fillRect(180, 150, 200, 200);

    ctx.globalCompositeOperation = oper || 'source-over';
    
    ctx.beginPath();

    ctx.fillStyle = 'orange';
    ctx.arc(300, 300, 100, 0, 2 * Math.PI);
    ctx.fill();
    ctx.restore();
}

changeOperation();

绑定点击切换图形事件:

var types = document.getElementById('types');
    var typeSpan = types.children;

    for (var i = 0; i < typeSpan.length; i++) {
        typeSpan.index = i;
    }

    types.onclick = function (e) {
        var tar = e.target;
        for (var i = 0; i < typeSpan.length; i++) {
            typeSpan[i].classList.remove('active');
        }
        tar.classList.add('active');
        changeOperation(tar.innerHTML);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值