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

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

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

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

Q&A

解決済

1回答

2994閲覧

jQuery スマホでのトップボタン スクロール上下方向の挙動について

kotori_00

総合スコア46

jQuery

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

0グッド

0クリップ

投稿2016/12/04 16:04

編集2016/12/06 09:16

###解決したいこと
トップページボタンのスクロールに上下方向でボタンが表示したり非表示にしたりするスクリプトを実装したのですが、パソコンのブラウザでは問題なく動作するのですがiPhoneのブラウザになると挙動が不安定になり、点滅のような状態になる場合があります。iPhoneブラウザで安定させて表示するようにするにはどうしたらよいでしょうか。

###jQuery

上へスクロールするとトップボタンが表示されます。(ただし500pxより小さくなると表示は消えるようにしています)
下へスクロールするとトップボタンが消えます。

<!--topボタンスクール上下の表示、非表示--> var topBtn = $('#top-btn'); topBtn.hide(); var startPos = 0; $(window).scroll(function(){ var currentPos = $(this).scrollTop(); if(currentPos > startPos){ topBtn.fadeOut(); } else { if($(window).scrollTop() < 500){ topBtn.fadeOut(); } else { topBtn.fadeIn(); } } startPos = currentPos; });

###追記(jQuery)

http://qiita.com/tonkotsuboy_com/items/d32ec6e7a1f6f592d415
上記のサイトにてiPhoneサファリでのios8のスクロールリサイズのキャンセルするコードを追加記述したのですが、iPhoneブラウザでのみうまく動作してくれません。トップボタンが点滅して挙動が不安定です。
上記の参考サイトで横幅、画面回転のときのみリサイズが対応するコード2つを試したのですがどちらも動作の状態は同じです。。
横幅のリサイズアラートはちゃんと動作してくれています。

おそらくこのiPhoneブラウザのスクロールリサイズが原因なのではないかと思うのですが、別の原因など考えられるところがあれば教えてください。

ちなみにサイトurlをのっけておきますので、iPhoneでどういう状態か確認できる方は見てみてください。
http://jikkyo-webdesigner.top/

<!--ウインドウの横幅を保持--> var currentWidth = window.innerWidth; window.addEventListener("resize", function() { if (currentWidth == window.innerWidth) { <!--ウインドウ横幅が変わっていないため処理をキャンセル。--> return; } <!--ウインドウ横幅が変わったのでリサイズと見なす。--> <!--横幅を更新--> currentWidth = window.innerWidth; alert("ウインドウがリサイズしました。"); });

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

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

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

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

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

guest

回答1

0

ベストアンサー

当方iPhone6sですが、「http://jikkyo-webdesigner.top/」では点滅、「http://qiita.com/tonkotsuboy_com/items/d32ec6e7a1f6f592d415 」ではアラート出ずで問題ありませんでした。
処理を見直されてはいかがでしょう。


追記

$(window).scroll(function(){ var currentPos = $(this).scrollTop(); if(currentPos > startPos){ topBtn.fadeOut(); } else { if($(window).scrollTop() < 500){ topBtn.fadeOut(); } else { topBtn.fadeIn(); } } startPos = currentPos; });

上記部分を変更したところ、スクロール量500未満時非表示、それ以外は点滅せず常時表示となりました。
単純なことですので一行ずつconsole.logで確認して頂ければ分かるかと。

まずは「点滅」という”動作”とはどうしたら出来るのかを考えてみてください。
それが分かればあとは調整だけかと思います。


追記

<!--topボタンスクール上下の表示、非表示--> var topBtn = $('#top-btn'); topBtn.hide(); var startPos = 0; $(window).scroll(function(){ var currentPos = $(this).scrollTop(); //スクロールした時 console.log(currentPos+' > '+startPos); //スクロールした時且つスクロール量が500の時:topBtn.fadeOut();としていた判定 console.log($(window).scrollTop()+' < 500'); if(currentPos > startPos || $(window).scrollTop() < 500){ topBtn.fadeOut(); } else { topBtn.fadeIn(); } startPos = currentPos; });

投稿2016/12/07 06:53

編集2016/12/19 00:39
nobinobi

総合スコア199

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

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

kotori_00

2016/12/18 14:35 編集

時間が経っての返信ですみません。 上記のコードを見直したのですがうまくいきませんでした。 <!--topボタンスクール上下の表示、非表示--> var topBtn = $('#top-btn'); topBtn.hide(); var startPos = 0; $(window).scroll(function(){ var currentPos = $(this).scrollTop(); if(currentPos > startPos || $(window).scrollTop() < 500){ topBtn.fadeOut(); } else { topBtn.fadeIn(); } startPos = currentPos; }); 上記のようにif文に||の論理演算子を使用してみたのですが、やはりiPhoneでは挙動が不安定で点滅が起こります。 どういったところを直せばiPhoneで安定して動作するでしょうか。 ちなみにiOS10でした。 console.logを使用しても表示されず動作の確認ができません。どうしたらconsole.logで表示されるようになりますか?(console.log(currentPos)など試したのですがブラウザに何も表示されません。) 代わりにalert();を使用してみたのですが、console.logとの動作確認と何か差があるのでしょうか。 初心者なものなので、わかりやすく教えていただけると嬉しいです。m(_ _)m コード内容訂正しました。
nobinobi

2016/12/19 00:29

まず、最初にお話しすべき点は「挙動が不安定」ということでなく、「記載頂いてるコードでの動き」ということです。 つまり、意図していらっしゃらない動きだとは思いますが、「書いた通りに動いている」ということです。 iphoneのみおかしいという事ではありません、ですので、コード実行の確実性に関してはご安心ください。 次に、if文の条件です。記載頂いているcurrentPos > startPos のコードの結果自体はconsole.logでご確認頂いていますでしょうか? また、topBtn.fadeIn();とtopBtn.fadeOut();の動きや実行すべきタイミング等は把握されていらっしゃいますでしょうか。 それらの点をご理解いただければkotori_00様のお力で解決できるかと。 まずは追記致しましたテストコードにて意図通りの結果となっているか数値をご確認下さい。 確認の際にはPCブラウザのデバックツール(開発ツール)がおすすめですが、スマホ画面に出力しても良いかもしれません。 http://www.htmq.com/js/document_write.shtml そして、もう一度ご自身のコードと確認した数値を見比べてみて下さい。 alertとconsole.logの差はデバックの手法としてはやり方であって、画面にダイアログで表示するかコンソール画面に出すかの違いしかありませんが、 コンソール画面ですといろいろと細かい情報が見れるので、私はconsole.logを利用することが多いです。 ただし、その時々ですのでキチンと使い分けされたいのであれば、お調べ頂いた方が良いと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問