我也出现了叠加问题,而且每次刷新叠加的情况都不一样

我也出现了叠加问题,而且每次刷新叠加的情况都不一样

看了看评论似乎有人跟我出现了一样的问题。。。然而我现在也还没排查出来。已经出现的问题是叠加的图块高度是40. 另外我这个代码报错,说wrap未定义,可是我直接传参进去的。这个就很奇怪了。唉,麻烦老师帮我看看了

//模拟数据
var data = [{
    "src": "1.png",
    "title": "第一怪 竹筒当烟袋"
}, {
    "src": "2.png",
    "title": "第二怪 草帽当锅盖"
}, {
    "src": "3.png",
    "title": "第三怪 这边下雨那边晒"
}, {
    "src": "4.png",
    "title": "第四怪 四季服装同穿戴"
}, {
    "src": "5.png",
    "title": "第五怪 火车没有汽车快"
}, {
    "src": "6.png",
    "title": "第六怪 火车不通国内通国外"
}, {
    "src": "7.png",
    "title": "第七怪 老奶爬山比猴快"
}, {
    "src": "8.png",
    "title": "第八怪 鞋子后面多一块"
}, {
    "src": "9.png",
    "title": "第九怪 脚趾四季露在外"
}, {
    "src": "10.png",
    "title": "第十怪 鸡蛋拴着卖"
}, {
    "src": "11.png",
    "title": "第十一怪 粑粑叫饵块"
}, {
    "src": "12.png",
    "title": "第十二怪 花生蚕豆数着卖"
}, {
    "src": "13.png",
    "title": "第十三怪 三个蚊子一盘菜"
}, {
    "src": "14.png",
    "title": "第十四怪 四个老鼠一麻袋"
}, {
    "src": "15.png",
    "title": "第十五怪 树上松毛扭着卖"
}, {
    "src": "16.png",
    "title": "第十六怪 姑娘叫老太"
}, {
    "src": "17.png",
    "title": "第十七怪 小和尚可以谈恋爱"
}, {
    "src": "18.png",
    "title": "第十八怪 背着娃娃谈恋爱"
}];


var waterfall = function (wrap, boxes) {
    //获取屏幕可以显示的列数,调整容器的宽度m
    var boxWidth = boxes.eq(0).width() + 40;//内容的宽度
    var windowWidth = $(window).width();
    var colsNumber = Math.floor(windowWidth / boxWidth);
    wrap.width(colsNumber * boxWidth);

    //定义一个数组并存储每一列的高度
    var everyHeight = new Array();
    for(i = 0; i < boxes.length; i++){
        if(i < colsNumber){
            everyHeight[i] = boxes.eq(i).height() + 40;//加上margin
            console.log(i);

        }else{
            //开始控制定位
            var minHeight = Math.min.apply(null,everyHeight);
            console.log(i);
            console.log("minHeight:" + minHeight);
            var minIndex = getIndex(minHeight,everyHeight);
            console.log("minIndex: "+ minIndex);
            var leftValue = boxes.eq(minIndex).position().left;
            console.log("leftValue" + leftValue);
             boxes.eq(i).css({
                 'position':'absolute',
                 'top':minHeight,
                 'left':leftValue,
                 'opacity':'0'
             }).stop().animate({
                 'opacity':1
             },1000);
             everyHeight[minIndex] += boxes.eq(i).height() + 40;
            console.log("height update:" + everyHeight[minIndex]);
        }
    }
}

//获取最小列的索引
function getIndex(minHeight, everyHeight){
    for(index in everyHeight){
        if(everyHeight[index] == minHeight){
            return index;
        }
    }
}


$(document).ready(function (event) {
    var wrap = $('#wrap');
    var boxes = $('#wrap').children('div');
     waterfall(wrap,boxes);
    //滚动效果的触发
     $(this).scroll(function (event) {
          appendBox(wrap);
     });
});
//追加盒子函数
var appendBox = function (wrap) {
    for(i in data){
        var innerString = '<div> <img src="code/images/' + data[i].src + '"><a href="http://www.google.com" target="_blank">' + data[i].title + '</a></div>'
        wrap.append(innerString);
    }
     waterfall(warp,warp.children('div'));
};


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

5回答
卡布琦诺 2017-09-07 11:03:14
window.onload = function() {
    //获得外层以及每一个盒子
    var container = document.getElementById('wrap');
    var boxes = container.getElementsByTagName('div');
    //运行瀑布流主函数
    waterfall(container, boxes);

    //模拟数据
    var data = [{
        "src": "1.png",
        "title": "第一怪 竹筒当烟袋"
    }, {
        "src": "2.png",
        "title": "第二怪 草帽当锅盖"
    }, {
        "src": "3.png",
        "title": "第三怪 这边下雨那边晒"
    }, {
        "src": "4.png",
        "title": "第四怪 四季服装同穿戴"
    }, {
        "src": "5.png",
        "title": "第五怪 火车没有汽车快"
    }, {
        "src": "6.png",
        "title": "第六怪 火车不通国内通国外"
    }, {
        "src": "7.png",
        "title": "第七怪 老奶爬山比猴快"
    }, {
        "src": "8.png",
        "title": "第八怪 鞋子后面多一块"
    }, {
        "src": "9.png",
        "title": "第九怪 脚趾四季露在外"
    }, {
        "src": "10.png",
        "title": "第十怪 鸡蛋拴着卖"
    }, {
        "src": "11.png",
        "title": "第十一怪 粑粑叫饵块"
    }, {
        "src": "12.png",
        "title": "第十二怪 花生蚕豆数着卖"
    }, {
        "src": "13.png",
        "title": "第十三怪 三个蚊子一盘菜"
    }, {
        "src": "14.png",
        "title": "第十四怪 四个老鼠一麻袋"
    }, {
        "src": "15.png",
        "title": "第十五怪 树上松毛扭着卖"
    }, {
        "src": "16.png",
        "title": "第十六怪 姑娘叫老太"
    }, {
        "src": "17.png",
        "title": "第十七怪 小和尚可以谈恋爱"
    }, {
        "src": "18.png",
        "title": "第十八怪 背着娃娃谈恋爱"
    }];

    //设置滚动加载
    window.onscroll = function() {
        //校验数据请求
        if (getCheck()) {
            var wrap = container;
            for (i in data) {
                //创建figure
                var figure = document.createElement('div');
                wrap.appendChild(figure);
                //创建img
                var img = document.createElement('img');
                img.src = 'img/' + data[i].src;
                img.style.height = 'auto';
                figure.appendChild(img);
                //创建a标记
                var a = document.createElement('a');
                a.href = "http://www.imooc.com";
                a.target = "_blank";
                a.innerHTML = data[i].title;
                figure.appendChild(a);
            };
            waterfall(container, boxes);
        };
    };
};

// 瀑布流主函数
function waterfall(wrap, figures) {
    //  获得屏幕可显示的列数
    var figureW = figures[0].offsetWidth + 20;
    var colsNum = Math.floor(document.documentElement.clientWidth / figureW);
    wrap.style.width = figureW * colsNum + 'px'; //为外层赋值宽度
    //  循环出所有的figure并按照瀑布流排列
    var everyH = []; //定义一个数组存储每一列的高度
    for (var i = 0; i < figures.length; i++) {
        if (i < colsNum) {
            everyH[i] = figures[i].offsetHeight + 20;
        } else {
            var minH = Math.min.apply(null, everyH); //获得最小的列的高度
            var minIndex = getIndex(minH, everyH); //获得最小列的索引
            getStyle(figures[i], minH, figures[minIndex].offsetLeft - 10, i);
            everyH[minIndex] += figures[i].offsetHeight + 20; //更新最小列的高度
        };
        figures[i].onmouseover = function() {
            this.style.opacity = "0.5";
        };
        figures[i].onmouseout = function() {
            this.style.opacity = "1";
        };
    };
};

// 获取最小列的索引
function getIndex(minH, everyH) {
    for (index in everyH) {
        if (everyH[index] == minH){
         return index;
        };
    };
};

// 数据请求检验
function getCheck() {
    var documentH = document.documentElement.clientHeight;
    var scrollH = document.documentElement.scrollTop || document.body.scrollTop;
    return documentH + scrollH >= getLastH() ? true : false;
};

// 获得最后一个figure所在列的高度
function getLastH() {
    var wrap = document.getElementById('wrap');
    var figures = document.getElementsByTagName('div');
    return figures[figures.length - 1].offsetTop + figures[figures.length - 1].offsetHeight;
};

// 设置加载样式
var getStartNum = 0; //设置请求加载的条数的位置
function getStyle(figure, top, left, index) {
    if (getStartNum >= index) return;
    $(figure).css({
        'position': 'absolute',
        'top': top,
        "left": left,
        "opacity": "0"
    });
    $(figure).stop().animate({
        "opacity": "1"
    }, 999);
    getStartNum = index; //更新请求数据的条数位置
};

你的代码是不够完善的,将你的代码进行了调整,建议参考对比一下,另外建议将你的代码放在window.onload = function() {}中,且你的代码没有获取var container = document.getElementById('wrap');和var boxes = container.getElementsByTagName('div');的操作哦~祝学习愉快!

  • 提问者 MHA #1
    谢谢老师,虽然我参考了但是这个代码前半段都用都javascript都方法最后一个getstyle突然用jquery也很奇怪啊。另外我有获取container和boxes, 我用的是这两句 var wrap = $('#wrap'); var boxes = $('#wrap').children('div'); 至于window.onload = function() {}, 我用的是另外一个 (document).ready(function (event) { var wrap = $('#wrap'); var boxes = $('#wrap').children('div'); waterfall(wrap,boxes); console.log("waterfall1"); //滚动效果的触发 $(this).scroll(function (event) { console.log("scroll"); appendBox(wrap); }); }); 不知道是哪里有问题呢
    2017-09-10 11:15:14
提问者 MHA 2017-09-07 02:39:11

css文件 style.css

/* all tags*/
*{
    padding:0;
    margin:0;
    border:none;
}
body{
    background:#ddd;
}
img{
    border:none;
}
a{
    text-decoration: none;
    color:#444;
}
a:hover{
    color:#999;
}
/*wrap*/
#wrap{
    position:relative;
    width:auto;
    height: auto;
    margin:0 auto;
}
#wrap>div{
    float:left;
    box-sizing: border-box;
    width: 280px;
    height: auto;
    margin:10px;
    padding:10px;
    border-radius:5px;
    background:#fff;
}
#wrap>div>img{
    width:100%;
}
#wrap>div>a{
    display:block;
    /*跟上面图片有间距*/
    font-size:18px;
    font-weight:bold;
    line-height:40px;
    text-align: center;
}


提问者 MHA 2017-09-07 02:38:22

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>云南十八怪</title>

    <link rel="stylesheet" type="text/css" href="style.css">

</head>

<body>

<div id="wrap">

    <div>

        <img src="code/images/1.png">

        <a href="http://www.google.com" target="_blank">第一怪 竹筒当烟袋</a>

    </div>

    <div>

        <img src="code/images/2.png">

        <a href="http://www.google.com" target="_blank">第二怪 草帽当锅盖</a>

    </div>

    <div>

        <img src="code/images/3.png">

        <a href="http://www.google.com" target="_blank">第三怪 这边下雨那边晒</a>

    </div>

    <div>

        <img src="code/images/4.png">

        <a href="http://www.google.com" target="_blank">第四怪 四季服装同穿戴</a>

    </div>

    <div>

        <img src="code/images/5.png">

        <a href="http://www.google.com" target="_blank">第五怪 火车没有汽车快</a>

    </div>

    <div>

        <img src="code/images/6.png">

        <a href="http://www.google.com" target="_blank">第六怪 火车不通国内通国外</a>

    </div>

    <div>

        <img src="code/images/7.png">

        <a href="http://www.google.com" target="_blank">第七怪 老奶爬山比猴快</a>

    </div>

    <div>

        <img src="code/images/8.png">

        <a href="http://www.google.com" target="_blank">第八怪 鞋子后面多一块</a>

    </div>

    <div>

        <img src="code/images/9.png">

        <a href="http://www.google.com" target="_blank">第九怪 脚趾四季露在外</a>

    </div>

    <div>

        <img src="code/images/10.png">

        <a href="http://www.google.com" target="_blank">第十怪 鸡蛋拴着卖</a>

    </div>

    <div>

        <img src="code/images/11.png">

        <a href="http://www.google.com" target="_blank">第十一怪 粑粑叫饵块</a>

    </div>

    <div>

        <img src="code/images/12.png">

        <a href="http://www.google.com" target="_blank">第十二怪 花生蚕豆数着卖</a>

    </div>

    <div>

        <img src="code/images/13.png">

        <a href="http://www.google.com" target="_blank">第十三怪 三个蚊子一盘菜</a>

    </div>

    <div>

        <img src="code/images/14.png">

        <a href="http://www.google.com" target="_blank">第十四怪 四个老鼠一麻袋</a>

    </div>

    <div>

        <img src="code/images/15.png">

        <a href="http://www.google.com" target="_blank">第十五怪 树上松毛扭着卖</a>

    </div>

    <div>

        <img src="code/images/16.png">

        <a href="http://www.google.com" target="_blank">第十六怪 姑娘叫老太</a>

    </div>

    <div>

        <img src="code/images/17.png">

        <a href="http://www.google.com" target="_blank">第十七怪 小和尚可以谈恋爱</a>

    </div>

    <div>

        <img src="code/images/18.png">

        <a href="http://www.google.com" target="_blank">第十八怪 背着娃娃谈恋爱</a>

    </div>


</div>


<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.js"></script>

<!--<script type="text/javascript" src="script.js"></script>-->

<script type="text/javascript" src="jquery_script.js"></script>

</body>

</html>


卡布琦诺 2017-09-05 13:42:49

亲,你要把代码贴全了,譬如css、html、js,方便大家更好的发现问题并且帮助你解决和啊,祝学习愉快

  • 提问者 MHA #1
    你好,我把html文件,css文件都贴上来了,麻烦老师帮我看一下。
    2017-09-07 02:39:53
提问者 MHA 2017-09-05 04:43:58

刷新页面的时候即使什么都不动也会自动执行scroll,也就是说是执行‘scroll’里的‘append’里出问题里。可是查不出问题在哪里啊..

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
前端小白入门系列课程
  • 参与学习           人
  • 提交作业       11218    份
  • 解答问题       36713    个

从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师