图片的延迟加载 lazyload 的占位图都是固定大小的,怎么让占位图与要加载的实际图片尺寸一致

2015-11-09 18:49:39 +08:00
 xiaoyong

如题。因为目前使用 lazyload 的 js 插件都是占位图固定尺寸的,如果占位图与需要加载的图片尺寸差别很大的话, 会出现页面的内容跳动。目前微信公众号的文章就解决的很好,占位图都是灰色的,但是尺寸与要加载的实际图片尺寸一致,加载出来的效果比较平滑。目前,可以想到的一个方法是让前端提供当前设备的浏览器宽度,然后计算高度。感觉还是不太靠谱。大家有没有更好的思路。多谢。

10302 次点击
所在节点    JavaScript
14 条回复
loveyu
2015-11-09 18:55:47 +08:00
首先你得知道图片显示的宽高
Jaylee
2015-11-09 19:07:16 +08:00
我这边目前也是使用让接口返回宽和高,然后加载占位图的,应该没有其它的办法了吧
zhicheng
2015-11-09 19:20:07 +08:00
固定高度计算宽带更合理。
SourceMan
2015-11-09 19:21:40 +08:00
让服务器给你返回
paloalto
2015-11-09 19:28:58 +08:00
yushiro
2015-11-09 19:33:54 +08:00
其实需要知道的并不是图片的宽高,而是需要知道图片的宽高比,设计 api 的时候需要多带一个参数返回前端
qgy18
2015-11-09 21:36:44 +08:00
移动端需要知道高宽比,根据宽算出高来。
Light3
2015-11-09 21:50:09 +08:00
可你尝试固定宽度 比如就 100PX 这样的 毕竟手机基本上就是一张图一行
fakefish
2015-11-09 22:52:43 +08:00
如果图片是个正方形,可以用个 1px 的 base64 自动填充了
Shy07
2015-11-09 23:33:29 +08:00
有一种图片叫渐进 jpg ,还有一种叫交错 png/gif
wjfz
2015-11-10 01:48:29 +08:00
我倒是有种想法不知道可行性,请大家给予批评。

存图片的时候把宽高写入文件名,前端正则出宽高然后占位。
learnshare
2015-11-10 09:25:16 +08:00
提前把图像大小写到 HTML 内敛样式中,前提是页面由后端渲染,并且数据库里保存了图像大小
skywatcher
2015-11-10 11:42:21 +08:00
之前有想过这个问题,主要是避免加载的抖动,我感觉可以这样
http://7ximdq.com1.z0.glb.clouddn.com/1445326252487#w=1000#h=900
开始 URL 都已经传到前端,可以通过#w=1000#h=900 获取数据来设置占位大小(根据固定宽度或高度),动态加载图片时就不会出现抖动

不过需要后端服务器的支持,保存和处理返回的 URL 附带这些参数

知乎跳转到对应答案和评论就是这样实现的
http://www.zhihu.com/question/36173438/answer/68338175?group_id=647004140790923264#comment-102845723
skywatcher
2015-11-10 11:49:07 +08:00
忽然想到,如果使用第三方服务器也可以,第三方是支持获取指定图片的信息的,可以自己请求后添加到 URL 尾部,前端就可以使用了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/234861

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX