javascript动态生成100个div,每逢10就换一行。请问怎么计算div的TOP值,还有这个效果怎么实现。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript动态生成100个div,每逢10就换一行。请问怎么计算div的TOP值,还有这个效果怎么实现。相关的知识,希望对你有一定的参考价值。

麻烦了,大神

参考技术A 把100个div从0开始编号(即0-99),假定编号的变量为n,则
第n个div的Left = (n%10) * div的width
第n个div的Top = parseInt(n/10) * div的height

简言之就是每个div的左边距等于这个div的序号除以10的余数再乘以这个div的宽;每个div的上边距等于这个div的序号除以10的商再乘以这个div的高。
参考技术B <!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset=UTF-8>
<title>汪洋大海</title>
<style type="text/css">
</style>
<script type="text/javascript">
var G =
    
        divs : [],
        D : 0,// 下0,左1,上2,右3
        od : [], 
        C : function (i)
       
        var div = document.createElement ('div');
        div.style.position = 'absolute';
        div.style.width = '50px';
        div.style.height = '50px';
        div.style.textAlign = 'center';
        div.style['line-height'] = '50px';
        div.style.backgroundColor = 'red';
        div.style.color = 'white';
        div.style.font = '42px Consolas bolder';
        var txt = document.createTextNode (i);
        div.appendChild (txt);
        return div;
        ,
        I : function (num)
        
        for ( var i = 0; i < num; i++)
        
         var div = this.C (i);
        this.divs.push (div);
        
        var vb = document.createElement ('input');
        vb.setAttribute ("type", "button");
        vb.value = "自动生成一个V字形";
        vb.onclick = function ()
        
        G.V ();
        
        this.vb = vb;
        document.body.appendChild (vb);
        
        var btn = document.createElement ('input');
        btn.type = 'button';
        btn.value = '按钮';
        btn.onclick = function ()
        
         G.T ();
        
        document.body.appendChild (btn);
        ,
        A : function (divs, isExists, which)
        
         if (!isExists)
            
        for ( var i = 0; i < divs.length; i++)
        
        document.body.appendChild (divs[i]);
        
            
         which ? this.iExists = 1 : this.oExists = 1;
        ,
        V : function ()
        
        var divs = G.divs;
        for ( var i = 0; i < divs.length / 2; i++)
        
        divs[i].style.left = parseFloat (divs[i].style.width) * i + 'px';
        divs[divs.length - i - 1].style.top = divs[i].style.top = parseFloat (divs[i].style.height) * (i + 1)+ 'px';
        divs[divs.length - i - 1].style.left = parseFloat (divs[i].style.width) * (divs.length - i - 1) + 'px';
        
        G.A (divs, this.iExists, true);
        ,
        // 下,上, 靠上;  左,右, 靠左
        // 点击顺序 下,左,上,右
        T : function ()
        
         var divs = G.divs;
         switch (G.D)
            
            case 0:
             for ( var i = 0; i < divs.length / 2; i++)
                
              divs[divs.length - i -1].style.top = divs[i].style.top = parseFloat (divs[i].style.height) * Math.floor(divs.length / 2 - i + 1) + 'px';
                 divs[i].style.left = parseFloat (divs[i].style.width) * i + 'px';
                 divs[divs.length - i - 1].style.left = parseFloat (divs[i].style.width) * (divs.length - i - 1) + 'px';
                
            break;
            case 1:
             for ( var i = 0; i < divs.length / 2; i++)
             
             divs[divs.length - i - 1].style.left = divs[i].style.left = parseFloat (divs[i].style.width) * i + 'px';
             divs[divs.length - i - 1].style.top = parseFloat (divs[i].style.height) * (divs.length - i) + 'px';
             divs[i].style.top = parseFloat (divs[i].style.height) * (i + 1)+ 'px';
             
             break;
            case 2:
             G.V ();
             break;
            case 3:
             for ( var i = 0; i < divs.length / 2; i++)
             
             divs[divs.length - i - 1].style.left = divs[i].style.left = parseFloat (divs[i].style.width) * Math.floor(divs.length / 2 - i) + 'px';
             divs[divs.length - i - 1].style.top = parseFloat (divs[i].style.height) * (divs.length - i) + 'px';
             divs[i].style.top = parseFloat (divs[i].style.height) * (i + 1)+ 'px';
             
             break;
            
        G.D++;
        G.D = G.D > 3 ? 0 : G.D;
        G.A (divs, this.iExists, true);
        ,
        P : function (sum, each)
        
         this.od = [];
         for ( var i = 0; i < sum; i++)
            
         var div = this.C (i);
         div.style.border = '1px dashed black';
         div.style.top = Math.floor (i / each) * parseFloat (div.style.height) + 500 + 'px';
         div.style.left = Math.floor (i % each) * parseFloat (div.style.width) + 'px';
         this.od.push (div);
            
         G.A (this.od, this.oExists, false);
        
    ;
    
    onload = function ()
    
    G.I (7);
    G.P (100, 20);
    
</script>
</head>
<body>
</body>
</html>

参考技术C http://sandbox.runjs.cn/show/ffvmsa83
这个是我写的一个,点击链接就能看到效果,要看源代码你可以右键,查看页面源代码,就可以了。代码可能不是很好,但是总算也是实现了效果的。嘿嘿追问

javascript动态生成100个div,每逢10就换一行。请问怎么计算div的TOP值

追答

http://sandbox.runjs.cn/show/ruf9xlb5
这个是生成一百个div,每十个一行的代码

追问

明白了,谢谢,我javascript是初学,请问有什么方法吗,,DOM好学吗,我很喜欢编程

追答

学习js这个东西我觉得没什么捷径,勤奋一些,多看多练习一下慢慢就好了。我也还在学习,大家共同努力奋斗吧。加油!你可以加QQ群119026244,里面很多前端工作者,他们或许能更快捷的帮助你,你加的时候可以写上‘商鉴推荐我加群’,哈哈哈哈哈啊哈

如何为所有动态生成的 div 添加常用的 Javascript 函数? [复制]

【中文标题】如何为所有动态生成的 div 添加常用的 Javascript 函数? [复制]【英文标题】:How to add common Java Script function to all div generated dynamically? [duplicate] 【发布时间】:2015-07-19 09:06:17 【问题描述】:

如何将javascript函数添加到动态生成的所有div中。在 _data_grid.html 中,div bucket 是动态生成的,id 为 forloop.counter0。我想添加常用的javascript函数。喜欢显示和隐藏 div 的某些部分。所有分区都不一样,希望 JavaScript 函数单独工作。我将如何做到这一点。

_data_grid.html

   <section id="grid_content">
      % for row in rows%
        <div class="bucket" id="bucketforloop.counter0">
             row.render 
        </div>
        % empty %                             
             table.get_empty_message 
            % endfor %
    </section>

所有的分割都会分开工作。请看下图,如果我点击1st div上的hidecontent,那么它会隐藏1st div其他会隐藏,如果我点击 2nd div 然后它将隐藏 2nd div,其他 div 不会隐藏。

【问题讨论】:

delegate() 函数或使用 $("document.body").on("div.bucket","click", function()) 应该适合你。 "click"可以替换成你想要的事件 你的意思是$("#grid_content").on("click","div.bucket", function()) @Sanchit,但是所有的潜水都是分开工作的.. 你是如何设法忽略所有在你写这个问题时提出的建议的? 在 body 元素上绑定代理不是好习惯。 【参考方案1】:

稍后在您的 javascript 中,与委托绑定。

$(document).ready(function()
    $('#grid_content').on('click', '.bucket', function()
        ...whatever logic you need...
    );
);

这将在 grid_content 部分内具有“bucket”类的任何 div 上运行。

对于这将做什么似乎有些混乱。声明说,如果对 div1 执行操作,它应该只影响 div1,对于 div2 和 div3 也是如此。

这就是事件的运作方式。如果单击 div1,它将生成一个单击事件并冒泡到父级#grid_content。使用上面的委托,它将检查......这是一个点击事件吗?是的!它是由具有类桶的元素创建的吗?是的!然后我需要对它应用这个函数。

此时,在函数中使用 $(this) 将允许您引用被点击的 div 的各个 dom 元素。

【讨论】:

但是所有部门都不同,希望 JavaScript 函数单独工作。

以上是关于javascript动态生成100个div,每逢10就换一行。请问怎么计算div的TOP值,还有这个效果怎么实现。的主要内容,如果未能解决你的问题,请参考以下文章

取模求余在js生成100个div逢10换行

如何为所有动态生成的 div 添加常用的 Javascript 函数? [复制]

js生成div,如何使15个div成一行,满15个自动换到下一行

怎样循环生成10个div

怎么使用javascript动态生成嵌套的div

从 HTML div 启动 JavaScript 函数,其中函数名称是动态生成的 ASP.NET