问答详情
源自:2-2 绘制直线、多边形和七巧板

canvas自适应全屏问题!求助大神啊

代码如下,问题是为什么第一次打开的时候一切正常,但是当浏览器窗口大小变化的时候canvas里面的内容就没了呢。


var tangram = [

      { p: [{ x: 0, y: 0 }, { x: 800, y: 0 }, { x: 400, y: 400 }], color: "#cff67" },

      { p: [{ x: 0, y: 0 }, { x: 400, y: 400 }, { x: 0, y: 800 }], color: "#67becf" },

      { p: [{ x: 800, y: 0 }, { x: 800, y: 400 }, { x: 600, y: 600 }, { x: 600, y: 200 }], color: "#ef3d61" },

      { p: [{ x: 600, y: 200 }, { x: 600, y: 600 }, { x: 400, y: 400 }], color: "#f9f5la" },

      { p: [{ x: 400, y: 400 }, { x: 600, y: 600 }, { x: 400, y: 800 }, { x: 200, y: 600 }], color: "#a594c0" },

      { p: [{ x: 200, y: 600 }, { x: 400, y: 800 }, { x: 0, y: 800 }], color: "#fa8ecc" },

      { p: [{ x: 800, y: 400 }, { x: 800, y: 800 }, { x: 400, y: 800 }], color: "#f6ca69" } 

    ];

(function() {

    initHeader();

    addListeners();

    function initHeader() {

        width = window.innerWidth;

        height = window.innerHeight;

        canvas = document.getElementById('canvas');

        canvas.width = width;

        canvas.height = height;

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

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

            draw(tangram[i],context);

        }

        

    }

 

    function draw(piece,cxt) {

      cxt.beginPath();

      cxt.moveTo(piece.p[0].x, piece.p[0].y);

 

      for (var i = 1 ; i < piece.p.length; i++) {

        cxt.lineTo(piece.p[i].x, piece.p[i].y);

      }

 

        cxt.closePath();    


        cxt.fillStyle = piece.color;

        cxt.fill();

       

       

       

    }

    


    // Event handling

    function addListeners() {

        window.addEventListener('resize', resize);

    }

    function resize() {

        width = window.innerWidth;

        height = window.innerHeight;

        canvas.width = width;

        canvas.height = height;

    }



})();





提问者:小马王 2016-04-22 14:36

个回答

  • 靖_pacify
    2016-04-22 23:11:40
    已采纳

    画布画画是不可修改的,已经画出来的东西是没有DOM文档节点进行修改的,html文档canvas下面是没有其他元素的。其他元素宽高修改时,该元素内部是有DOM对象供浏览器进行对宽高改变做出响应的,而且canvas的宽高感觉像属性,其他元素的宽高应该是样式属性。画布宽高改变了,好比换了一张不同的纸,或者说画布改变了依附于他的东西丢失了原有的依附就没发存在了。只知道画布宽高改变内容清空相当于一块新的画布,具体原因没想过,谈谈个人的一点想法,没有任何科学依据哈