平常在些项目的时候,如果遇到分栏的商品列表页,商品又多,图片又大。一来二去,就会遇到切换左边菜单的时候,右边的商品名称变了,但是图片还是上一个菜单的图片。所以需要在图片没加载完成时放个loading,加载完之后才完整显示
在html中,Image对象具有onload事件,会在图片加载完成后触发回调,而对与列表中循环加载的图片,需要在每个图片上添加这个方法
<img
class="img"
:src="item.image"
v-show="item.image&&item.loaded"
@load="item.loaded=true"
/>
然后就发现,行不通,图片被v-show卡住了压根加载不了
既然不能不显示,那能不能变相隐藏呢,加个loading试试
<img
class="img"
:src="item.image"
v-show="item.image"
@load="item.loaded=true"
/>
<view class="loading" v-if="!item.loaded">
<view class="icon"></view>
</view>
跑起来非常good,但是又发现,在图片过多的情况下,切换左侧菜单点不动,查看network发现进程一直被图片加载请求占用。无暇去切换菜单,这时最好能直接把浏览器进程给停了,是时候祭出window.stop方法
window.stop() 方法的效果相当于点击了浏览器的停止按钮。由于脚本的加载顺序,该方法不能阻止已经包含在加载中的文档,但是它能够阻止图片、新窗口、和一些会延迟加载的对象的加载。
在切换菜单的方法开头加上window.stop,未加载的图片也不会再进行加载,而是直接销毁加载新列表的图片了