🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CreateJS

CreateJSは、HTML5でリッチコンテンツを制作できるJavaScriptライブラリ群です。JavaScriptの知識があれば、HTML5のCanvasをコントロールしコンテンツを作ることができます。

Flash

Flashは、Webページにアニメーション、ビデオ、また対話型のアプリケーションを埋め込むためにAdobe社が提供しているクロスプラットフォームのインターネットマルチメディアランタイムです。

HTML5

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

JavaScript

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

Q&A

解決済

2回答

1230閲覧

端末の回転時にcanvasをレスポンシブルにしたい

hakusaku

総合スコア6

CreateJS

CreateJSは、HTML5でリッチコンテンツを制作できるJavaScriptライブラリ群です。JavaScriptの知識があれば、HTML5のCanvasをコントロールしコンテンツを作ることができます。

Flash

Flashは、Webページにアニメーション、ビデオ、また対話型のアプリケーションを埋め込むためにAdobe社が提供しているクロスプラットフォームのインターネットマルチメディアランタイムです。

HTML5

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

JavaScript

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

0グッド

1クリップ

投稿2019/10/17 05:37

編集2019/10/17 05:47

端末の回転時にcanvasをレスポンシブルにしたい

現在、javascriptとHTMLを用いて
スマートフォンで再生されるプレイアブル広告を作成しています
出稿規定にレスポンシブル対応とあり、画面の回転時にレイアウトを綺麗に表示しなおしたいのですが
下記の「発生している問題」のようなことが起こってしまいます
いろいろと試してみましたが解決には至らなかったので
お力を貸していただけたらと思います

発生している問題

Google Chromeのデベロッパーツールでテストしています

横→縦
全体的に下になり、上に余白が発生している

縦→横
canvasサイズは変わっているが表示されている領域が縦のままになっていて
左端しか表示されない

該当のソースコード

抜粋して書いています

HTML

1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="ad.size" content="width=320,height=480"> 6 <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,user-scalable=no"> 7 <meta http-equiv="Content-Security-Policy" content="frame-src 'self' blob: "> 8 <script src="https://code.createjs.com/1.0.0/createjs.min.js"></script> 9 <title>APP</title> 10 <script> 11 12 // js等の読み込み 13 14 </script> 15 <style> 16 html, body{ 17 overflow: hidden; 18 } 19 </style> 20</head> 21<body style="margin:0px;background-color:#000000;" id="body"> 22<div id ="stats_waku" style=""></div> 23<div id="animation_container" style="background-color:rgba(255, 204, 204, 1.00); width:auto; height:auto"> 24 <canvas id="canvas" width="640" height="1120" style="position: absolute; display: block; background-color:#000000;"></canvas> 25</div> 26</body> 27</html>

javascript

1 _init(){ 2 window.addEventListener('resize', this.checkOrientation.bind(this), false); 3 } 4 5 checkOrientation (e) { 6 if('orientation' in window) { 7 // defaultOrientationがtrueの場合、window.orientationが0か180の時は縦長 8 // defaultOrientationがfalseの場合、window.orientationが-90か90の時は縦長 9 var o = (window.orientation % 180 == 0); 10 if((o && this.defaultOrientation) || !(o || this.defaultOrientation)) { 11 console.log('portrait'); 12 this.windowInit("portrait"); 13 } 14 else { 15 console.log('landscape'); 16 this.windowInit("landscape"); 17 } 18 } 19 } 20 21 windowInit(muki){ 22 23 // 初期リセット 24 window.innerW = window.innerWidth; 25 window.innerH = window.innerHeight; 26 main.displayWidth = 640; 27 main.displayHeight = 1120; 28 main.canvas.width = 640; 29 main.canvas.height = 1120; 30 main.canvas.style.height = ""; 31 main.canvas.style.width = ""; 32 main.canvas.style.marginLeft = ""; 33 main.canvas.style.marginTop = ""; 34 stage.x = 0; 35 stage.y = 0; 36 37 var dotti; 38 if(window.innerH / window.innerW != main.stageHeight / main.stageWidth) { 39 //縦横比が異なる 40 if(window.innerH / window.innerW < main.stageHeight / main.stageWidth) { 41 //ipad 42 console.log("ipad"); 43 dotti = 1; 44 main.displayWidth = window.innerW / window.innerH * main.stageHeight; 45 if(main.displayWidth > main.displayWidthMax) { 46 main.displayWidth = main.displayWidthMax; 47 } 48 } else { 49 //ipone5 50 console.log("iphone5"); 51 dotti = 2; 52 main.displayHeight = window.innerH / window.innerW *main. stageWidth; 53 54 if(main.displayHeight > main.displayHeightMax) { 55 main.displayHeight = main.displayHeightMax; 56 } 57 } 58 } 59 var scale; 60 if(dotti == 1) { 61 //横長端末 62 main.canvas.width = main.displayWidth; 63 main.canvas.style.height = window.innerH + "px"; 64 scale = window.innerH / main.stageHeight; 65 main.canvas.style.width = (main.displayWidth * scale) + "px"; 66 67 stage.x = (main.displayWidth - main.stageWidth) / 2; 68 var sa = (window.innerW - (main.displayWidth * scale)) / 2; 69 70 if(sa > 0) { 71 main.canvas.style.marginLeft = sa + "px"; 72 } 73 } 74 else if(dotti == 2) { 75 //縦長端末 76 main.canvas.height = main.displayHeight; 77 main.canvas.style.width = window.innerW + "px"; 78 79 scale = window.innerW / main.stageWidth; 80 main.canvas.style.height = (main.displayHeight * scale) + "px"; 81 82 stage.y = (main.displayHeight - main.stageHeight) / 2; 83 var sa = (window.innerH - (main.displayHeight * scale)) / 2; 84 85 if(sa > 0) { 86 main.canvas.style.marginTop = sa + "px"; 87 } 88 } 89 }

補足情報(FW/ツールのバージョンなど)

WebStome:2019.2.2
createjs:1.0.0
Google Chrome:77.0.3865.120

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

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

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

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

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

guest

回答2

0

自己解決

問題はcreateJSのStageGLでした
通常のStageだとcanvasのstyleを変更するだけで充分でしたが
StageGLでは変更した後にviewportを更新しなければならないのが抜けていました

javascript

1// Stage 2var canvas = document.getElementById("canvas"); 3var stage = new createjs.Stage(canvas); 4canvas.width = 640; 5canvas.height = 960; 6 7// StageGL 8var canvas = document.getElementById("canvas"); 9var stage = new createjs.StageGL(canvas, {antialias: true}); 10canvas.width = 640; 11canvas.height = 960; 12stage.updateViewport(canvas.width, canvas.height); //←ここを追記 13

投稿2019/10/18 05:41

編集2019/10/18 05:43
hakusaku

総合スコア6

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

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

0

よく見てませんが
1, 処理を関数化
2, window.onloadで発火
3, 端末を回転で発火
のような処理で良いのではないでしょうか?

画面回転を取得するのはこちらがわかりやすいかと思います。

投稿2019/10/17 05:40

kyoya0819

総合スコア10429

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

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

hakusaku

2019/10/17 05:44

すみません、ちょっと説明不足でした 回転自体のイベント取得はできているのですが 回転時にcanvasのレイアウトが崩れるというのが問題です
kyoya0819

2019/10/17 05:56

なので再度発火させれば良いのでは?
hakusaku

2019/10/17 06:00

再度発火した結果が発生している問題に書いてある内容です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問