js实现多张图片延迟加载效果
本文实例为大家分享了js实现多张图片延迟加载效果的具体代码,供大家参考,具体内容如下
具体代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!--做移动端响应式必须加的样式-->
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
<title>Document</title>
<style>
*{
margin:0;
padding:0;
font-size:14px;
}
ul,li{
list-style:none;
}
img{
display:block;
border:none;
}
/*
最外层容器不设定宽高的
*/
.news{
padding:10px;
}
.news li{
height:60px;
padding:10px 0;
border-bottom:1px solid #dedede;
position:relative;
}
.news li > div:nth-child(1){
position:absolute;
top:10px;
left:0;
width:75px;
height:60px;
background:url('img/default.png') no-repeat center center;
background-size:100% 100%;/*设置背景图片大小*/
}
.news li > div:nth-child(1) img{
width:100%;
height:100%;
display:none;
opacity:0;
}
.news li > div:nth-child(2){
height:60px;
margin-left:80px;
}
.news li > div:nth-child(2) h2{
height:20px;
line-height:20px;
/*实现文字超出隐藏*/
overflow:hidden;
text-overflow:ellipsis;
white-space: nowrap;
}
.news li > div:nth-child(2) p{
line-height:20px;
font-size:12px;
color:#ccc;
}
</style>
</head>
<body>
<ul id='news' class='news'>
<li>
<div>
<img src="" alt="">
</div>
<div>
<h2>我是一个标题</h2>
<p>我是内容</p>
</div>
</li>
</ul>
<script>
var news = document.getElementById('news')
var imgList = news.getElementsByTagName('img')
//1、获取需要绑定的数据(Ajax)
var jsonData = null;
~function(){
var xhr = new XMLHttpRequest();
//URL地址后面加的随机数是在清除每一次请求数据时候(GET请求)产生的缓存
xhr.open('GET','data.json?_='+Math.random(),false)
xhr.onreadystatechange = function(){
if(xhr.readystate ===4 && /^2\d{2}$/.test(xhr.status)){
var val = xhr.responseText;
jsonData = utils.formatJSON(val)
}
}
xhr.send(null)
}()
//2、数据绑定->把jsonData存储的数据绑定到页面中(字符串拼接)
~function(){
var str = '';
if(jsonData){
for(var i = 0,len = jsonData.length;i<len;i++){
var curData = jsonData[i]
str+='<li>';
str+='<div><img src="" trueImg="'+curData['img']+'"></div>';
str+='<div>';
str+='<h2>'+curData['title']+'</h2>';
str+='<p>'+curData['desc']+'</p>';
str+='</div>';
str+='</li>';
}
}
news.innerHTML = str;
}()
//3、图片延迟加载
//我先编写一个方法实现单张图片的延迟加载
function lazyImg(curImg){
var oImg = new Image;
oImg.src = curImg.getAttribute('trueImg');
oImg.onload = function(){
curImg.src = this.src;
curImg.style.display = "block";
fadeIn(curImg)
oImg = null
};
curImg.isLoad = true;
}
function fadeIn(curImg){
var duration = 500,interval = 10,target = 1;
var step = (target/duration)*interval;
var timer = window.setInterval(function(){
var curOP = utils.getCss(curImg,'opacity');
if(curOP>1){
curImg.style.opacity = 1;
window.clearInterval(timer)
return
}
curOP+=step;
curImg.style.opacity = curOP;
},interval)
}
function handleAllImage(){
for(var i = 0,len = imgList.length;i<len;i++){
var curImg = imgList[i];
//当前的图片处理过了就不需要在重新的进行处理了
if(curImg.isLoad = true){
continue;
}
//只有A小于B的时候才进行处理,当前图片是隐藏的,我们其实计算的是它父节点的A
var curImgPar = curImg.parentNode;
var A = utils.offset(curImgPar).top + curImgPar.offsetHeight;
var B = utils.win('clientHeight')+utils.win('scrollTop');
if(A<B){
lazyImg(curImg);
}
}
}
//4、开始的时候一秒加载第一屏的图片,当滚动条滚动的时候,再加载剩余的图片
window.setTimeout(handleAllImage,1000);
window.onscroll = handleAllImage;
</script>
</body>
</html>
以上是 js实现多张图片延迟加载效果 的全部内容, 来源链接: utcz.com/z/319631.html