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

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

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

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

1回答

2440閲覧

CANVAS絵画部分の表示のずれについて

MotohiroIto

総合スコア12

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2020/07/31 00:29

お世話になります。

先日、以下のような質問をさせていただきました。

canvasでの2つの要素間を繋ぐ線の書き方について

こちらの質問内容は解決し、実装は出来たのですが、問題が残っております。
作成したページは以下のようなLPです。
イメージ説明

ページ途中にCANVASで要素間の点線を実装出来たのですが、
例えばブラウザにてこのページある程度進んだ箇所でリロードすると、CANVASの表示がずれ込んでしまいます。

ページの一番上でリロードすれば、正常に表示されます。
色々調べた上、CANVASの表示規則がCSSと違うということはわかりましたが、具体的な対処方法を探せませんでした。
このような事象にはどう対応したら良いでしょうか?

以下コードになります。実際のコードは業務のものになるので、HTMLはコンテンツ中身は記載できないので、構成だけわかるようにしています。

HTML(全体構成)

HTML

1<html> 2 <body> 3 <div id="canvas-container"> 4 <canvas id="canvas"></canvas> 5 <header> 6 </header> 7 <main> 8 <div class="top"> 9 </div> 10 <div class="contents1"> 11 </div> 12   <div class="contents2"> 13     14    キャンバス表示箇所(円の部分は#Circle1~4) 15 16 </div> 17   <div class="contents3"> 18 </div> 19 </main> 20 <footer"> 21 </footer> 22 </div> 23 <script src="script.js"></script> 24 </body> 25</html> 26

CSS(CANVAS部のみ)

CSS

1#canvas-container { 2 position:relative; 3 top:0; 4 left:0; 5 width:100%; 6 height: 100%; 7 overflow:hidden; 8} 9 10#canvas { 11 position: absolute; 12 left: 0; 13 top: 0; 14 z-index: -1; 15}

JS(CANVAS部のみ)

javaScript

1$(function () { 2 sizing(); 3 onload(); 4 $(window).resize(function() { 5 sizing(); 6 onload(); 7 }); 8}); 9 10function sizing(){ 11 $('#canvas').attr({height:$('#canvas-container').height()}); 12 $('#canvas ').attr({width:$('#canvas-container').width()}); 13}; 14 15window.onload = () => { 16 var canvas = document.getElementById("canvas") 17 var ctx = canvas.getContext("2d"); 18 19 var a = document.getElementById("circle1").getBoundingClientRect(); 20 var b = (a.bottom - a.top) / 2; 21 var c = (a.right - a.left) / 2; 22 var d = a.top + b; 23 var e = a.left + c; 24 25 var a2 = document.getElementById("circle2").getBoundingClientRect(); 26 var b2 = (a2.bottom - a2.top) / 2; 27 var c2 = (a2.right - a2.left) / 2; 28 var d2 = a2.top + b2; 29 var e2 = a2.left + c2; 30 31 var a3 = document.getElementById("circle3").getBoundingClientRect(); 32 var b3 = (a3.bottom - a3.top) / 2; 33 var c3 = (a3.right - a3.left) / 2; 34 var d3 = a3.top + b3; 35 var e3 = a3.left + c3; 36 37 var a4 = document.getElementById("circle4").getBoundingClientRect(); 38 var b4 = (a4.bottom - a4.top) / 2; 39 var c4 = (a4.right - a4.left) / 2; 40 var d4 = a4.top + b4; 41 var e4 = a4.left + c4; 42 43 ctx.strokeStyle = "#ffba00"; 44 ctx.lineWidth = 5; 45 ctx.beginPath(); 46 ctx.moveTo(e, d); 47 ctx.lineTo(e2, d2); 48 ctx.moveTo(e2, d2); 49 ctx.lineTo(e3, d3); 50 ctx.moveTo(e3, d3); 51 ctx.lineTo(e4, d4); 52 ctx.setLineDash([5, 10]); 53 ctx.closePath(); 54 ctx.stroke(); 55 } 56

ちなみに以下のようなリロード時にページトップに持ってくるjqueryを載せてもダメでした。

$(function() {
$('html,body').animate({ scrollTop: 0 }, '1');
});

全部の内容を乗せられていないので、わかりづらかったら申し訳ありません。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

一つの解決方法として
動的な内容でなければ画像にしてしまうのも手かもしれません。
canvas から svg 画像の生成も可能です。

投稿2020/07/31 03:02

anozon

総合スコア662

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

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

MotohiroIto

2020/07/31 03:33

回答、ありがとうございます!canvasからsvg、発想になかったので新たなヒントをいただけてありがとうございます! 最終手段としては、こちらのサイトは結構幅によって表示位置を変える作りになっているので、キャンバス部だけというより、サークルの要素もまとめて画像にしてしまうしかないですね…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問