为了账号安全,请及时绑定邮箱和手机立即绑定

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

<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>


正在回答

2 回答

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

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

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

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

0 回复 有任何疑惑可以回复我~

方法一:

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>


0 回复 有任何疑惑可以回复我~
#1

慕的地3494871 提问者

方法一为什么要加一个return false
2016-10-31 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信