Canvasとjavascriptを使用してHTML5ページを作成し、ページ上に一定数の間隔をあけてページ上に一定数の譜表を描画します。
私が持っているものは、キャンバスの上に10回再描画されます。本当に必要なのは、ループが描画されるたびに間隔を空けるものです。
JSFiddleを作成しようとしましたが、何も描画されません(ユーザーエラーであると確信しています)。そのため、jsファイルは次のとおりです。
window.onload = function(){
var canvas = document.getElementById('sheetmusic');
c = canvas.getContext('2d');
c.fillStyle = 'white';
c.fillRect(0,0, canvas.width, canvas.height);
// Draw staves
for (var i=0; i<10; i++){
c.strokeStyle = 'black';
c.beginPath();
c.moveTo(0,10);
c.lineTo(canvas.width,10);
c.stroke();
c.moveTo(0,20);
c.lineTo(canvas.width,20);
c.stroke();
c.moveTo(0,30);
c.lineTo(canvas.width,30);
c.stroke();
c.moveTo(0,40);
c.lineTo(canvas.width,40);
c.stroke();
c.moveTo(0,50);
c.lineTo(canvas.width,50);
c.stroke();
// staff whitespace
c.fillStyle = 'white';
c.fillRect(0,52, canvas.width, 50);
}
};
私のi
からloop
をheight
のstroke
属性に追加する方法がわからないだけです。
私が何をしようとしていたのか理解した。ループを使用してコードをできるだけ簡潔にしたかったのですが、これを実現するまでにいくつかの問題が発生しました。
window.onload = draw;
function draw() {
var canvas = document.getElementById('sheetmusic');
var c = canvas.getContext('2d');
var whitespace = 0;
var ycoordinate = 10;
//draw the staves 'x' number of times requested
for (var x = 1; x <= 10; x++) {
// draw the staff
for (var i = 1; i <= 5; i++){
c.strokeStyle = 'black';
c.moveTo(0,ycoordinate);
c.lineTo(canvas.width,ycoordinate);
c.stroke();
ycoordinate = ycoordinate + 10;
}
//draw white space beneath each staff
c.fillStyle = 'white';
c.fillRect(0,whitespace + 52,canvas.width,52);
whitespace = whitespace + 100;
ycoordinate = ycoordinate + 30;
}
}
これで、x
を必要なだけ繰り返すように設定して、JavaScriptで譜表を描画することができます。
Tgkprogで提案されているように、ループに戻っていくつかの詳細情報を調べる必要がありました。ありがとう!
Demo'able JS Fiddle at http://jsfiddle.net/ShawnCodes/K8j7u/1/
Xを変更する必要があります。紙の上に視覚化したり、グリッドを使ってペイントしたりするのに役立ちます。
これは上から下に線を作成します
<!DOCTYPE HTML>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<span id=dbg
></span>
<br>
<canvas id=sheetmusic width="800" height="625"></canvas>
<br>
<div id=dbgD></div>
<script language="Javascript">
dbr = document.getElementById('dbgD');
function dbg(s){
dbr.innerHTML = dbr.innerHTML + "<br>" + s
}
window.onload = function(){
var canvas = document.getElementById('sheetmusic');
c = canvas.getContext('2d');
dbg(" canvas " + canvas + "; 2d " + c);
//c.fillStyle = 'white';
//c.fillRect(0,0, canvas.width, canvas.height);
canvas.width = canvas.width //clears
c.fillStyle = 'green';
heightDiff = 15;
numberLines = canvas.height / heightDiff
// Draw staves
for (var i=0; i< numberLines; i++){
c.strokeStyle = 'black';
c.beginPath();
c.moveTo(0,10 + (i * heightDiff));
c.lineTo(canvas.width, 10 + (i * heightDiff));
c.stroke();
/*
c.moveTo(0,20);
c.lineTo(canvas.width,20);
c.stroke();
c.moveTo(0,30);
c.lineTo(canvas.width,30);
c.stroke();
c.moveTo(0,40);
c.lineTo(canvas.width,40);
c.stroke();
c.moveTo(0,50);
c.lineTo(canvas.width,50);
c.stroke();
*/
// staff whitespace, not sure what you want to do here
c.fillStyle = 'white';
//c.fillRect(0,52, canvas.width, 50);
}
};
</script>
ループに関するいくつかのチュートリアルとそれらの変数の使用が役立つでしょうか? http://www.echoecho.com/javascript9.htm 音符のように見える行を作成することを除いて、何を達成したいのか正確にわかりませんか?