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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

955閲覧

アコーディオンの閉じるボタンを押した際、タイトル上部にスムーススクロールで移動させたい

Haru_CROSSHeart

総合スコア10

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2021/03/26 04:13

編集2021/03/26 04:15

ページ内に「さらに読む」のアコーディオンを設置し、クリックで開閉を操作しているのですが、アコーディオンを閉じる際にタイトルの上部にスムーススクロールで戻るような動きをつけたいと思っています。 色々試行錯誤してみたのですが、記述方法がわからず苦戦しています。 お知恵お貸しいただけましたら幸いです。

▼▼▼HTMLはこうなっている▼▼▼▼

HTML

1 2<div style="margin:60px 0">余白用</div> 3<section class="story inner" id="anc1"> 4<h2 class="sec-ttl">STORY</h2> 5<div class="story__desc"> 6<div class="story__txt"> 7テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキテキストテキストテキストテキストテキテキストテキストテキストテキストテキテキストテキストテキストテキストテキテキストテキストテキストテキストテキテキストテキストテキストテキストテキテキストテキストテキストテキストテキテキストテキストテキストテキストテキテキストテキストテキストテキストテキテキストテキストテキストテキストテキテキストテキストテキストテキストテキテキストテキストテキストテキストテキテキストテキストテキストテキストテキテキストテキストテキストテキストテキテキストテキストテキストテキストテキテキストテキストテキストテキストテキテキストテキストテキストテキストテキテキストテキストテキストテキストテキテキストテキストテキストテキストテキテキストテキストテキストテキストテキテキストテキストテキストテキストテキテキストテキストテキストテキストテキ 8<p class="story-read-bg story-read-ps"><span class="story-read">さらに見る</span></p> 9</div> 10</div> 11</section> 12<div style="margin:500px 0">余白用</div> 13<style> 14 .story{width:400px;margin:0 auto;} 15.story__desc{ 16 border: 4px solid #000; 17 padding: 40px 7% 30px; 18 margin: 0 auto; 19 position: relative; 20 height: 150px; 21 overflow: hidden; 22} 23.story__desc.more{ 24 height: auto; 25} 26.story-read-bg{ 27 background: rgba(0, 0, 0, 0) linear-gradient(180deg, rgba(255, 255, 255, 0.5), white) repeat scroll 0 0; 28 text-align: center; 29} 30.story-read-ps{ 31 width: 100%; 32 height: 70px; 33 position: absolute; 34 bottom: 0px; 35 left: 0; 36} 37.story-read img{ 38 width: 100px; 39} 40.story-read img:hover{ 41 cursor: pointer; 42} 43.btn{ 44 text-align: center; 45 border: 3px solid #000; 46 width: 120px; 47 margin: 40px auto 0; 48} 49.btn a{ 50 display: block; 51 padding: 10px 0px 8px; 52 font-weight: bold; 53} 54.story-read{ 55 background:red; 56 padding:10px; 57 color:#fff; 58 font-weight: bold; 59} 60</style> 61 62<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> 63<script> 64$( function() { 65 $( '.story__desc' ).each( function() { 66 var height = $( this ).find( '.story__txt' ).height(); 67 $( ".story-read" ).on( 'click', function() { 68 if ( $( this ).hasClass( 'active' ) ) { 69 $( '.story__desc' ).stop().animate( { 'height': '150px' }, 'slow' ); 70 } else { 71 $( '.story__desc' ).stop().animate( { 'height': height + 'px' }, 'slow' ); 72 } 73 $( this ).toggleClass( 'active' ); 74 } ); 75 } ); 76} ); 77 78</script> 79 80 81</body> 82</html>

上部に記載してある

<section class="story inner" id="anc1"> にID指定をし、aタグで飛ばす方法等色々模索してみたのですが、スムーススクロールを入れるとアコーディオンが閉じなくなったり、スムーススクロールが効かずにカクンと一気に動いたりし苦戦しております。

詳しい方お力貸していただけましたら幸いです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下はどうでしょうか。

js

1$( 'html' ).animate( { scrollTop: $('.sec-ttl').offset().top }, 'slow' );

参考:

In addition to style properties, some non-style properties such as scrollTop and scrollLeft, as well as custom properties, can be animated.

.animate() | jQuery API Documentation

投稿2021/03/26 07:28

編集2021/03/26 07:30
Lhankor_Mhy

総合スコア36158

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

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

Haru_CROSSHeart

2021/03/26 09:09 編集

ありがとうございます!! いただいた記述を入力したところ希望していた動きになりました。 こちらを複数設置した場合、直属のh2にスムーススクロールさせたい場合の記述方法がわかれば教えていただきたいです。 <script> $( function() { $( '.story__desc' ).each( function() { var height = $( this ).children( '.story__txt' ).height(); $( this ).find( ".story-read" ).on( 'click', function() { if ( $( this ).hasClass( 'active' ) ) { $( this ).parents( '.story__desc' ).stop().animate( { 'height': '150px' }, 'slow' ); $( 'html' ).animate( { scrollTop: $('.sec-ttl').offset().top }, 'slow' ); } else { $( this ).parents( '.story__desc' ).stop().animate( { 'height': height + 'px' }, 'slow' ); } $( this ).toggleClass( 'active' ); } ); } ); } ); </script>
Lhankor_Mhy

2021/03/26 09:03

全く試していませんが、 $('.sec-ttl', this).offset().top とかでしょうか?
Haru_CROSSHeart

2021/03/26 09:04

ありがとうございます! 試してみます!
Lhankor_Mhy

2021/03/26 09:05

$( this ).prev().offset().top かも……?
Haru_CROSSHeart

2021/03/26 09:05

ダメでした。 もう少し探ってみます!
Haru_CROSSHeart

2021/03/26 09:06

ありがとうございます!やってみます。
Haru_CROSSHeart

2021/03/26 09:08

$( 'html' ).animate( { scrollTop: $( this ).prev().offset().top }, 'slow' ); と記述してみたのですがダメでした。
Lhankor_Mhy

2021/03/26 09:17

試してみましたが、そもそも、複数並べると「さらに見る」自体が動かなくないですか?
Haru_CROSSHeart

2021/03/26 09:23

複数動かすために記述を <script> $( function() { $( '.story__desc' ).each( function() { var height = $( this ).children( '.story__txt' ).height(); $( this ).find( ".story-read" ).on( 'click', function() { if ( $( this ).hasClass( 'active' ) ) { $( this ).parents( '.story__desc' ).stop().animate( { 'height': '150px' }, 'slow' ); $( 'html' ).animate( { scrollTop: $( this ).parents('.sec-ttl').offset().top }, 'slow' ); } else { $( this ).parents( '.story__desc' ).stop().animate( { 'height': height + 'px' }, 'slow' ); } $( this ).toggleClass( 'active' ); } ); } ); } ); </script> に変更して複数動くようにはなったのですが、スムースだけうまく動かず。。です。
Lhankor_Mhy

2021/03/26 09:31

なるほど。 では、こんな感じで。 $(function () { $('.story__desc').each(function () { var height = $(this).children('.story__txt').height(); var storyTitle = $(this).prev('.sec-ttl'); $(this).find(".story-read").on('click', function () { if ($(this).hasClass('active')) { $(this).parents('.story__desc').stop().animate({ 'height': '150px' }, 'slow'); $('html').animate({ scrollTop: storyTitle.offset().top }, 'slow'); } else { $(this).parents('.story__desc').stop().animate({ 'height': height + 'px' }, 'slow'); } $(this).toggleClass('active'); }); }); });
Haru_CROSSHeart

2021/03/26 09:36

ありがとうございます!!! 希望通りの動きですっ! ありがおとうございます。泣 varで宣言してセットしてあげるってことですね。 大変勉強になりました!。感謝申し上げます。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問