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

我的demo需要在每一次点击前刷新才能正常的显示图片,另外顶部的文字有的时候不能正确的显示,不知道是什么原因,希望大家可以帮我看一下,十分感谢!

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            #buttons{margin:50px 10%;}
            #buttons a{margin-top:50px;margin-right:10px;text-decoration:none;font-size:20px;color:black;padding:5px;border:1px solid black;}
        </style>
    </head>
    <body>
        <canvas id="canvas" height="800" width="1200" style="margin: 0 20%;border:1px solid black;">此浏览器不支持canvas,请更换浏览器</canvas>
        <div id="buttons">
            <a href="#">source-over</a>
            <a href="#">source-atop</a>
            <a href="#">source-in</a>
            <a href="#">source-out</a>
            <a href="#">destination-over</a>
            <a href="#">destination-atop</a>
            <a href="#">destination-in</a>
            <a href="#">destination-out</a>
            <a href="#">lighter</a>
            <a href="#">xor</a>
            <a href="#">copy</a>        
        </div>
        <script type="text/javascript">
            window.onload=function(){
                draw("source-over");
                var buttons=document.getElementById("buttons").getElementsByTagName("a");
                for(var i=0;i<buttons.length;i++){
                    buttons[i].onclick=function(){
                        draw(this.text);
                        return false;
                    }
                }
            }    
                function draw(compositeStyle){
                    var canvas = document.getElementById("canvas");
                    var context = canvas.getContext("2d");
                    /**清空画布**/
                    context.clearRect(0,0,canvas.width,canvas.height);
                    /**标题**/
                    context.font="bold 40px sans-serif";
                    context.textAlign="center";
                    context.textBaseline="middle";
                    context.fillText("globalCompsitionOperation的值为:"+compositeStyle,canvas.width/2,60);
                    /**方框**/
                    context.fillStyle="blue";
                    context.fillRect(300,150,500,500);
                    
                    context.globalCompositeOperation =compositeStyle;
                    /**三角形**/
                    context.fillStyle="red";
                    context.beginPath();
                    context.moveTo(700,250);
                    context.lineTo(1000,750);
                    context.lineTo(400,750);
                    context.closePath();
                    context.fill();
                }
            
        </script>
    </body>
</html>

正在回答

7 回答

洗了个澡!!!问题解决!是画字的问题,因为globalCompsitionOperation的属性,如destination-out只显示先画的没有重复部分,也就是说其他部分全部被清理!解决方案用离屏canvas技术!!!

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

qq_悄悄_0 提问者

就是这里你说的离屏canvas我找不到相关的资料,针对我这里的代码应该怎么改啊?
2016-08-24 回复 有任何疑惑可以回复我~

都是人才,很简单的问题。这需要用clip()吗

只需要在

var context = canvas.getContext("2d");

这段代码之后再加入宽度和高度设置即可

canvas.width = 1200;

canvas.height = 800;

保证可行。

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

qq_悄悄_0 提问者

可惜不行
2017-09-05 回复 有任何疑惑可以回复我~
#2

小王子抓猫咪

弄两个canvas标签绝对定位
2017-09-05 回复 有任何疑惑可以回复我~

刚刚也提了这个问题,就看到了这个问题解决了。不用离屏,用clip也可以,globalCompositeOperation影响的是canvas上已有的所有图形跟要画的图形的关系处理,即使已有的图形跟要画的没有重叠也会被影响,所以用clip限制将要画的图形范围,就不会影响所有已有的图形。

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

需要使用context.clip() 对绘制区域进行一个剪辑出来,在剪辑区域进行绘制矩形和三角形

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

6687877

y78787878


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

这个问题困扰了我一天了!初步判定是在canvas中画字的缘故,但是具体问题在哪里我还没有找到,找到告诉你。

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

程序我也跑了一下,有同样的问题,但找不到!

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

举报

0/150
提交
取消

我的demo需要在每一次点击前刷新才能正常的显示图片,另外顶部的文字有的时候不能正确的显示,不知道是什么原因,希望大家可以帮我看一下,十分感谢!

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