Closed
Description
你好,
看到lazyload在移动端的用法是
<div class="lazy" data-original="img/example.jpg"><div>我想问问,为什么在移动端要用div的backgroud-iamge来显示图片,而不用img标签呢?
你好,
看到lazyload在移动端的用法是
<div class="lazy" data-original="img/example.jpg"><div>我想问问,为什么在移动端要用div的backgroud-iamge来显示图片,而不用img标签呢?
Activity
jieyou commentedon Jan 8, 2015
写
<img style="width:100%">
是可以保持宽高比自适应显示的。
但问题在于在图片开始加载之前,无法知道图片占的高度,这不仅会在浏览器获取到图片宽度后引起页面的布局发生变化,还会导致和lazyload插件本身的使用问题:
lazyload是通过计算图片的位置,看它是否出现在视窗中,来判断是否应该开始加载某个图片的,
假设这个
<img>
下面还有一些需要lazyload的其他图片
,那么在
其他图片
上面,如果发生高度变化(由于上述<img>被加载了挤下来了
),通常lazyload并不能检测到这个变化(默认情况下lazyload通过window的scroll事件
和window的resize事件
触发检测),则会导致判断图片位置出现错误也就是说,图片上面(包括左边)的所有元素都要有确定的高度
而采用
padding-top,bottom
结合背景图的形式,可以在图片尚未加载时,就有高度占位。jieyou commentedon Jan 8, 2015
@dongfanhua
dongfanhua commentedon Jan 21, 2015
谢谢你的回答
SuperAL commentedon May 15, 2017
@jieyou 如果提供的 img 标签内容如下:
data-size
里面放置的是图片的真实宽高,然后到了前端后再利用 js 计算该 img 相应的宽高,最后再执行 lazyload 方法,这样可以吗?