
ホームページを既に運用していますが、PCページ中心なので、これからスマホページを充実させようと考えています。
スマホを利用している閲覧者には、PCページから自動的にスマホページに移ってもらいたいので、画面の横幅の数値を取得して、指定のURLに移るようjQueryを使おうとしていますが、うまくいきません。
スマホの機種名などを利用した「ユーザーエージェント判定」では、難なくできました。
画面幅判定では、PCなどで幅を変えた時は、問題なく自動でURLが移りますが、読み込み時やスマホでは全く変わりません。つまりPCページのままです。
画面幅判定は、これからも何かと使うことがあるだろうし、何か基本的なことを見落としているのではないかと気になっています。
jsは、jQueryしかわかりませんし、かなりの初心者です。
ご指導頂ければ幸いです。
PCページに書き込む jQuery の一例です。
$(window).on('load resize', function(){
var width = $(window).width();
if(width <= 440) {
// ↑スマホの横幅を440px以下と設定
window.location.href = 'http://〇〇〇.htm';
// ↑自動で移したいスマホ専用ページです
}
});
色々調べて試してみたのですが、何度やっても読み込み時に移りません。
基本的なミスがあるのではないかと思い、質問させて頂きます。
どなたか教えて頂けないでしょうか。
No.5ベストアンサー
- 回答日時:
No.4:追記
たぶんですが、「正しい値」を勘違いしているのではないでしょうか?
「正しい値」は、スケーリングなどを考慮したブラウザ(HTML)から見たときのピクセル数です。デバイスのピクセル数ではありません。
当方では、下記のソースで確認しています。
●a.html==============
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>【A】</title>
<script type="text/javascript">
function func()
{
var width = window.innerWidth;
alert( width );
if( width < 1000 ) location.href = 'b.html';
}
</script>
</head>
<body onload="func();">
<FONT SIZE="+20">A</FONT>
<body>
●b.html==============
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>【B】</title>
</head>
<body>
<FONT SIZE="+20">B</FONT>
<body>
検証に時間がかかり、お礼が遅くなり申し訳ありません。
コードを丁寧に書いて頂き誠に有り難うございました。
このコードでURLの遷移は確認できました。
遷移が確認できましたので、安心できました。
誠に有り難うございました。
一つお聞きしたいのですが、「alert( width );」で数字が表示されます。
PCのブラウザでは、幅を縮小すれば、その値に変わります。
一方、手持ちのスマホでは、この数字は全て「980」です。
if( width < 1000 ) であれば、URLは遷移しますが、if( width < 900 ) にすると、遷移しません。(実際にやってみました)
この結果は間違っていないでしょうか?
No.6
- 回答日時:
No.5:追記
width() や innerWidth ですが viewport の設定や端末の仕様などにも影響されますので、それで間違っていません。ただ、このような場合は、あまり意味がないのかもしれません。
画面サイズを元に切り分けるのでしたら、単に画面が縦長ならばスマホレイアウト、それ以外ならばPCレイアウトという判断を私ならば入れると思います。
色々なご指導を頂き、誠に有り難うございました。
スマホの横幅の値は一つと勘違いしていたのが大きな原因でつまずいてしまい、大変お手数をおかけしました。
これで次に進むことができます。
あらためてお礼を申し上げます。
本当に有り難うございました。
No.4
- 回答日時:
No.3:追記
<body onload="func();"> で、
func()内で window.innerWidth が正しい値を返していることを確認しました。
続けてご回答頂き、誠に有り難うございます。
下記の通りでよろしかったでしょうか?
<body onload="func();">
<script>
function func(){
var width = window.innerWidth;
if(width <= 440) {
window.location.href = 'http://〇〇〇.htm'';
}
}
</script>
・
・
</body>
body内のあちこちにこの<script>置いてみましたが、結果は同じみたいです。
お聞きしたいのですが、
「正しい値を返していることを確認した」ということですが、スマホサイト専用のURLに遷移したでしょうか?
正しい値を返していても、何らかの理由で、遷移しないとは考えられないでしょうか?
何度もお手数をかけして申し訳ありません。
No.3
- 回答日時:
No.2:追記
これだと、どのような値が得られますでしょうか?
var width = window.innerWidth;
続けてご回答頂き、誠に有り難うございます。
var width = $(window).width(); を
var width = window.innerWidth; に変えたらどうなるかということだと思いますが、全く同じ結果となりました。
PCなどで幅を変えた時は、問題なく自動でURLが移りますが、読み込み時やスマホでは全く変わりません。
何度もお手数をおかけし、申し訳ありません。
No.2
- 回答日時:
No.1:追記
$(document).ready(function(){
が良いかなと思っていたのですが、<body>タグのタイミングがいいかもしれません。とりあえず、タイミングをいろいろ変えてみて、width が正しく取得できているか(取得できるタイミングかどうか)を確認してみてはいかがでしょうか。
<body onload="function();">
続けてご回答頂き、誠に有り難うございます。
下記の通りでよろしかったでしょうか?
<body onload="func()">
<script>
function func(){
var width = $(window).width();
if(width <= 440) {
window.location.href = 'http://〇〇〇.htm'';
}
}
</script>
・
・
</body>
body内のあちこちにこの<script>置いてみましたが、結果は同じみたいです。
ブラウザの横幅を変えるとこのscriptは間違いなく起動します。
setTimeout(function()でタイミングを遅らせたりしましたが、反応しません。
ご指摘の通り、読み込み時にwidth が正しく取得できていないようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのレスポンシブが綺麗に動かない 3 2022/06/21 11:08
- JavaScript スマホ上で、左右スワイプで次のページに移動させたいです 2 2022/11/11 17:04
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
- au(KDDI) 特定の画面を見るとスマホが固まります ご覧頂き有難うございます。 特定のページを見るとスマホが固まり 1 2023/08/21 19:29
- Excel(エクセル) ExcelのVBAでWordを読み取り専用で開いて、見たいページに自動で移動する方法を教えて頂きたい 4 2022/07/27 10:39
- LINE LINEアプリ内のQRコードリーダーがカメラのピントが合わず読み込めません。 2 2022/08/26 15:39
- Android(アンドロイド) Motorolaのスマホに画面ロックのPINを設定してからUSBでWindows8.1のPCに接続し 1 2022/11/07 12:29
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
- PHP $_SESSIONに渡した後はそのまま使っても問題ありませんか? 3 2022/11/08 22:17
- USTREAM 映像・動画編集にお詳しい方、教えて下さい。 2 2023/03/05 07:22
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
昼間 ずっとゴロゴロと横になっ...
-
Excelの列や行の幅を表示...
-
HTMLでクロス抽出したい
-
ホームページビルダーで横幅を...
-
家だとだらけてしまうのなんと...
-
敬語
-
ナビゲーションバーを配置する...
-
Wordについてなんですが、この...
-
illustratorの単位について
-
ドリームウィーバー操作
-
エクセルで、一つのセルの幅を...
-
枠の幅の固定
-
Excelのヒストグラム
-
顔の横幅について。 横幅が大き...
-
ホームページに細い縦長のライ...
-
エクセルで作成した表の両面印刷
-
A4用紙の幅にうまく印刷できるH...
-
htmlの記述について
-
どんなにやってもできないんです。
-
アドレス(現在のURL)を表示さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでサイズに合ったもの...
-
Excelの列や行の幅を表示...
-
PDFへてのテキストボックスにて...
-
HTMLでクロス抽出したい
-
バーコードのサイズは拡大縮小...
-
エクセルでサイズ指定でPOP...
-
Excel セルの幅が合わない
-
パソコンでランドルト環の作成...
-
Excel で等間隔で縦線を引きた...
-
昼間 ずっとゴロゴロと横になっ...
-
エクセルの行の幅がずれる
-
パソコンサイズが横30cm縦20cm...
-
ホームページビルダーで表の列...
-
Excelの列の幅(ピクセル)につい...
-
【エクセルVBA】シェイプのサイ...
-
ワードで、横書きの数字を縦書...
-
ホームページビルダーで横幅に...
-
Excelで文字の幅を変える方法
-
Excel2003のVBAで、セルの幅・...
-
敬語
おすすめ情報