理解平滑滚动脚本的代码

时间:2016-05-05 11:24:34

标签: javascript jquery html

我正在学习jquery并找到了一个用于在点击上平滑滚动的脚本,这非常有效,但我不理解它,我想了解代码以及它为什么会这样做:

$(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
        }, 1000);
        return false;
      }
    }
  });
});

首先我明白它开始于:
$('a[href*="#"]:not([href="#"])').click()
这就是每当你点击某个带有href链接的东西时,#'#'

然后

if(location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname)

我不知道那是什么

这两个:

var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) 

什么是" .hash"?那'怎么样?'?和':'?

其余的我得到了它。

谢谢!

1 个答案:

答案 0 :(得分:1)

hash#后面的字符串。因此,在网址index.html#path中,哈希将为pathpathname检查它是否在相同的原始主机名和页面下,因此它是一个指向同一页面并将滚动的URL,如果它是另一个页面,则滚动没有任何意义。

三元运算符与if()语句类似,但简写如下:

var a = (b == 1) ? "b equal one" : "b not equal one";

它与:

相同
var a;
if(b == 1) {
   a = "b equal one";
}  else {
   a = "b not equal one";
}