Javascript 为什么innerWidth()给出的结果与get(0).width不同?
铬测试。如果我动态创建一个canvas对象,将其放入一个div中,如下所示: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(
$('<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();