javascript - ScrollTop 闪烁 - Internet Explorer

标签 javascript jquery internet-explorer scrolltop

我的公司要求我调查以下页面上的问题 http://waxy.cloudtelephones.co.uk/departments/#voice在 Internet Explorer 中查看时(肯定是 IE9,我认为它会影响 7-10)。

问题如下 - 单击页面上的任何主要链接时(“部分”菜单 - 语音、连接、云、移动或每个部分中的子菜单 - 调用和线路、托管 VoIP、ISD。 ., 等)jquery 被触发以显示相关部分,在 Chrome、FF 和 Safari 中一切正常,但在 IE 中,窗口会在运行 ScrollTop 命令之前暂时闪烁以锚定标记。

下面提供了 Javascript 代码示例,如有任何帮助,我们将不胜感激。

//hash control
if(window.location.hash) {
    var hash = window.location.hash.substring(1);
    var selected = "." + hash;
    var parents = [ "voice", "mobile", "cloud-services", "connectivity"];
if ($.inArray(hash, parents) != -1) {
    $('html, body').animate({"scrollTop":"0"});
    $(selected).show();
    $('#buttom-nav ul li#' + hash).addClass('selected');
    $(selected + " aside.sub-menu").slideDown('slow');
    $(selected + " .child-menu li:first").addClass('selected');
        $(selected + " .child-page:first").delay(1000).fadeIn('slow');
};
if ($.inArray(hash, parents) == -1) {
    var parent = $(selected).closest('.dptmnts').attr('class').split(' ')[2];
    $('html, body').animate({"scrollTop":"0"});
    $(selected).closest('.dptmnts').show();
    $('.child-menu li#' + hash).addClass('selected');
    $('#buttom-nav ul li#' + parent).addClass('selected');
    $(selected).siblings('aside.sub-menu').slideDown('slow');
        $(selected).fadeIn('slow').delay(1000).fadeIn('slow');
};
};

    //hash change control
$(window).bind('hashchange', function () {
    var hash = window.location.hash.substring(1);
var selected = "." + hash;
var parents = [ "voice", "mobile", "cloud-services", "connectivity"];
if ($.inArray(hash, parents) != -1) {
    $(document).scrollTop(0);
    $("aside.sub-menu:visible").slideUp('fast');
    $(".child-page:visible").fadeOut('fast');
    $(".dptmnts:visible").delay(1000).hide('fast');
    $('#buttom-nav ul li').removeClass('selected');
    $('.child-menu li').removeClass('selected');
    $('.child-menu li#' + hash).addClass('selected');
    $(selected).fadeIn('fast');
    $('#buttom-nav ul li#' + hash).addClass('selected');
    $(selected + " aside.sub-menu").delay(500).slideDown('slow');
    $(selected + " .child-menu li:first").addClass('selected');
        $(selected + " .child-page:first").delay(500).fadeIn('slow');
};
if ($.inArray(hash, parents) == -1) {
    var parent = $(selected).closest('.dptmnts').attr('class').split(' ')[2];
    $(document).scrollTop(0);
    $(".child-page:visible").fadeOut('fast');
    $('.child-menu li').removeClass('selected');
    $('.child-menu li#' + hash).addClass('selected');
        $(selected).delay(500).fadeIn('slow');
};
});

$( ".page-departments #content a" ).not('.pop-up').click(function(event) {
event.preventDefault()
window.location.hash = this.hash;
$(document).scrollTop(0);
return false;
});

最后一件事 - 我认为问题可能是两个哈希事件(加载和更改)之间的冲突以及所有调用 scrollTop 的点击函数但是我已经尝试完全删除点击函数而不是解决问题它使相同的“闪烁”出现在 Chrome、FF 和 Safari 中!

最佳答案

$(window).bind('hashchange', function (e) {
  e.preventDefault();
  // rest of your code

阻止hashchange事件的默认 Action 。
请记住还要将 e 参数添加到函数中。

关于javascript - ScrollTop 闪烁 - Internet Explorer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20197033/

相关文章:

javascript - 计算单个球体的位置以创建一个由球体组成的球体

javascript - CSS 使用 css 类和 javascript 查找父级的 sibling

javascript - 更改窗口滚动的下拉菜单

javascript - 当我尝试获取特定 div 时,为什么我的 .load() 不起作用

jquery - 在窗口加载时逐渐淡入元素

internet-explorer - IE中div的内阴影

php - 在 php 中实时记录表之间的移动

javascript - Django - 使用 Ajax 时 POST 方法错误 "POST/......./HTTP/1.1"405 0

css - 如何解决 IE 中鼠标未悬停在图像上时不显示边框的问题

javascript - 使用 jQuery 即时创建复选框元素 - 奇怪的 IE 行为