给许多DIV留出余量是很慢的
Giving many DIVs margin-left is slow
我正在制作一个基于jquery的甘特图,但我遇到了一个问题。甘特图可用于显示相当大的项目(100 到 500 个任务)。甘特图的条形以 DIV 的形式保存。 给500
DIV 的余量非常慢。我已经做了一些思考/测试,似乎包装所有 DIV,然后给出包含 DIV 边距的效果要快得多。
当前结构(简化):
<tr class="task-row">
<td>Task Name</td>
<td><div class="gantt-bar"></div></td>
</tr>
移动所有甘特图条的唯一方法是选择所有甘特条,然后添加边距。
$(".gantt-bar").css("margin-left", "+=24px");
拟议结构(简化):
<div>
<div class="left-panel">
<div>Project Name</div>
</div>
<div class="right-panel">
<div class="container">
<div class="gantt-bar"></div>
</div>
</div>
</div>
在这种情况下,移动容器 DIV 会更快。
$(".container").css("margin-left", "+=24px");
示例:http://jsfiddle.net/cvJqP/2/
那个小提琴告诉我它应该有效。我问这个问题而不实施的原因是,目前整个事情都是用表格完成的,将其更改为使用 DIV 是一项相当大的任务。只是想在我开始做之前确保这实际上有效。
这是解决问题的最佳方法吗?有没有办法保持表实现?
谢谢。
使用的解决方案:
<tr class="task-row">
<td>Task Name</td>
<td><div class="base"><div class="gantt-bar"></div></div></td>
</tr>
var newmargin = parseInt($(".base:first-child").css("margin-left").replace("px", "")) + 24 + "px";
$(bars).css('margin-left', newmargin);
这更快,因为不必为每个 DIV 重新计算保证金。
分配
1000 个边距的速度并不慢,而是检测和计算每个元素的边距值。
尝试只检测第一个孩子的值,然后像这样对它们进行一些处理:
$(".r-many").click(function() {
var oldval=$(".bar:first-child").css('margin-left').replace('px', '');
newval=parseInt(oldval)+24+'px';
$(".bar").css('margin-left', newval);
});
这是闪电般的小提琴:http://jsfiddle.net/sQHCY/
我希望这就是你想要的。
我不确定您的表实现是什么样的,但您不能将左边距添加到表中吗?如果没有,您可以随时使用容器包装表并执行与示例相同的操作。
将所有DIV 包装在一个容器中并将左边距应用于该容器是完全有意义的。
如果我
是你,我会研究一个久经考验的jquery插件,如jQuery.Gantt。
通常情况下,这些插件已经解决了您在此过程中会遇到的许多问题。
相关文章:
- 为什么在许多浏览器中drawImage()的性能略好于createPattern()
- 在Nodejs中为许多用户处理计时器
- 当有许多形式时,Fancybox脚本不起作用
- 如何动态创建许多Jquery颜色选择器(eyecon)
- 我如何编程许多不同的条件和操作
- 它是否创建了许多不利于JavaScript性能的变量
- 使用Jquery从页面上的许多重复类中获取特定元素
- jQuery无限循环,动画化许多项目
- 从Three.js场景中删除许多对象的速度较慢
- JavaScript检查某些文本中的许多关键字
- AJAX请求许多链接
- Selenium如何批处理许多isElementDisplayed调用
- 如果有许多元素使用相同的类,我如何使用JavaScript获取特定的元素
- getDataAsJSON()在PHP中是一个未定义的函数,但许多解释如何使用JSONP的网站都说要使用它
- 饼干.JS如何记住许多变化
- 如何使用 jQuery 触发对包含许多列表项的列表的单击
- 在 Angular 中对许多相同的表进行排序
- 替代具有许多类似功能
- 通过找到一种删除许多 if 语句的方法来简化代码
- 给许多DIV留出余量是很慢的