HTML Canvas不会在IE中调整大小

时间:2015-11-18 15:37:36

标签: javascript css html5 internet-explorer canvas

我制作游戏并希望游戏画布在页面上排成一行,这样它就可以很好地放在街机柜框架图形中。我设置了百分比宽度和画布高度" auto。"适用于Firefox和Chrome。

不幸的是,在某些版本的Internet Explorer(特别是9)中,画布高度的工作方式与其他浏览器的工作方式不同。当你将它设置为" auto,"时,Firefox可以以合理的方式调整高度。但IE的工作方式不同。

所以我试图用Javascript动态调整它。这是我正在使用的代码。我对JS不是很好。我几乎只是从Google搜索中复制了这个并更改了变量名称。

任何人都可以帮我弄清楚它为什么不起作用吗?

<script>
    (function() {
        var 
            htmlCanvas = document.getElementById('c2canvas'),
            context = htmlCanvas.getContext('2d');
        initialize();

        function initialize() {
            window.addEventListener('resize', resizeCanvas, false);
            resizeCanvas();
        }


        function resizeCanvas() {


            var width = htmlCanvas.width;
            var height = width * (224/256);
            htmlCanvas.height = height;
            htmlCanvas.style.height = height + 'px';

        }

    })();
</script>

Link to the game

2 个答案:

答案 0 :(得分:0)

IE的一些旧版本,如IE9对待CSS高度:自动不同。并尝试从父元素继承CSS高度。

而不是尝试更改canvas元素上的CSS样式高度。使用setAttribute()

设置canvas元素的height属性

https://developer.mozilla.org/en-US/docs/Web/API/Element/setAttribute

<script>
(function() {
    var 
        htmlCanvas = document.getElementById('c2canvas'),
        context = htmlCanvas.getContext('2d');
    initialize();

    function initialize() {
        window.addEventListener('resize', resizeCanvas, false);
        resizeCanvas();
    }


    function resizeCanvas() {

        var width = htmlCanvas.width;
        var height = width / 2.031;
        /* set the height attribute instead of using CSS style height */
        htmlCanvas.setAttribute(height,height);

    }

})();
</script>

不要忘记添加到CSS样式表

#c2canvas{
    display: block;
    width: 100%;
}

另外看一下这个Paul Irish article on debounce resize event,这样你的resize事件只会在最后一次调整大小的事件中触发。由于调整大小会在窗口的每次移动时不断发出火焰。

答案 1 :(得分:0)

如果您要保持宽高比,请尝试以下操作:

<div style="height:0;padding:87.5% 0 0;width:100%;position:relative;">
    <canvas style="height:100%;width:100%;position:absolute;top:0;left:0;" >
</div>

显然可以用CSS完成。

垂直方向上的%填充基于元素的宽度。内部绝对定位的元素在计算其100%高度时会考虑高度和垂直填充。