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

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

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

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

jQuery

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

Q&A

解決済

1回答

665閲覧

スクロールバーの動きについて(イベントが何度も処理させたい

takamelon

総合スコア3

JavaScript

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

jQuery

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

0グッド

1クリップ

投稿2023/01/27 13:29

javascript・jQueryに関して質問させていただきます。

スクロールバーの下向きボタンを1度押したときに、
その時点の位置を取得して、それに100加えた値をセットして
画面表示させて処理を終了させるということを考えています。

いったん下記のように組んでみたのですが、
画面上で動作させると、下向きに動く距離が一定でなく、
なぜかと思い、開発者ツールで試したところ、
イベントを繰り返し実行しているようでした。

$(function () {
$('#MainCotent_aaa').scroll(function () {
//①$(this).scrollTop()で位置を取得
//②上記で取得した値に100を加えて、その値で位置をセット
});
});

.scroll(functionは、スクロールが動いている間はずっと
処理が行われる、というようなことが調べたら判明したので
イベントの前にフラグを作成して、下記のように作り直しました。

$(function () {
var endFlg = false;
$('#MainCotent_aaa').scroll(function () {
if (!endFlg) {
//①$(this).scrollTop()で位置を取得
//②上記で取得した値に100を加えて、その値で位置をセット
endFlg = true;
}
});
});

こうすることで、1回目に下向きボタンを押したときは、
意図する動きをすることが確認できたのですが、その状態
(1回押したあとなので、表示領域が最初から100下方向にずれている)
から再度ボタンを押すと何も反応しませんでした。
開発者ツールで確認したところ、endFlgが既にtrueとなっていて、
処理が何も起きないことがわかりました。

このような場合にどのように対応すれば、押すたびに100ずつ下方向に
ずれていく処理が実現できるのでしょうか?
書き方がわからないので、ご教示お願い致します。
宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

他にいい方法があるかもしれませんが、一応以下のコードでできました。
(動きがわかりやすいように100pxではなく、400pxの移動にしています)

javascript

1$(function() { 2 scrollCertainDistance(400); // 一回だけスクロールで400px動かすイベントを設定 3 4 function scrollCertainDistance(pixel) { 5 $('.container').one('scroll', function() { // 一回だけスクロールイベント設定 6 $(this).scrollTop($(this).scrollTop() + pixel); 7 setTimeout(function() {scrollCertainDistance(pixel)}, 500); // 0.5秒後に一回だけのスクロールイベントを設定 8 }); 9 } 10});

ちなみに関数内で自分自身の関数を呼び出す関数を「再帰関数」と呼ぶそうです。
今回はその再帰関数にしてみました。

投稿2023/01/27 14:50

編集2023/01/27 14:55
Cocode

総合スコア2314

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

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

takamelon

2023/01/27 15:47

回答ありがとうございます。ご提示いただいたコードで実現できることが確認できました。再帰関数というのは知らなかったので、助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問