我如何提高效率/速度,而使用jQuery悬停
How do I increase efficiency/speed while using jQuery hover?
在我正在编写的web应用程序中,我有一系列创建网格的div。网格是基于用户输入的Xdiv乘Ydiv。使用jQuery悬停功能,我想改变周围所有div在一定距离内的背景颜色。基本上,如果我悬停在一个div上,所有div在4行和4列之外也应该改变他们的背景颜色。我可以让它正常运行,但当网格变成32乘128div时,就会出现真正的性能问题,悬停效果明显滞后于鼠标。我几乎可以肯定,这是因为DOM中有大量类似的div,因为当网格是30 × 30时,问题就不存在了。
这是我的html的基本结构:<div class="table_area">
<div class="table_row" id="row-0">
<div class="cap" data-row="0" data-column="0"></div>
<div class="cap" data-row="0" data-column="1"></div>
...
</div>
<div class="table_row" id="row-1">
<div class="cap" data-row="1" data-column="0"></div>
<div class="cap" data-row="1" data-column="1"></div>
...
</div>
...
</div>
为了加快DOM的搜索速度,我将每一行添加到一个数组中。因此,$('div.table_row[data-row="0"]')
会在arr[0]
中。因此,当第8行中的div
悬停时,我只检查arr[4]
到arr[12]
的必要div。
我认为这会大大加快这个过程,因为我消除了大量的搜索,但是在悬停时仍然有一个非常明显的延迟。
我的设置有什么明显的错误吗?我使用的是最新版本的Chrome浏览器,如果这很重要的话。
根据类名进行选择是浏览器自带的,而根据元素内的数据进行选择则取决于jQuery内部的循环。
使用类名来标记你的行和列,你的选择器会快得多。
如果您为每个大写添加一个类,那么您可以动态构建一个大型选择器:
var sel = "";
$(".cap").hover(function () {
var row = $(this).data("row");
var col = $(this).data("column");
sel = "";
for(var i=row-2; i<=row+2; i++)
{
for(var j=col-2; j<=col+2; j++)
{
sel += ".r" + i + ".c" + j + ",";
}
}
sel = sel.slice(0,-1);
$(sel).css("background-color","blue");
},function () {
$(sel).css("background-color","white");
});
});
示例:http://jsbin.com/izeyal/38/edit
由于我是动态地创建行和列,所以我还为每一行添加了id,如果您想通过更改选择器生成代码来进行测试,您可以使用它:
sel += "#r" + i + "c" + j + ",";
为了完整起见,我用来生成网格的代码:
for(i=0; i<128; i++)
{
var newRow = $('<div/>', {
id: 'row-' + i
}).appendTo('.table_area');
for (j=0; j<32; j++)
{
var rowid= "r" +i + "c" + j;
$('<div/>', {id: rowid }).data("row",i).data("column",j).addClass("cap r" + i + " c" + j).appendTo(newRow);
}
}
相关文章:
- jQuery悬停在没有鼠标悬停的情况下启动
- 为什么jquery悬停在jsfiddle中可以工作,而在我的html布局中却不能
- jquery悬停和while循环
- 添加一个setTimeout方法会使jQuery悬停方法忽略setTimeout方法中的函数
- jQuery悬停动画只在其他类似元素中的一个元素上
- 为什么jQuery悬停方法在这种情况下不起作用
- Jquery悬停选择不起作用
- Jquery 悬停事件卡在克隆元素上
- Jquery 悬停函数在将鼠标悬停在选择框上时会失败
- Jquery悬停功能显示和隐藏元素
- Jquery 悬停以显示图像
- JQuery:悬停时文本颜色切换
- jQuery悬停滚动,只需要一点帮助
- 当加载带有hastags的动态内容-URI时,Jquery-悬停效果不起作用
- 如何防止jquery悬停效果在悬停时和悬停时激活
- 使用jQuery悬停时出现重复图像
- jQuery悬停越界
- jQuery悬停淡出p个标签,再淡出另一个标签
- Jquery悬停函数- 如何使其变得简单
- jquery悬停在图像上不起作用