angular 图片引入_angular实现图片预加载

本文介绍了如何在Angular中实现图片预加载,以提升网页加载速度和用户体验。通过创建Image对象并监听load和error事件,确保图片在实际显示前已被下载。同时,代码还处理了图片协议问题,避免了http与https混合的安全隐患。示例代码提供了一种使用Angular指令进行图片预加载的方法。
摘要由CSDN通过智能技术生成

图片往往是网页加载最慢的一个环节,使用预加载技术能大大提高用户观感。

预加载的原理很简单,img的src先设置成一个初始图片,然后js创建一个Image对象,浏览器会去主动下载这个对象的src,然后在将img的src改成这个src。Image有两个事件,一个是load,一个是error,我们接下来要利用这两个事件。

首先,我这里用的是angular指令,之所以选择指令,因为img的属性过多,使用component要一个个设置这些属性挺麻烦,先上代码:@Directive({

selector:"[preload]"

})

export class PreloadDirective implements OnInit{

ngOnInit(): void {

let ele = this.el.nativeElement;

let src = this.dhSrc;

if (src){

if (src.startsWith("http://") || src.startsWith("https://")){

src = src.substring(src.indexOf("/"));

src = `${location.protocol}${src}`;

}

}else {

src = DEFAULT_IMG;

}

let image = new Image();

image.src = src;

image.addEventListener("load",() => {

Observable.interval(3000)

.subscribe(() => {

this.renderer.setElementAttribute(ele,"src",src);

})

});

image.addEventListener("error",() => {

this.renderer.setElementAttribute(ele,"src",DEFAULT_IMG);

});

this.renderer.setElementAttribute(ele,"src",DEFAULT_IMG);

}

constructor(private el: ElementRef, private renderer: Renderer) {

}

@Input("mySrc")

dhSrc:string;

}

这里做到的不仅仅是预加载,还改变了src的protocol,我们往往有很多图来自外站,假如你的站点用了https,而外站图片用得是http,这样就可能有安全隐患。我加了一个interval是为了模拟环境看到效果,大家如果直接用我的代码请将这个删掉。

使用方式:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值