在Chrome中进行测试。如果我动态创建画布对象,则将其放入div中,如下所示:

$('<div />').css({
    width: '95%',
    margin: '0px auto',
    border: '1px solid red'
})
.append(
    $('<canvas />')
        .attr({ id: 'myCanvas' })
        .css({ width: '100%' })
)
.appendTo('body');


然后在所有调整大小事件中,我尝试显示大小:

function updateCanvas() {
    console.log($('#mycanvas').get(0).width);
    console.log($('#mycanvas').innerWidth());
}

/* listening to whatever change it can be on the device */
var eventListen = function() {
    window.addEventListener("orientationchange", eventResize, false);
    window.addEventListener("resize", eventResize, false);
};
var eventResize = function() {
    window.removeEventListener("orientationchange", eventResize, false);
    window.removeEventListener("resize", eventResize);
    window.setTimeout(function(){
        /* small timeout in case of lot of resize (dragging) */
        var w=innerWidth;
        var h=innerHeight;
        window.setTimeout(function(){
            if ((innerWidth!=w) || (innerHeight!=h)) {
                eventResize();
            } else {
                updateCanvas();
                eventListen();
            }
        }, 100);
    }, 100);
}
eventListen();


结果是不同的!纯DOM给我画布的实际大小,而$('#mycanvas').innerWidth()给我更大的结果...

最佳答案

我认为该方案可以回答您的问题(可在Google图片上找到)

javascript - 为什么innerWidth()与get(0).width给出不同的结果?-LMLPHP
(来源:stacktrace.jp

宽度和innerWidth之间的差异由填充引起。

编辑:更正

正如PE所指出的,这种差异是由于您所使用的width()方法实际上是对象属性,而该属性不同于css属性。
如果未设置canvas属性,则width属性默认为300,height属性默认为150。width和height CSS属性控制元素在屏幕上显示的大小。

更多信息:
http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting.html#attr-canvas-width

关于javascript - 为什么innerWidth()与get(0).width给出不同的结果?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25379477/

10-11 11:37