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

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

新規登録して質問してみよう
ただいま回答率
85.35%
スクロール

スクロールとは、ディスプレイスクリーン上において連続的にコンテンツが滑っていくことを指します。

jQuery

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

HTML

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

Q&A

1回答

1381閲覧

お知恵をお貸しください。スマホ閲覧時、フッター手前でボタンが止まる処理について

jal0994

総合スコア20

スクロール

スクロールとは、ディスプレイスクリーン上において連続的にコンテンツが滑っていくことを指します。

jQuery

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

HTML

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

0グッド

0クリップ

投稿2021/06/02 16:49

編集2021/06/02 19:23

https://ss-complex.com/work_top_back_button/
上記ページのフッター手前で止まるボタンについてですが、
コードを使用すると、PCであれば問題ない挙動なのですが、スマホで下にスクロールしていくとフッターの要素と少し被った状態に一瞬なってからフッターの上に表示されるという不自然な動きになります。

原因としてはブラウザのアドレスバーが表示されている影響で不自然な動きになります。

具体的な原因としては下にスクロールしていくと、ブラウザのアドレスバーは非表示になるのですが、$(window).height() で取得している高さが、アドレスバーが表示されている状態の高さを取得しているため
フッターにボタンが少し被った状態に一瞬なります。

なので、下にスクロールしていくときにアドレスバーが非表示になるので、アドレスバーが非表示の状態の高さを$(window).height()で取得できれば問題なく表示されます。

ただ、逆にフッター部分までスクロール後上にスクロールする時は、アドレスバーが表示されるので上に戻る時はアドレスバーが表示された状態の高さを取得できるようにしたいとゆう状況です。

上述の処置をJQueryで一番簡単にできる方法はありますでしょうか。
お知恵をお貸しいただけますと幸いです。

宜しくお願いいたします。

<既存のソースコード>
scrollHeight = $(document).height(); //ドキュメントの高さ
scrollPosition = $(window).height() + $(window).scrollTop(); //現在地
footHeight = $("footer").innerHeight(); //footerの高さ(=止めたい位置)
if ( scrollHeight - scrollPosition <= footHeight ) { //ドキュメントの高さと現在地の差がfooterの高さ以下になったら
$("#topBtn").css({
"position":"absolute", //pisitionをabsolute(親:wrapperからの絶対値)に変更
"bottom": footHeight + 20 //下からfooterの高さ + 20px上げた位置に配置
});
} else { //それ以外の場合は
$("#topBtn").css({
"position":"fixed", //固定表示
"bottom": "20px" //下から20px上げた位置に
});
}
});

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

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

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

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

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

guest

回答1

0

$(window).height() の代わりに window.innerHeight を使ってみてはどうでしょうか?

投稿2021/06/02 17:09

lohn

総合スコア93

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

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

jal0994

2021/06/02 17:46

ご回答ありがとうございます。 window.innerHeightやouterHeightなどでも試したのですが、アドレスバーが表示されている高さを取得します。 併せて、今回は下記のとおり下にスクロールする時と上にスクロールする時で、アドレスバー表示有無に応じて、取得する高さを区別できるコードを実装したいと考えております。 ーーーーーーーーーーーーーーー なので、下にスクロールしていくときにアドレスバーが非表示になるので、アドレスバーが非表示の状態の高さを$(window).height()で取得できれば問題なく表示されます。 ただ、逆にフッター部分までスクロール後上にスクロールする時は、アドレスバーが表示されるので上に戻る時はアドレスバーが表示された状態の高さを取得できるようにしたいとゆう状況です。 ーーーーーーーーーーーーーーー
lohn

2021/06/02 18:02

本来window.innerHeightはアドレスバー表示の有無でサイズが変わるのですが、その値を実際に取得・デバッグ用に表示等はしてみましたか? また変わらないという場合、その環境も併せてご記載ください。
jal0994

2021/06/02 19:15

ご回答ありがとうございます。 実際に実機で確認しても取得できておらず、フッターの要素と少し被った状態に一瞬なってからフッターの上に表示されます。 検証した端末はiPhone7とAndoroido9のAQUOSです。
lohn

2021/06/03 00:51

うーん、それは「値はわざわざ見ていないが、動作は同じだった」という意味でしょうか。
jal0994

2021/06/03 00:59

ご回答ありがとうございます。 値も見ております。そうのうえで動作も同じということです。
lohn

2021/06/03 03:03

アドレスバー表示の有無でのサイズではなく、別の問題かなと思いましたが、 window.innerHeightで値が変わらない、とおっしゃるなら諦められたほうが良いかなと思います。 端末固有のバグを踏んでいるかもしれませんし。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問