IE8上的鼠标hover/hover效果很慢
我在IE8中发现了一个奇怪的性能问题,当在一个有很多行的表上使用鼠标hover事件时(本例中为100)。 我已经尝试了很多不同的方法,但我似乎无法找到任何方法来获得它我喜欢/需要的速度。
如果我在每个事件上切换类,性能在所有IE版本中都会下降,如果我通过javascript使用CSS直接操作IE6和IE7加速很多,但IE8仍然执行糟糕。
有任何想法吗 ? 我真的想知道是什么让mouseover事件与其他所有浏览器相比都显得迟钝。
如果这只发生在IE6上,我可以理解并让它通过,但是当最新版本的浏览器是最慢的时,只会有越来越多的用户体验不好。
使用JQueryhover的示例: http : //thedungheap.net/research/
编辑:我现在更新了示例,以便很容易看到有10行和200之间的区别。这是在同一个文档中,所以这对整个DOM大小来说不是问题,我猜
:无论你打算如何实现它,IE11上的hover都非常慢。 实际上,javascript onmouseover,onmouseout事件提供了比CSS更快的方法来创建hover效果
IE8上最快的例子:
foo bar
较慢的例子:
foo bar
很慢的例子: JSFiddle
foo bar
顺便提一下你可以使用的所有浏览器:仅使用css的hover选择器。 只有IE6才能添加最快的解决方案。
尝试使用事件冒泡。 仅将hover事件添加到表中,然后查看目标元素。
$(function() { $('table').hover(function(e) { $(e.originalTarget.parentNode).css('backgroundColor', '#ffc000'); }, function(e) { $(e.originalTarget.parentNode).css('backgroundColor', '#fff'); }); });
您是否尝试过如果每行只有一个会发生什么? 好奇,如果它是DOM [或每行]中的元素数量可能会影响性能。 否则,它可能是ie8遍历选择器引擎中标记的方式的问题。 不是真的答案,而是要尝试的东西。
没有IE8,或者我自己尝试一下。
对我来说似乎足够快,没有实际查看指标。
您可以尝试鼠标hover/鼠标移除而不是切换。 您还可以尝试事件委派,这通常有助于dom中的这么多元素。
$("tr").mouseover(function() { $(this).css('backgroundColor', '#ffc000'); }) .mouseout(function() { $(this).css('backgroundColor', '#fff'); });
我遇到了这个问题并实施了以下解决方法
var viewTable = jQuery("table.MyTable"); var temDiv = jQuery("").appendTo("body"); var highlightColor = temDiv.css("background-color"); viewTable.mouseover(function(eventObj){ jQuery(eventObj.target).parents("tr:first").css("background-color", highlightColor); }).mouseout(function(eventObj){ jQuery(eventObj.target).parents("tr:first").css("background-color",""); });
我希望这对你有用。
很抱歉发布这个旧的答案,但我认为这是相关的,这个页面排名很好谷歌所以……
哇,我只是花了很多时间来解决这个问题,我尝试使用Javascript,但它仍然很慢。
如果您使用背景图像,这是一个解决方案:
这对我来说是一个真正的问题,因为我遇到这个问题的项目是左右按钮/箭头的hover效果,我用它来左右选项卡,标签会在按钮下面,如果我有一个标签幻灯片可能会说,当光标进入按钮区域时,正常图像会消失,下面的图像会在几毫秒内可见,然后,hover图像最终会显示,丑陋。
真正的解决方案是使用图像精灵,即使在纯css中也绝对没有滞后。 我们的想法是拥有一个包含所有不同图像状态的图像(正常/hover/选择/非活动/等),您将图像设置为背景图像,并且您只需调整hover效果的背景位置值,其他。
如果你想更好地了解css sprites: http : //css-tricks.com/css-sprites/
- jQuery的fadeIn()和fadeOut()不能与IE 8一起使用吗?
- Jquery.get()在IE8 / 9中不起作用。 不会加载未修改的缓存页面304
- jQuery xml解析,检查IE8无法正常工作
- Valum文件上传 – 适用于Chrome但不适用于IE,Image img = Image.FromStream(Request.InputStream)
- 防止jQuery中的双表单提交
- 可以让Excanvas在IE 8中运行吗?
- IE导致IE中“丢失”文本?
- 将数据插入div时,IE8强制执行兼容模式
- jQuery .height()在div上输出与.scrollHeight相同的值:overflow(auto)(IE8)