jQuery版瀑布流(内含很多操作步骤,自看)

318 阅读2分钟

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="css/index.css">
</head>
<body>
<div id="container" class="container">
    <ul>
        <!--<li>-->
            <!--<img src="images/1.jpg" alt="">-->
            <!--<p>生活不只有代码 还有诗和远方</p>-->
            <!--<a href="javascript:;">采集</a>-->
        <!--</li>-->
    </ul>
    <ul></ul>
    <ul></ul>
    <ul></ul>
</div>
<script src="jquery-1.11.3.js"></script>
<script src="utils/utils.js"></script>
<script src="js/index.js"></script>
</body>
</html>

css文件

html,body,div,ul,li,img,p,a{
    margin: 0;
    padding: 0;
}
.container{
    width: 840px;
    margin: 30px auto;
    background: #cccccc;
    overflow: hidden;
    padding-left: 10px;
}
ul{
    float: left;
    list-style: none;
    width: 200px;
    margin-right: 10px;
}
ul li{
    position: relative;
    width: 100%;
    background: #fff;
    margin-top: 10px;
    margin-bottom: 10px;

}
ul li img{
    display: block;
    width: 200px;
    height: 300px;
    background: url("../images/timg.gif") no-repeat center center;
}
ul li a{
    text-decoration: none;
    color: #000000;
    width: 80px;
    height: 40px;
    line-height: 40px;
    text-align: center;
    background: pink;
    position: absolute;
    left: 5px;
    top: 5px;
    display: none;
}
ul li:hover a{
    display: block;
}
ul li p{
    text-align: center;
}

js

var oUl=$('ul')[0];
//console.log(oUl);//ul元素

var url='./data.json';
var val;
$.ajax({
       type:'GET',
       url:url,
       async:false,
       dataType:'json',
       success:function(data){
           //方法中传入的参数data为后台获取的数据
           //console.log(data);//[{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
           val=data;
       }
});
//console.log(val);

function bindHtml(){
for(var i=0;i<50;i++){
    var str=``;
    //8张图片
    var num=Math.round(Math.random()*7);
    var numObj=val[num];//JSON格式对象里面的每一项
    str=`
         <li>
            <img src="" alt="" trueImg="${numObj.src}" style="height: ${numObj.height}"> 
            <p>${numObj.title}</p>
            <a href="javascript:;">采集</a>
         </li>
    `;
    // $('img').attr({style:'height:${numObj.height}'});
    var ulAry=$('ul').toArray();
    //console.log(ulAry);//数组
    ulAry=ulAry.sort(function(a,b){
        return a.scrollHeight-b.scrollHeight;
    });
    //console.log($(str).get(0));
    ulAry[0].appendChild($(str)[0]);
   }
}
bindHtml();

// var imgs=$('img');
// console.log(imgs);
var imgs=document.getElementsByTagName('img');
function delayImgs(){
        for (var i=0;i<imgs.length;i++){
             single(imgs[i])
        }
}

function single(curImg){
          if($(curImg).data('load')){
             console.log($(curImg).data('load'));
             return;
          }
         //console.log(curImg);//每一张图片
         //console.log($(curImg));//jQuery的实例,可以调用jQuery上的公有方法,jQuery.fn.init [img, context: img]
         var curImgOffsetH=$(curImg).outerHeight();
         console.log(curImgOffsetH);//当前的图片的高度,随机高度

         var curImgOffsetT=$(curImg).offset().top;//获取到的是当前图片获取的上偏移量(是上偏移量不是当前图片的卷去高度)
         //console.log($(curImg).offset());//获返回的结果是个对象{top: 40, left: 28.5},获取到的是当前图片的偏移量,包括上偏移量和左偏移量,
         console.log(curImgOffsetT);//当前图片的上偏移量,偏移量是一堆数字

         // var winH=utils.win('clientHeight');//原生获取一屏的高度
         // console.log(winH);

         var winH=$(window).height();//jQ获取一屏的高度
         //console.log(winH);//968

         var winT=$(window).scrollTop();
         //console.log(winT);//window卷去的高度
         if(winH+winT>=curImgOffsetH+curImgOffsetT){
             var trueAdd=$(curImg).attr('trueImg');
             console.log(trueAdd);
             var newImg=$('<img/>')[0];//创建一个新的img
             console.log(newImg);
             newImg.src=trueAdd;
             $(newImg).ready(function(){
                $(curImg).attr('src',trueAdd);//jQuery给当前图片设置src的私有属性,或者是用原生,curImg.src=trueAdd
                 fadeIn($(curImg));
                 //console.log($(curImg))//当前图片的实例
                 $(curImg).data('flag',true);
             })
         }
}
delayImgs();

function fadeIn(img){
    var val=null;
    //console.log($(img));//传进来参数的实例,jQuery.fn.init [img, selector: "", context: img]
    $(img).css('opacity',0.3);
    var timer=setInterval(()=>{
         val=Number($(img).css('opacity'));//返回的是字符串0.3,然后用Number()方法转换为数字0.3
        //console.log(val);//0.3
        val+=0.1;
        //console.log(val);//每次加0.1累加后的值
        if(val>=1){
            $(img).css('opacity',1);
            clearInterval(timer);
            return;
        }
        $(img).css({'opacity':val});
    },300);
}

var container=$('#container');
console.log(container);
$(window).scroll(function(){
             delayImgs();
             var winH=$(window).height();
             var winT=$(window).scrollTop();
             var containerScrollH=container.height();
             if(winH+winT+1000>=containerScrollH){
                bindHtml();
             }
});

引入jQuery文件jQuery-1.11.3.js

images文件夹(自己搞图片,我用的是8张图片)

data.json文件

[
   {"src": "./images/1.jpg","title":"人生不止有代码 诗和远方","height": "200px"},
   {"src": "./images/2.jpg","title":"人生不止有代码 诗和远方","height": "220px"},
   {"src": "./images/3.jpg","title":"人生不止有代码 诗和远方","height": "250px"},
   {"src": "./images/4.jpg","title":"人生不止有代码 诗和远方","height": "300px"},
   {"src": "./images/5.jpg","title":"人生不止有代码 诗和远方","height": "170px"},
   {"src": "./images/6.jpg","title":"人生不止有代码 诗和远方","height": "280px"},
   {"src": "./images/7.jpg","title":"人生不止有代码 诗和远方","height": "160px"},
   {"src": "./images/8.jpg","title":"人生不止有代码 诗和远方","height": "230px"}
 ]