通常のページ内リンク(<a href="#anchor"></a>
)と、
別ページのアンカーリンク(<a href="/hoge/fuga/#anchor"></a>
)の両方があり、
どちらもスムーススクロールを適用したいのですが、
$('a[href*="#"]').on("click",function(){.....})
と書いたところ
通常のページ内リンクにしか効いていない状態でした。
a[href*="#"]
とすれば「#を含む」と判定されそうなものですが、
なぜ効かないのでしょう…?
---追記---
HTML
1<!-- 現在のページは/hoge/fuga/index.htmlという前提 --> 2(1)<a href="/hoge/hage/#anchor">別ページのアンカーへリンク</a> 3(2)<a href="#anchor">普通のページ内リンク</a> 4(3)<a href="/hoge/fuga/#anchor">自分自身へのパス付きアンカーリンク</a>
javaScript
1$(function(){ 2 //別ページのアンカーに遷移した時 3 var urlHash = location.hash; 4 if(urlHash) { 5 var w = $(window).width(); 6 $('body,html').stop().scrollTop(0); 7 setTimeout(function(){ 8 var target = $(urlHash); 9 if(w >= 768){ 10 var position = target.offset().top-200; 11 }else{ 12 var position = target.offset().top-50; 13 } 14 $('body,html').stop().animate({scrollTop:position}, 500); 15 }, 100); 16 } 17 //自分のページのアンカーに遷移した時 18 $('a[href*="#"]').on("click",function(){ 19 w = $(window).width(); 20 var h_sp = $('.header').height(); 21 var h_pc = $('.site-header').height(); 22 var href= $(this).attr("href"); 23 var target = $(href); 24 if(w >= 768){ 25 var position = target.offset().top-h_pc; 26 }else{ 27 var position = target.offset().top-h_sp; 28 } 29 $('body,html').stop().animate({scrollTop:position}, 500); 30 }); 31});
HTML(ダミー)とJSを追記しました。
HTMLには(1)〜(3)の3パターンのアンカーリンクが存在しており、その全てにSmoothScrollを適用したいのですが、
現状(1)(2)は問題なく適用されますが、(3)はSmoothScrollが適用されず、ただの遷移として動作してしまいます。
通常のページ内リンクにおけるSmoothScrollはセレクタを$('a[href^="#"]')
として「#で始まっているhref属性を持つa要素」を対象としていますので、パス付きアンカーにも適用させようと思って$('a[href*="#"]')
として「#を含んでいるhref属性を持つa要素」を対象にしてページ内リンクしたらなー、と思ったのですが駄目のようです。
(3)のパターンでSmoothScrollを適用するにはどうしたらいいのか分からず困っております。
どなたかお知恵をお貸しいただけないでしょうか?
---追記2---
すみません、イベント発生状況を調べていたら、(3)のパターンではそもそも記述したJSのイベントが全く発生していませんでした。。
で、よく考えたら(3)のパターンのアンカーリンクが存在する箇所はjQueryでHTMLをインクルードしている箇所でした。。
なので上記スムーススクロールを関数化して、インクルードファイルを読み込むところで
javaScript
1$('#menu').load('/common/include/menu.html',function(){ 2 smoothScroll(); 3});
のようにしてみたのですが、クリックイベントは取得できますがやはりスムーススクロールは適用されず、普通の遷移としてしか動かないという状況でした。

回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/14 00:56
2018/09/14 01:02
2018/09/14 01:14
2018/09/14 01:17
2018/09/14 01:20