jQuery window.width 在 Firefox 中不起作用

jQuery window.width doesn't work in Firefox

适用于 Chrome 和 Safari,但不适用于 FF 43.0.2。 Firefox 忽略 'scrollTop': $target.offset().top -100 行并直接滚动到锚点。我对编程还很陌生,所以对代码结构的任何改进也表示赞赏。谢谢!

    $('a[href^="#"]').on('click',function(e) {
e.preventDefault();

var target = this.hash;
var $target = $(target);

if ($(window).width() < 769) {
    $('html, body').stop().animate({
        'scrollTop': $target.offset().top -100
    }, 700, 'swing', function () {
        window.location.hash = target;
    });
    // Dropdown Menu Logic
        $('#nav-icon').toggleClass('open');
        $('#nav-mobile ul').slideToggle();
    }
    else {
        $('html, body').stop().animate({
        'scrollTop': $target.offset().top -150
    }, 700, 'swing', function () {
        window.location.hash = target;
    });
    // Dropdown Menu Logic
        $('#nav-icon').toggleClass('open');
        $('#nav-mobile ul').slideToggle();
    }
}); 

代码工作正常,但是当您在动画结束后更改 window.location 时,Firefox "jumps" 到相应的锚点。这实际上是期望的行为。

为避免此问题,请改用 history.pushState 并在不受支持的浏览器上回退到 location.hash :)

if(history.pushState){
    history.pushState(null, null, target);
}else{
    location.hash = target;
}

一个例子:http://codepen.io/victmo/pen/dGNvay

干杯