Javascript 我的代码在IE8中非常慢。但在Safari、firefox和chrome中,它的效果非常好
我现在陷入困境,我真的希望有人能告诉我我真正没有看到的问题 问题是菜单栏在Safari、FF和Chrome中都很好用。但是当我打开IE8时,当我把鼠标光标放在另一个菜单区域时,它的速度太慢了。或者更好,整个菜单都太慢了 html id和类是Javascript 我的代码在IE8中非常慢。但在Safari、firefox和chrome中,它的效果非常好,javascript,jquery,Javascript,Jquery,我现在陷入困境,我真的希望有人能告诉我我真正没有看到的问题 问题是菜单栏在Safari、FF和Chrome中都很好用。但是当我打开IE8时,当我把鼠标光标放在另一个菜单区域时,它的速度太慢了。或者更好,整个菜单都太慢了 html id和类是 <div class="oe_wrapper"> <ul id="oe_menu" class="oe_menu"> 这是我的菜单代码: <div class="oe_wrapper"> <
<div class="oe_wrapper">
<ul id="oe_menu" class="oe_menu">
这是我的菜单代码:
<div class="oe_wrapper">
<ul id="oe_menu" class="oe_menu">
<li><a href="#">Lipsum</a>
<div>
<ul>
<li class="oe_heading">Lipsum</li>
<li><a href="#">Lipsum</a></li>
</ul>
<ul>
<li class="oe_heading">Lipsum</li>
<li><a href="#">Lipsum</a></li>
<li><a href="#">Lipsum</a></li>
<li><a href="#">Lipsum</a></li>
<li><a href="#">Lipsum</a></li>
</ul>
</div>
</li>
<li><a href="#">PRODUCTEN</a>
<div style="left:-191px;">
<ul>
<li class="oe_heading">Lipsum</li>
<li><a href="#">Lipsum</a></li>
<li><a href="#">Lipsum</a></li>
<li><a href="#">Lipsum</a></li>
<li><a href="#">Persen</a></li>
</ul>
</ul>
</div>
</li>
<li><a href="#">Lipsum</a>
<div style="left:-383px;">
<ul class="oe_full">
<li class="oe_heading">Lipsum</li>
<li><a href="#">Lipsum</a></li>
</ul>
</div>
</li>
<li><a href="#">Lipsum</a>
<div style="left:-575px;">
<ul>
<li class="oe_heading">Lipsum</li>
<li><a href="#">Lipsum</a></li>
<li><a href="#">Lipsum</a></li>
</ul>
<ul>
<li class="oe_heading">Lipsum</li>
<li><a href="#">Lipsum</a></li>
<li><a href="#">Lipsum</a></li>
</ul>
</div>
</li>
<li><a href="#">CONTACT</a>
<div style="left:-767px;">
<ul>
<li class="oe_heading">Lipsum/li>
<li><a href="#">Lipsum</a></li>
<li><a href="#">Lipsum</a></li>
</ul>
</div>
</li>
</ul>
</div>
-
Lipsum
Lipsum
Lipsum
Lipsum
Lipsum
Lipsum
Lipsum/li>
性能消耗可能在dom遍历on事件中。众所周知,Ie8在遍历dom方面非常慢
解决此问题的一种方法是像这样预遍历和缓存结果:
$(function () {
var $oe_menu = $('#oe_menu');
var $oe_menu_items = $oe_menu.children('li');
var $oe_overlay = $('#oe_overlay');
$oe_menu_items.each(function(){
var $this = $(this);
$this.data('div-children', $this.children('div'));
});
$oe_menu_items.bind('mouseenter', function () {
var $this = $(this);
$this.addClass('slided selected');
$this.data('div-children').css('z-index', '9999').stop(true, true).slideDown(300, function () {
$oe_menu_items.not('.slided').data('div-children').hide();
$this.removeClass('slided');
});
}).bind('mouseleave', function () {
var $this = $(this);
$this.removeClass('selected').data('div-children').css('z-index', '1');
});
$oe_menu.bind('mouseenter', function () {
var $this = $(this);
$this.addClass('hovered');
}).bind('mouseleave', function () {
var $this = $(this);
$this.removeClass('hovered');
$oe_menu_items.children('div').hide();
})
});
尝试使用或。将其重新标记到jQuery可能会让您获得更多的曝光。根据我的经验,IE(特别是8)比其他浏览器更难处理事件。当您尝试附加太多事件时,它会变得非常缓慢。你们有多少菜单项?我忘了提。。。IE是cr*p(请原谅我的语言)不是故意的吗?我一直认为IE是为了惹恼开发人员而构建的,所以…=))bamic01,请停止使用答案作为发表意见的地方。(全部)。简单的解决方法:让他们安装并将
meta标记添加到您的页面中。No 1.4.3应该可以,但升级可能不会有什么坏处:)嗨,Martin,我现在更新了.js文件。但它仍然很慢,我发布的jQuery1.5链接很快就会出来。你最好等一下。马丁,你看到我贴的链接了吗?你觉得为什么这么慢?可能是错误的css代码?或者是js?我查看了你的网站,并通过dynatrace运行了它-似乎你的问题是渲染而不是js-据我所知ie8根本无法快速渲染标记以使其顺利运行。仍然没有线索,我没有那么熟练。我的老师告诉我这个网站是因为有很多人支持。
$(function () {
var $oe_menu = $('#oe_menu');
var $oe_menu_items = $oe_menu.children('li');
var $oe_overlay = $('#oe_overlay');
$oe_menu_items.each(function(){
var $this = $(this);
$this.data('div-children', $this.children('div'));
});
$oe_menu_items.bind('mouseenter', function () {
var $this = $(this);
$this.addClass('slided selected');
$this.data('div-children').css('z-index', '9999').stop(true, true).slideDown(300, function () {
$oe_menu_items.not('.slided').data('div-children').hide();
$this.removeClass('slided');
});
}).bind('mouseleave', function () {
var $this = $(this);
$this.removeClass('selected').data('div-children').css('z-index', '1');
});
$oe_menu.bind('mouseenter', function () {
var $this = $(this);
$this.addClass('hovered');
}).bind('mouseleave', function () {
var $this = $(this);
$this.removeClass('hovered');
$oe_menu_items.children('div').hide();
})
});