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

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

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

SCSSは、SassのCSSメタ言語です。Webページのスタイルを指定するCSSを効率的に記述することができます。ネストと呼ばれる入れ子構造で記述するため、CSSの全体の記述量を減らせる点が特徴です。さらに変数も利用できるため、変更や修正の際に少ない作業量で対応することもできます。

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

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

Q&A

解決済

1回答

1457閲覧

CSS/JS「スクロールすると、線が左から横にのびる」動きについて

pobi

総合スコア1

SCSS

SCSSは、SassのCSSメタ言語です。Webページのスタイルを指定するCSSを効率的に記述することができます。ネストと呼ばれる入れ子構造で記述するため、CSSの全体の記述量を減らせる点が特徴です。さらに変数も利用できるため、変更や修正の際に少ない作業量で対応することもできます。

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

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

0グッド

0クリップ

投稿2023/07/12 21:46

実現したいこと

スクロールすると、H2の線が左から右にのびる

前提

HTML・CSS・JSで実装

発生している問題

「線が左から右にのびる」動きが一斉に行われてしまう。
スクロールで各エリアに画面に入ったときに動くようにしたい。

該当のソースコード

HTML=============================

<section class="p-top__vision"> <h2 class="p-top__vision-title js-scrollAnimation">VISION</h2> <p class="p-top__vision-description">テキストテキストテキスト</p> </section> <section class="p-top__service"> <h2 class="p-top__service-title js-scrollAnimation">SERVICE</h2> <p class="p-top__service-description">テキストテキストテキスト</p> </section>

SCSS=============================

.border { position: relative; width: 100%; } .border:before { content: ''; position: absolute; left: 0; bottom: 0; border-bottom: solid 2px #000; animation: border_anim 2s linear forwards; } @keyframes border_anim { 0% { width: 0%; } 100% { width: 100%; } }

JS=============================

var $target = $('.js-scrollAnimation'); var offset = 100; $(window).on('scroll', function () { var scroll = $(window).scrollTop(); var h = $(window).height(); $target.each(function () { var pos = $(this).offset().top; if (scroll > pos - h + offset) { $(this).addClass('border'); } }) }).trigger('scroll');

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

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

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

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

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

Lhankor_Mhy

2023/07/13 00:47

ご提示のコードを試してみましたが、画面内に入った時に「線が左から右にのびる」動きをしました。 つまり、問題が再現しませんでした。 なお、ご提示のコードそのままでは、開いたときにすでに画面内に入っているので、改行などを挟んで試しています。
guest

回答1

0

ベストアンサー

こんな感じですか?

javascript

1<style> 2section{ 3 height:120%; 4} 5.border { 6 position: relative; 7 width: 100%; 8} 9 10.border:before { 11 content: ''; 12 position: absolute; 13 left: 0; 14 bottom: 0; 15 border-bottom: solid 2px #000; 16 animation: border_anim 2s linear forwards; 17} 18 19@keyframes border_anim { 20 0% { 21 width: 0%; 22 } 23 100% { 24 width: 100%; 25 } 26} 27</style> 28<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> 29<script> 30const e_scroll = new CustomEvent("HTMLEvents"); 31e_scroll.initEvent('scroll', true, true ); 32window.addEventListener('DOMContentLoaded',()=>{ 33 window.dispatchEvent(e_scroll); 34}); 35window.addEventListener('scroll',()=>{ 36 const observer = new IntersectionObserver(changes=>{ 37 for (let change of changes) { 38 change.target.classList.toggle('border',change.intersectionRatio > 0); 39 } 40 }); 41 document.querySelectorAll('.js-scrollAnimation').forEach(target=>observer.observe(target)); 42}); 43</script> 44 45<section class="p-top__vision"> 46<h2 class="p-top__vision-title js-scrollAnimation">VISION</h2> 47<p class="p-top__vision-description">テキストテキストテキスト</p> 48</section> 49 50<section class="p-top__service"> 51<h2 class="p-top__service-title js-scrollAnimation">SERVICE</h2> 52<p class="p-top__service-description">テキストテキストテキスト</p> 53</section> 54 55<section class="p-top__service"> 56<h2 class="p-top__service-title js-scrollAnimation">TEST</h2> 57<p class="p-top__service-description">テキストテキストテキスト</p> 58</section>

投稿2023/07/13 00:46

yambejp

総合スコア117663

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

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

pobi

2023/07/13 02:36

ありがとうございます! 問題解消することができました!大変助かりました! もう1点お伺いしたいのですが、 スクロールイベントを1回だけにする記述を加えたいのですが、 教えていただくこと可能でしょうか?
yambejp

2023/07/13 02:53

一回引かれたborderは消さないということですね? change.target.classList.toggle('border',change.intersectionRatio > 0); の行を以下に変更してください if(change.intersectionRatio > 0) change.target.classList.add('border');
pobi

2023/07/13 03:02

早速ありがとうございます。 実装したかった動きができました・・・! 本当にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問