2017-08-16 11 views
0

現在のページ上のアンカーに解決されるすべてのリンクに対して滑らかなスクロールを追加するスクリプトを作成しようとしています。このジェネリックを一般的なものにしようとすると、サイト全体で機能します。ページアンカーリンク内のすべてのスムーズスクロールを追加する方法

var links = document.querySelectorAll('a') 
var anchorLinks = [] 

for (var i = 0; i < links.length; i += 1) { 
    console.log(links[i].href, window.location.href) 
} 

私のスタートだが、私は挑戦に実行している、と私は誰がjQueryのなしでこれを行うのかどうかを確認するためにStackOverflowの上で手を差し伸べますよ。

hrefが#であるかどうかを確認する必要がありますが、他のサイトでも#を使用しているため、現在のURLがhrefと一致するかどうかを確認する必要があります。

そうでしょうか?あるいは私は何か他のものを逃していますか

+1

。これらのすべてが同等なく、セレクタにより、同一ではない、で、あなたは常にすることができますあなたのウェブサイトが大文字と小文字を区別しないパスを持っているかどうかをチェックするときに、リンクhrefとページhrefの両方に 'toLowerCase()'を追加することを確認してください – jlynch630

+0

[this pen](https: /codepen.io/rleve/pen/iCbgy)これを少し変更してより一般的なものにしました。これはあなたのすべての要件を処理するとは思わないが、ここでは[Fiddle](https://jsfiddle.net/kr71730y/ 2 /)とにかく –

答えて

1

要約すると、Location objectを参照してください。

これを試してみてください:

var links = document.querySelectorAll('a') 
var anchorLinks = [].filter.call(links,a=>(
    a.host==window.location.host&& 
    a.pathname==window.location.pathname&& 
    a.search==window.location.search&& 
    a.hash!=window.location.hash)) 

それを行うための別の方法は実際にあります:

var locwohash = window.location.href.replace(/#.+/, "") 
var anchorLinks = document.querySelectorAll('a[href^="'+locwohash+'"],a[href^="#"]') 

は速くなるはずですが、リンクのhrefの異なる種類に堅牢になりたい場合は複雑になります。 (http://example.com/path/to/page#hashのために、そこにこのページ内のアンカーにリンクする多くのhref、#another-hashpage#another-hashexample.com/path/to/page#another-hash/path/to/page#another-hash//example.com/path/to/page#another-hashhttp://example.com/path/to/page#another-hashは動作しなければならないこと

関連する問題