javascript - 还是关于JS数组的问题,求大神帮忙指教,谢谢哈。
PHP中文网
PHP中文网 2017-04-10 18:10:08
[JavaScript讨论组]

我想要的效果是,瀑布流效果。正在学习中,下面是我跟据网上的教程写的代码,教程上只讲了如何在定义数组的情况下来做,但我想即然我都能获取到要生成的p的个数,那么数组也是应该能获取到的不用定死,但是我修改后老是显示不正常,
按下在我这种方法弄的话,不知道为什么第一排生成的p的TOP值是正常的,但从第二排开始生成的p的TOP就不正常了,有的TOP的值很大。包括Left的值也不正常,求大神帮我看一下,是我写的哪里出了问题应该怎么改。

生成的p的Left与Top值如下图1:
图1

下面是我写的代码:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>练习1</title>
<style>
    html,body{
        width: 100%;
        height: 100%;
    }
    *{
        margin: 0px;
        padding: 0px;
    }
    #Box{
        position: relative;
        background: #AB1D1F;
        
    }
    </style>
<script>
    function least(obj){
        var initea_H = 1000000000000;
        var index = 0;
        for(var i=0;i<obj.length;i++){
            var obj_height = obj[i];
            
            if(obj_height<initea_H){
                initea_H = obj_height;
                index = i;
            }
        };
        return index;
    };
    //
    window.onload = function(){
        var oBox = document.getElementById('Box');
        var vH = document.documentElement.clientHeight;
        var vW = document.documentElement.clientWidth;
        
        var oBox_xiao = 280 + 10;
        var oBox_gesu = parseInt(vW/oBox_xiao);
        
        oBox.style.width = oBox_xiao * oBox_gesu +"px";
        //oBox.style.height = "80%";
        //alert(oBox_xiao*oBox_gesu);
        oBox.style.margin = "0px auto";
        
        
        //alert(oBox_gesu);
        var xid =oBox_gesu;
        var values = 0;
        var array_oBox = (new Array(xid+1)).join(values).split(''); 
        //alert(array_oBox);
        //var array_oBox=new Array([parseInt(oBox_gesu)]);
        
        
        //var array_oBox=[0,0,0,0];
        
        for(var i=1;i<100;i++){
            var random_a = Math.ceil(Math.random()*(300-200)+150);
            
            var mxi_index = least(array_oBox);
            
            var op = document.createElement('dvi');
            op.style.position = "absolute";
            op.style.width = 280+"px";
            op.style.height = random_a + "px";
            op.style.left = mxi_index * oBox_xiao + "px";
            op.style.top = array_oBox[mxi_index] + "px";
            op.style.backgroundColor = "#998822";
            op.style.float = "left";
            
            oBox.appendChild(op);
            
            array_oBox[mxi_index] += op.offsetHeight + 8;
            //alert(xid);
            
        }
    }
    </script>
</head>

<body >
<p id="Box">
    
</p>
</body>
</html>
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(1)
迷茫

断点调试了第一次的循环

var array_oBox = (new Array(xid+1)).join(values).split(''); //这里生成的数组["0","0"]

注意到里面的0是字符串吗?

array_oBox[mxi_index] += op.offsetHeight + 8;//假如op.offsetHeight=163,那么值为"0163"

这样循环下去,数组里的值会变得非常大

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号