问答详情
源自:8-2 globalAlpha和globalCompositeOperation

为什么每次刷新才能正常实现每个属性值

<canvas id="mycanvas" width="1000" height="500">你的浏览器不支持画布</canvas>

<p id="composition">

         <a href="#">source-over</a>

         <a href="#">source-in</a>

         <a href="#">source-out</a>

         <a href="#">source-atop</a>

         <a href="#">destination-over</a>

         <a href="#">destination-in</a>

         <a href="#">destination-out</a>

         <a href="#">destination-atop</a>

         <a href="#">lighter</a>

         <a href="#">copy</a>

         <a href="#">xor</a>

</p>

<script>

var mycanvas=document.getElementById('mycanvas');

var context=mycanvas.getContext('2d');

function drawComposition(composition){

        context.clearRect(0,0,1000,500);

         context.save();

         context.font="30px bold Arial";

         context.textAlign="center";

         context.textBaseline="middle";

         context.fillStyle="#058";

         context.shadowColor="blue";

         context.shadowOffsetX=2;

         context.shadowOffsetY=2;

         context.shadowBlur=2;

         context.fillText("globalCompositionOperation",500,20);

         context.restore();

         context.fillStyle="red";

         context.beginPath();

         context.moveTo(500,100);

         context.lineTo(350,250);

         context.lineTo(650,250);

         context.closePath();

         context.fill();

         context.globalCompositeOperation=composition;

         context.fillStyle="blue";

         context.fillRect(500,175,200,200);

}

var a=document.getElementById('composition').getElementsByTagName('a');

for(var i=0;i<a.length;i++){

     a[i].onclick=function(){

     drawComposition(this.innerHTML);

}

}

</script>


提问者:慕的地3494871 2016-10-27 14:08

个回答

  • 小王子抓猫咪
    2017-08-27 00:19:01

    在一个context内部,切换设置globalCompositeOperation,有些不会出效果的问题,在canvas书籍上,我没有发现任何一本书提到过。

    这个问题也是折磨了我两天,认真看了看老师的代码,我发现原因了。

    也就是说你需要重新获取一次上下文,再进行设置就没有问题了。

    你仔细看看你的代码和老师的代码有什么区别。 老师在每一次的点击重新绘制事件处理中,都是重新获取了一次上下文。明白了吧。重点在这里。和a标签是否返回false没有一点关系。

  • qq_黑颂_0
    2016-10-30 21:08:27

    方法一:

    var a=document.getElementById('composition').getElementsByTagName('a');

        for(var i=0;i<a.length;i++){

             a[i].onclick=function(){

                   drawComposition(this.innerHTML);

                 return false;

        }

    }


    方法2:

        所有的a标签 <a href="#">xor</a>,的#都改成 javascript:; 如 <a href="javascript:;">xor</a>