Javascript更改窗口大小

时间:2014-08-26 08:45:41

标签: javascript jquery html resize scroll

我试图在窗口调整大小时更改我的javascript,但似乎无法让它工作。我想要的唯一区别是当窗口小于768px时,offset()。top从-90变为-60。

这是我到目前为止所做的:

$(function() {
  $('a[href*=#]:not([href=#])').click(function() {
    if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
      var target = $(this.hash);
      target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
      if (target.length) {
        $('html,body').animate({
          scrollTop: target.offset().top-90
        }, 1000);
        return false;
      }
    }
  });
});

$(window).resize(function(){
    if ($(window).width() <= 768){  
        $(function() {
          $('a[href*=#]:not([href=#])').click(function() {
            if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
              var target = $(this.hash);
              target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
              if (target.length) {
                $('html,body').animate({
                  scrollTop: target.offset().top-60
                }, 1000);
                return false;
              }
            }
          });
        });
    }   
});

任何建议真的很棒!

谢谢

1 个答案:

答案 0 :(得分:1)

每次运行js时,第一个单击事件处理程序$('a[href*=#]:not([href=#])').click都会绑定。

在调整大小时,您附加第二个处理程序以单击事件 - 它不会覆盖第一个 - 因此为一个事件附加了两个事件处理程序。 我想你首先要像$('a[href*=#]:not([href=#])').off('click');那样在窗口调整大小时取消绑定第一个事件处理程序然后附加第二个事件处理程序。

但是因为你只改变了一小段代码而不是写:

    $(function() {   $('a[href*=#]:not([href=#])').click(function() {
        if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
          var target = $(this.hash);
          target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
          if (target.length) {
            $('html,body').animate({
              scrollTop: target.offset().top - ( ($(window).width() <= 768) ? 60 : 90)
            }, 1000);
            return false;
          }
        }   
        }); 
    });

请注意scrollTop行