html代码:
<img src="a.jpg" class="banner">
jq代码:
$(document).ready(function () {
$(".banner").attr("src","2.jpg");
})
jq代码生效,成功地把图片a.jpg改成b.jpg。但现在有个问题是请求资源的时候会把a.jpg和b.jpg一并加载,当图片资源比较多要替换的时候,会影响性能。有没有什么办法,在img还未加载完成之前,通过jq把src的路径修改却不加载原来的a.jpg这个图片呢?
不想加载就不要写img,或者不要写src属性;想加载的时候动态写入img或者src属性。
注:img只有在有src属性或者在src属性有值的时候才会请求资源。
虽然没怎么看懂你的问题,但是我想说解决此类问题通常采用的方式是js的代理模式,参考代码如下
var myImage = (function(){
var imgNode =document.getElementByClassName('banner')[0];
return function(src){
imgNode.src = src;
}
})();
var ProxyImage = (function(){
var img = new Image();
img.onload = function(){
myImage(this.src);
};
return function(src) {
myImage("a.jpg");
img.src = src;
}
})();
ProxyImage("b.jpg");
原谅我原生风,你可以稍微改一下
HTML那边不要设置src属性,可以换成data-src,再用js判断按需加载
如果在刚开始的<img src="a.jpg" class="banner"> 这里不需要显示图片的话 可以去掉src="a.jpg",这样就不会加载a.jpg了
代码如下:
<img class="banner">
使用图片预加载技术
后来既然敢推过来,就可以在append之前拦截,修改可以
也許 ajax ...
var img_target = [
{"target": "https://static.orderplus.com.tw/img/logo.png", "new": "http://aa.com/a.jpg"}
];
$.ajax({
url: "index.html",
context: document.body
}).done(function (html) {
$.each(img_target, function (n) {
var item = img_target[n];
html = html.replace(
'src="' + item["target"] + '"',
'data-src="' + item["target"] + '" src="' + item["new"] + '"');
});
console.log(html);
});
<img src="a.jpg" class="banner">
一开始这里一定要有值是吗?
无解,原图片想用又不想加载,可能不....
img标签如果写了src就会加载资源
你这么写当然加载2次。
从没见过这种伪需求
楼主问题没说清楚,是js修改后同步加载图像导致页面加载变慢,搞成异步就好啦。
不在src里设值,设在--default里咯。
<img>元素如果有src属性,只要<img>元素在dom树中解析了,就会发送请求的。
你这个的话,要是必须初始HTML结构中有img标签,可以不写src属性。或者js代码执行过程中动态创建img元素添加到dom树中。
不要写src="a.jpg",换成pSrc="b.jpg"或者其它
安利下自己的一个组件
https://github.com/jayZOU/pre...
一楼正解,图片延时加载