1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

スマホでiframeを用いた画面制御とか

### 目的
画面内にifrmeを用いて外部から読み込みを行った場合の画面制御

1:呼び出したifarmeを縮小してヨコに表示する

2:画面が回転された場合に文言を表示する

大本の画面の作成

<div id="contents_area">
    <iframe src="呼び出したいURL"
            width="1280px"
            height="720px"
            allowtransparency="true"
            frameborder="0"
            id="game_area_frame"
            name="game_area_frame"></iframe>
</div>

1:iframeの表示を横にする

//contents_areaがIframeの上の階層のタグのなので
    contents_area = document.getElementById("contents_area");
    contents_area.style.cursor ="inherit";
    contents_area.style.position ="relative";
    contents_area.style.top = -0.5 + "px";
    contents_area.style.bottom = 0 + "px";
    contents_area.style.left = gl_scale_left + "px";
    contents_area.style.right = 0 + "px";
    contents_area.style.transformOrigin = "0% 0% 0px";
    contents_area.style.otransformOrigin ="0% 0% 0px";
    contents_area.style.webkittransfOrmorigin ="0% 0% 0px";
    contents_area.style.moztransformOrigin ="0% 0% 0px";
    contents_area.style.mstransformOrigin ="0% 0% 0px";
    contents_area.style.transform = "matrix(0, 1, -1, 0, 0, 0) scale(" + gl_scale_px + ")";
    contents_area.style.otransform = "matrix(0, 1, -1, 0, 0, 0) scale(" + gl_scale_px + ")";
    contents_area.style.webkittransform = "matrix(0, 1, -1, 0, 0, 0) scale(" + gl_scale_px + ")";
    contents_area.style.moztransform = "matrix(0, 1, -1, 0, 0, 0) scale(" + gl_scale_px + ")";
    contents_area.style.mstransform = "matrix(0, 1, -1, 0, 0, 0) scale(" + gl_scale_px + ")";

今回はscaleとtransformを用いてヨコにして縮尺をしました。

これで横にする準備ができましたが、スマホ、OSごとに画面比が違いますので



//global変数
var gl_ua = navigator.userAgent;
var gl_scale_px = 0.48;
var gl_scale_left = 355;
var gl_bg_height = 635;
var gl_bg_width = "100%";

    //iPhone端末
if (gl_ua.indexOf('iPhone') > 0 || gl_ua.indexOf('iPad') > 0) {
    gl_scale_px = 0.48;
    gl_scale_left = 355;
    gl_bg_height = 635;
    gl_bg_width = "100%";
    
    //Android端末
} else if (gl_ua.indexOf('Android') > 0) {
    gl_scale_px = 0.38;
    gl_scale_left = 310;
    gl_bg_height = 505;
    gl_bg_width = "100%";
}

のようにwidthとheightを決めておきます。

これだけで横画面にして縮尺ができます。
(javascriptはjQueryを読み込んでいない場合を想定して書いております。)

2-1:画面が回転された場合の文言作成

javascriptを無効にされていたい場合の文言を
display noneでおいておきます。


<div id="alert_view_screen_txt" style="display: none">
    この画面は「画面の向きをロック」を縦に設定の上、
    端末画面を横向きにする必要がございます。
    「画面の向きをロック」を縦に設定してください。
</div>

このようにユーザーに呼びかけるような文言をおいておきます。

次にjavascript側で画面回転を検知して文言を表示するようにします。

2-2:画面回転を検知してdisplayを変えるjavascript


//横回転があった場合のtext表示
$(window).on("load orientationchange resize", function() {
    alert_screen_txt = document.getElementById("alert_view_screen_txt");
    main_bg_frame = document.getElementById("main_bg_frame");
    var deg = false;
    switch (Math.abs(window.orientation)) {
        case -90: //右90度回転
            deg = true;  break;
        case 0:  //回転なし
            deg = false; break;
        case 90: //左90度回転
            deg = true; break;
        case 180: //180度回転
            deg = true; break;
    }
    
    //回転の判定
    if (deg) {
		 //回転している。文言を表示する
        alert_screen_txt.style.display = 'block';
        main_bg_frame.style.top = '85px';
    } else {
    	 //回転なし。文言表示を消す
        alert_screen_txt.style.display = 'none';
        main_bg_frame.style.top = '0px';
    }
});

(これもjavascriptはjQueryを読み込んでいない場合を想定して書いております。ミス)
すみません、ここは普通にjQueryを使ってます。上で使用しなかったのは、気まぐれです。

この記事の肝は
scaleとtrasformでiframeを自由に回転、縮尺して自由に置けるというところにあります。

これで終わり。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?