Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么innerWidth()给出的结果与get(0).width不同?_Javascript_Jquery_Canvas - Fatal编程技术网

Javascript 为什么innerWidth()给出的结果与get(0).width不同?

Javascript 为什么innerWidth()给出的结果与get(0).width不同?,javascript,jquery,canvas,Javascript,Jquery,Canvas,铬测试。如果我动态创建一个canvas对象,将其放入一个div中,如下所示: $('<div />').css({ width: '95%', margin: '0px auto', border: '1px solid red' }) .append( $('<canvas />') .attr({ id: 'myCanvas' }) .css({ width: '100%' }) ) .appendTo(

铬测试。如果我动态创建一个canvas对象,将其放入一个div中,如下所示:

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

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

我认为这个方案应该回答你的问题(在谷歌图片上找到)


(来源:)

宽度和内部宽度之间的差异是由填充造成的

编辑:更正

正如PE指出的,这种差异是由于您使用的width()方法实际上是object属性,这与css属性不同。 如果未设置画布属性,“宽度”属性默认为300,“高度”属性默认为150。宽度和高度CSS属性控制元素在屏幕上显示的大小

更多信息:

我认为这个方案应该能回答你的问题(在谷歌图片上找到)


(来源:)

宽度和内部宽度之间的差异是由填充造成的

编辑:更正

正如PE指出的,这种差异是由于您使用的width()方法实际上是object属性,这与css属性不同。 如果未设置画布属性,“宽度”属性默认为300,“高度”属性默认为150。宽度和高度CSS属性控制元素在屏幕上显示的大小

更多信息:

我认为这个方案应该能回答你的问题(在谷歌图片上找到)


(来源:)

宽度和内部宽度之间的差异是由填充造成的

编辑:更正

正如PE指出的,这种差异是由于您使用的width()方法实际上是object属性,这与css属性不同。 如果未设置画布属性,“宽度”属性默认为300,“高度”属性默认为150。宽度和高度CSS属性控制元素在屏幕上显示的大小

更多信息:

我认为这个方案应该能回答你的问题(在谷歌图片上找到)


(来源:)

宽度和内部宽度之间的差异是由填充造成的

编辑:更正

正如PE指出的,这种差异是由于您使用的width()方法实际上是object属性,这与css属性不同。 如果未设置画布属性,“宽度”属性默认为300,“高度”属性默认为150。宽度和高度CSS属性控制元素在屏幕上显示的大小

更多信息:

区别在于您检查的是两种不同的东西

get(0).width
是画布对象的width属性,不受css样式的影响/更改,由元素的width属性或js中的.width属性设置。并根据默认设置为300x150


jQuery的
width()

get(0).width
是画布对象的width属性,不受css样式的影响/更改,由元素的width属性或js中的.width属性设置。并根据默认设置为300x150


jQuery的
width()

get(0).width
是画布对象的width属性,不受css样式的影响/更改,由元素的width属性或js中的.width属性设置。并根据默认设置为300x150


jQuery的
width()

get(0).width
是画布对象的width属性,不受css样式的影响/更改,由元素的width属性或js中的.width属性设置。并根据默认设置为300x150


jQuery的
width()。我认为这是因为
get(0)
返回一个canvas对象。如果我尝试
console.log($('#mycanvas').get(0))
I get
您应该设置属性宽度,而不是css样式宽度,因为这是画布在其坐标空间中使用的宽度,使用css宽度/高度可能会拉伸画布。画布也是300x150:你有一个width属性和一个width样式,我猜jQuery将使用计算样式并得到准确的、正确的图形,当您刚刚获得被CSS覆盖的HTML属性值时。@scragar在我的4小时实验中,这似乎是相反的:jQuery保留在CSS属性上,而get(0)给出了对象的实际大小,因此我可以正确地将对象居中。我刚刚测试过:这与最新的Opera(即Firefox和Chrome)完美配合。它与
.get(0).innerWidth
?@Barmar
$('#mycanvas').get(0).innerWidth
给了我
未定义的
。我认为这是因为
get(0)
返回一个canvas对象。如果我尝试
console.log($('#mycanvas').get(0))
I get
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();