質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2856閲覧

Barba.jsとjQueryのスムーズスクロールが併用できません。

Bokoko33

総合スコア6

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2020/02/02 09:48

編集2020/02/03 04:00

Barba.jsを使ったwebページを作成中なのですが、jQueryを用いたヘッダーメニューからのスムーズスクロールが上手く機能しません。

ヘッダーメニューは本来、

html

1<header> 2 <ul> 3 <li><a href="#section1">section1</a></li> 4 <li><a href="#section2">section2</a></li> 5 <li><a href="#section3">section3</a></li> 6 </ul> 7</header>

のように記述したいのですが、
Barba.jsによる遷移でヘッダー以外のコンテナを差し替えた場合、ヘッダーはそのままなのでヘッダーメニューから前のHTMLに戻ることができなくなってしまいます。よって現在、ヘッダーメニューを

HTML

1<header> 2 <ul> 3 <li><a href="index.html#section1">section1</a></li> 4 <li><a href="index.html#section2">section2</a></li> 5 <li><a href="index.html#section3">section3</a></li> 6 </ul> 7</header>

のように書いてそれを解決しています。
ただ、これだとスムーズスクロールが機能しなくなってしまいます。

上手く二つを共存させたいのですが、方法が見つかりません。
解決方法があれば教えていただきたいです。

ちなみにjQueryでのスムーズスクロールは以下のように記述しています。

js

1$(function(){ 2 $('a[href^=#]').click(function(){ 3 var adjust = 0; 4 var speed = 400; 5 var href= $(this).attr("href"); 6 var target = $(href == "#" || href == "" ? 'html' : href); 7 var position = target.offset().top + adjust; 8 $('body,html').animate({scrollTop:position}, speed, 'swing'); 9 return false; 10 }); 11 12 });

長く拙い文章になってしまいましたが、よろしくお願いします。

2019/02/03 追記
ページの構成ですが、トップページに3つのセクションがあり、ヘッダーメニューをクリックして任意のセクションにページ内移動(この部分にスムーススクロールを使いたい)、
セクション内の画像をクリックで別ページに移動(この部分がPjax遷移)という構成になっています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

x_x

2020/02/03 02:00

実際に遷移したあとのことですか? Pjax で書き換える前にスムーズスクロールしたいということですか? 両方なのでしょうか? https://teratail.com/questions/98715
Bokoko33

2020/02/03 04:03

コメントありがとうございます。ページ構成について追記いたしました。 スムーススクロールしたいのはトップページ内のセクション移動のみで、セクション内の画像をクリックするとPjaxで遷移するという想定です。
x_x

2020/02/03 04:20

「ヘッダーはそのまま」であるため、Pjax 後にクリックしたときの遷移ではスムーズスクロールしなくてもよいということでいいでしょうか?
Bokoko33

2020/02/03 04:26

そうですね、「遷移してスムーススクロール」がしたいわけではないです! わかりにくくてすみません、、
guest

回答1

0

ベストアンサー

JavaScript

1 $(document).on('click', 'a[href*="#"]', function(event) { 2 var anchor = event.currentTarget; 3 if (anchor.target !== '' && anchor.target !== window.name) { 4 return true; 5 } 6 7 var documentUrl = location.origin + location.pathname + location.search; 8 var anchorUrl = anchor.protocol + '//' + anchor.host + anchor.pathname + anchor.search; 9 if (documentUrl !== anchorUrl) { 10 return true; 11 } 12 13 if (anchor.hash !== '') { 14 var adjust = 0; 15 var speed = 400; 16 var position = $(anchor.hash).offset().top + adjust; 17 $('body,html').animate({ scrollTop: position }, speed, 'swing'); 18 event.preventDefault(); 19 return false; 20 } 21 });

関連: https://teratail.com/questions/232115

投稿2020/02/06 07:33

x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Bokoko33

2020/02/06 13:05

回答ありがとうございます。 まさにやりたいことを実装していただいて感動いたしました。本当にありがとうございます。 ただ、最初に飛んだセクションにそれ以降飛べなくなるようです。 かなりヒントをいただいたのでそちらは自力で解決に挑みたいと思います。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問