0

キャンバスのコンテキストでfillRectとstrokeRectを使用して長方形の束をペイントすることにより、JavaScriptで単純なGUIインターフェイスを作成しようとしています。長方形のサイズを把握するために、ブラウザウィンドウで使用可能なスペースを取得し、すべての長方形の座標を計算する式があります。奇妙なことに、座標が交差していなくても(座標値を出力して確認しました)、長方形は交差しています。コードは次のとおりです。

var canvas = $("#canvas")[0];
var ctx = canvas.getContext("2d");

var w; 
var h;
var sectionH;
var sectionW;
var sectionX;
var noOfSections;
var gap;
var sectionColor;
var firstY;

//separate sections to follow:
//sessions
var sessionsStartY;
var sessionsEndY;

//activities values
var activitiesStartY;
var activitiesEndY;

//schools values
var schoolsStartY;
var schoolsEndY;

//data entry values
var daenStartY;
var daenEndY;

//general value setup
function generalSetUp() {

    noOfSections = 4;

    ctx.canvas.width = window.innerWidth - 15;
    ctx.canvas.height = window.innerHeight + 500;

    //section edge color and width
    ctx.strokeStyle = "white";
    ctx.lineWidth = 1;

    w = $("#canvas").width();
    h = $("#canvas").height();

    //gap between the sections should vary depending on screen size, 
    //one percent of the whole screen height should do
    //we want the numbers nice and round, hence parseInt
    gap = 15;
    sectionX = 5;
    firstY = 5;
    sectionColor = "rgba(240, 237, 238, 0.5)";

    //we want to fit all the sections on the screen without scrolling, so a bit of calculation is needed to get the
    //height of the section: total height minus top gap, minus bottom gap, minus all the gaps between the sections
    //divided by the total number of sections should give us the height of every section        
    sectionH = ((((h - firstY) - firstY) - (gap * (noOfSections-1))) / noOfSections);
    sectionH = parseInt(sectionH);
    //total available width minus left gap and right gap
    sectionW = ((w - sectionX) - sectionX);
    sectionW = parseInt(sectionW);

    titleFont = gap + 18 + "px Calibri";
    buttonFont = gap + 12 + "px Calibri";
}

//setup for values representing positions of each section
function sectionsSetUp() {
    //section values
    sessionsStartY = firstY;
    sessionsEndY = sessionsStartY + sectionH;

    //activities values
    activitiesStartY = sessionsEndY + gap;
    activitiesEndY = activitiesStartY + sectionH;

    //schools values
    schoolsStartY = activitiesEndY + gap;
    schoolsEndY = schoolsStartY + sectionH;

    //data entry values
    daenStartY = schoolsEndY + gap;
    daenEndY = daenStartY + sectionH;
}

そして、平均的な断面図のコードは次のようになります。

//drawing each session: 
function createSessionsSection(sStartX, sStartY, sEndX, sEndY) {
    ctx.fillStyle=sectionColor;
    ctx.strokeStyle = "white";
    ctx.fillRect(sStartX, sStartY, sEndX, sEndY);
    ctx.strokeRect(sStartX, sStartY, sEndX, sEndY);
}

何が起こるかというと、最初のブロックと2番目のブロックの間のギャップは15で、2番目のギャップは0で、3番目は-15のように見えます。また、fillRectsでもいくつかの重複が発生しています。何が原因なのかわかりません。スクリーンショットは次のとおりです。

スクリーンショット

4

0 に答える 0