アフィリエイト広告を利用しております。
参考サイトの記載がある場合はそちらの方がより詳しく記載説明がされているのでぜひそちらもご覧ください。
そのままコピペしても反映されないものもあります。サイトごとに変えないといけない箇所がありますので修正してください。

CSS HTML JavaScript

スマホ・タブレットにて横向きにしてサイトを見られたくない場合の処理

サイト作成していると横向きで見られたくない(対応が面倒)な時があります。
横向きになった場合に、ウィンドウを出して「横向き対応してません」と表示して見せないようにします。
本ページでは実際に横向きにした場合に、警告画面がでるようになっております。またスクロール等もできなくしております。
問題として検証画面でなぜか横向き判定されて、検証の邪魔になる場合があります…

// 初期化等
document.addEventListener('DOMContentLoaded', function() {
    modal_set();
    modal_check();
});

// 横サイズが変更された際の処理
window.addEventListener('DOMContentLoaded', function() {
    window.addEventListener('resize', function() {
        modal_check();
    });
});

//----------------------------------------------------------
//  スマホ・タブレットが回転した時の処理
//----------------------------------------------------------
window.onorientationchange = function () {
  modal_check();
}

//----------------------------------------------------------
//  スクロール禁止・許可処理
//----------------------------------------------------------
function disableScroll(event) {
  event.preventDefault();
}

//----------------------------------------------------------
//  モーダルセット処理
//----------------------------------------------------------
function modal_set() {
  let head_element = document.head;
  head_element.insertAdjacentHTML('afterend','<div id="modal"><div class="overlay"></div><div class="modal-wrapper">本サイトは横向きに見ることを推奨しておりません。<br />縦向きにてご覧ください。</div></div>');
}

//----------------------------------------------------------
//  スマホ・タブレット回転チェック
//----------------------------------------------------------
function modal_check() {
  switch ( window.orientation ) {
    case 0:
    case 180:
    case -180:
      modal_off();
    break;
    
    case 90:
    case -90:
    case 270:
    case -270:
      modal_on();
    break;
  }
}

//----------------------------------------------------------
//  モーダル表示処理
//----------------------------------------------------------
function modal_on() {
  let element = document.getElementById("modal")
  if( element !== null ) element.style.display = "block";

  document.addEventListener('touchmove', disableScroll, { passive: false });
  document.addEventListener('mousewheel', disableScroll, { passive: false });
}

//----------------------------------------------------------
//  モーダル非表示処理
//----------------------------------------------------------
function modal_off() {
  let element = document.getElementById("modal")
  if( element !== null ) element.style.display = "none";

  document.removeEventListener('touchmove', disableScroll, { passive: false });
  document.removeEventListener('mousewheel', disableScroll, { passive: false });
}
#modal {
  width: 100%;
  height: 100%;
  position: fixed;
  top: 0;
  left: 0;
  z-index: 9999;
  display: none;
}
#modal .overlay{
  display: block;
  width: 100%;
  height: 100%;
  position: absolute;
  background-color: #000000;
  opacity: 0.7;
  top: 0;
  left: 0;
}
.modal-wrapper {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 70%;
    height: 70%;
    background-color: #ffffff;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    border-radius: 25px;
    padding: 20px;
}

おすすめ記事

1
制作理由 ワードプレスのクラシックエディタを直接使っているといつも思うことがありました [Tab]キー押して空白入れて見やすくインデントしたい! この記事を書くまでは入れないか、スペースキーを押して誤 ...
2
制作理由 ワードプレスのクラシックエディタを直接使っているといつも思うことがありました コード追加ボタンを自由に追加出来たら便利じゃない? この記事を書くまでは、クリップボード貼り付けアプリ[Clib ...
3
アプリ制作するに至った理由 納品代行の仕事をしていて思ったことがあります 納品代行をしていると本当に様々なお客様から様々な商品が届きます その中でも特に注意しているのが、「見た目ほぼ同じだけど違う商品 ...

-CSS, HTML, JavaScript
-