4 回答

TA贡献1123条经验 获得超629个赞
image没加载完显然算不了offsetWidth啊
imgs[0].onload=function(){ var imgWidth = imgs[0].offsetWidth; console.log(imgWidth); }

TA贡献2条经验 获得超1个赞
这问题你得分清两个问题,一个是DOM加载完成和一个是页面元素加载完成.
顺序执行这一点你是明白的,所以考虑到把JS放在了后面.但代码执行的顺序中,它只是按逐序去读取标签,而不会等待标签内的元素是否加载完成.用图片来举例,从上到下执行到img的时候,它读到img标签后发送一个获取图片的动作后就懒得再管了,它不会管图片是否加载完成,它会直接去读下一个标签.
因为标签读取的几乎就是一瞬间,所以很快就读到了下面的JS段并开始执行JS代码,而这个时候img中的图片还没显示完成.
所以就出现了一个问题,JS代码中需要获取的那个img,是有的,但如果JS要获取的是图片属性,图片都没加载完,去哪找属性?
所以,此时JS是得不到IMG的offsetWidth的. 而且从这段代码来讲,获取offsetWidth;只执行了一次,除非撞大运,缓存里有这张图,否则就根本获取不了.
所以才要加上window.onload(),这是告诉浏览器,这段JS不要急着执行,等你把所有页面元素(包括图片)都加载完成了之后,我再执行.这个时候获取offsetWidth就没问题了.

TA贡献3593条经验 获得超1个赞

TA贡献204条经验 获得超92个赞
只能说还没完全渲染完页面吧,元素是都获取到了,比如让你在样式标签那给图片设置width,最后是可以console出来宽度的,这种渲染机制问题不用太深入了...望采纳
添加回答
举报