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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

Q&A

解決済

2回答

1369閲覧

textareaフォーカス時に画面回転するとフォーカスを外す

harapara

総合スコア39

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

0グッド

0クリップ

投稿2020/04/01 11:21

スマホ、タブレット限定なのですが
textareaをフォーカスしている時に画面回転するとフォーカスが外れて、キーボードが消えるようにしたいです。
フォーカス → 縦横判断 → 回転検知 → ブラーというふうに考え下記のように実装したのですが
最初の回転しかうまくいきません。
解決方法ございましたら、ぜひ教えてください。

-実装方法
縦横の判断にはscreen.orientation.angleを使用し
フォーカス時に毎回角度を確認し、回転したあとの角度と比較しています。

ーエラー
コンソルを見るとline6とline9の数値が違います。
line6は毎回フォーカスされる度の角度を取っているようですが、line9は初期の角度を取っている気がします。

※Androidなのでキーボード出現により、毎回リサイズ扱いになります。

html

1<textarea id="textarea"></textarea>

js

11 var textarea_focus = document.getElementById('textarea'); 22 textarea_focus.addEventListener('focus',focusTextarea); 33 44 function focusTextarea(){ 55 let defalt_screen_angle = screen.orientation.angle; 66 console.log(defalt_screen_angle); 77 88 window.addEventListener('resize',()=>{  //フォーカス時に回転 99 console.log(defalt_screen_angle); 1010 console.log(screen.orientation.angle); 1111 if (!(screen.orientation.angle === defalt_screen_angle)) { 1212 textarea_focus.blur(); 1313 } 1414 }); 1515 };

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

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

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

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

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

kei344

2020/04/02 14:15

まだ質問が「受付中」になっていますが、どのように解決したのかを回答文に書き、「解決済」にされてはいかがでしょうか。
harapara

2020/04/03 01:48

エラーの謎が解けていなかったので回答者の方の返信待っていました。 すぐに来ていたようですが、何故か返信の通知が来なかったので、全く気付かず。。 kei344さんからの通知で気付けました。ありがとうございます。
guest

回答2

0

resize イベントと orientationchange イベントとを分離し、
変数宣言 let defalt_screen_angle をグローバルスコープで行う実装にしてはいかがでしょう。

イベント発生の条件が異なる場合、グローバルスコープなど、イベントリスナの外で値を保持するとうまく行きます。

例えるなら、マウスイベントですが、丁度、こちらで回答させていただいたことがあります。

投稿2020/04/01 22:35

AkitoshiManabe

総合スコア5432

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

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

harapara

2020/04/02 03:01 編集

コメントありがとうございます! グローバルスコープだと、読み込み後の値をずっと保持という認識なのですが 回転されても値は変わってくれないのではないでしょうか。 フォーカスされた時の角度とその後の回転による角度の比較をしたかったので 縦0°(フォーカス時)→横90°(回転後)とし、その後横90°(フォーカス時)→縦0°(回転後)ということもあるので フォーカス時の角度もその都度、更新されていきたいです。 orientationchangeというイベント調べました。 長々とコード書いていましたが、 window.addEventListener("orientationchange", function() { textarea_focus.blur(); }); これで解決しました! ありがとうございます!
AkitoshiManabe

2020/04/02 04:01

> グローバルスコープだと、読み込み後の値をずっと保持という認識 そのとおりです。書き換わるのであれば、default_ という文字の無い命名が分かりやすいと思います。 > これで解決しました! ご自身でお調べになっての解決ですので、コメント後半部分は自己解決を投稿されると良いでしょう。
harapara

2020/04/03 01:58

ほぼ答えをいただいた状況ですがこちらで解決法更新しました!お力添えありがとうございます! 解決はしたのですが、 「書き換わるのであれば、default_ という文字の無い命名が分かりやすい」というのが 私の浅い知識では理解できず、、 検索ワードのみでも教えていただければ自身で調べますので、よろしければお願いいたします!
AkitoshiManabe

2020/04/03 02:08

default は 何もしないときに設定される「固定された値」を印象付ける語ですので、あとから考えるなら アンダースコア(__) をプレフィックスしておくとかですね。
harapara

2020/04/08 01:04

すみません 通知が来ず、ご返信に今気付きました、、 何もしないときに設定される「固定された値」調べてみます! ありがとうございます。
guest

0

自己解決

回答者の方のおかげで
以下のようにシンプルで解決いたしました。

js

1var textarea_focus = document.getElementById('textarea'); 2window.addEventListener("orientationchange", function() { 3 textarea_focus.blur(); 4});

投稿2020/04/03 01:52

harapara

総合スコア39

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問