Выпуск ввода позиционирования на холсте - PullRequest
0 голосов
/ 18 мая 2018

Я хотел бы создать программу для поиска третьей стороны прямоугольного прямоугольника на основе двух других.Моя идея состояла в том, чтобы нарисовать треугольник и поместить поля ввода рядом с тремя разными сторонами.Однако у меня возникают проблемы, заставляя их придерживаться сторон (они перемещаются при увеличении).Вот код:

<html>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="UTF-8">
   <head> 
        <title>Triangle rectangle</title>
        <style>
            .triangle {
                position: relative;
                text-align: center;
            }
        </style>
   </head>
   <body align="center">      
        <h2> Triangle rectangle </h2>
        <div class="triangle">
            <form autocomplete="off">
                <input style="position: absolute; top: 50%; right: 65%; width: 3%" type="text" name="a" id="a" placeholder='a' >
                <input style="position: absolute; top: 260px; right: 950px; width: 3%" type="text" name="b" id="b" autofocus='on' placeholder='b' >
                <input style="position: absolute; top: 100px; right: 850px; width: 5%" type="text" name="hypo" id="hypo" placeholder='Hypothénuse' >
            </form> 
            <canvas id="myCanvas" width="500" height="250" >Your browser does not support the HTML5 canvas tag.</canvas>
        </div>

        <script>
            var c = document.getElementById("myCanvas");
            var ctx = c.getContext("2d");
            ctx.beginPath();
            ctx.moveTo(0, 0);
            ctx.lineTo(500, 250);
            ctx.moveTo(0, 0);
            ctx.lineTo(0, 250);
            ctx.moveTo(0, 250);
            ctx.lineTo(500, 250);
            ctx.stroke();
        </script>
   </body>
</html> 

Вот сайт с кодом: http://rightangledrectangleirl.bitballoon.com/

Редактировать: удалось исправить:

<div style="position:relative; width:500px;height:250px; margin: 0 auto;" align="center">
    <canvas id="myCanvas" width="500" height="250">Your browser does not support the HTML5 canvas tag.</canvas>
    <form autocomplete="off">
        <input style="position: absolute; top: 125px; left: 10px; width: 50px" type="text" name="a" id="a" autofocus='on' placeholder='a' >
        <input style="position: absolute; top: 220px; right: 180px; width: 50px" type="text" name="b" id="b" autofocus='on' placeholder='b' >
        <input style="position: absolute; top: 90px; right: 90px; width: 80px" type="text" name="hypo" id="hypo" autofocus='on' placeholder='Hypothénuse' >
    </form>     
</div>

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Проблема заключалась в том, что у вашего .triangle div не было заданной ширины или высоты:

.triangle {
    position: relative;
    text-align: center;
    width: 500px;
    height: 250px;
    margin: 0 auto;
}
.h {
    position: absolute;
    top: 120px;
    right: 100px;
    width: 100px;
  }
.b {
    position: absolute;
    bottom: -35px;
    left: 210px;
    width: 50px;
  }
.a {
  position: absolute;
    top: 120px;
    left: -70px;
    width: 50px;
  }
<h2> Triangle rectangle </h2>
<div class="triangle">
    <form autocomplete="off">
        <input class="a" type="text" name="a" id="a" placeholder='a' >
        <input class="b" type="text" name="b" id="b" autofocus='on' placeholder='b' >
        <input class="h" type="text" name="hypo" id="hypo" placeholder='Hypothénuse' >
    </form> 
    <canvas id="myCanvas" width="500" height="250" >Your browser does not support the HTML5 canvas tag.</canvas>
</div>

<script>
    var c = document.getElementById("myCanvas");
    var ctx = c.getContext("2d");
    ctx.beginPath();
    ctx.moveTo(0, 0);
    ctx.lineTo(500, 250);
    ctx.moveTo(0, 0);
    ctx.lineTo(0, 250);
    ctx.moveTo(0, 250);
    ctx.lineTo(500, 250);
    ctx.stroke();
</script>
0 голосов
/ 18 мая 2018

Абсолютное позиционирование работает относительно последнего контейнера, для которого явно определен атрибут position.В этом случае triangle div имеет position:relative, поэтому поля ввода будут абсолютно позиционированы относительно этого.

С учетом этого важно отметить, что при изменении размера страницы размервашего triangle div также меняется, поэтому меняется и абсолютное позиционирование.Чтобы это исправить, вы должны дать контейнеру triangle фиксированный размер (или, по крайней мере, предсказуемый).Приведение его в соответствие с размером вашего холста кажется хорошим выбором.

Придание ему фиксированного размера, к сожалению, приводит к тому, что способ центрирования по горизонтали нарушается, но это можно исправить с помощью margin : auto.

Наконец, вы должны повторить ваши top, left, bottom, right проценты.Имейте в виду, что вы также можете использовать пиксели.Я не знаю точно, где вы хотите расположить элементы, но, возможно, следующий код поможет вам:

var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.beginPath();
ctx.moveTo(0, 0);
ctx.lineTo(500, 250);
ctx.moveTo(0, 0);
ctx.lineTo(0, 250);
ctx.moveTo(0, 250);
ctx.lineTo(500, 250);
ctx.stroke();
.triangle {
  position: relative;
  text-align: center;
  width : 500px;
  height : 250px;
  margin : auto;
}

#a {
  position: absolute;
  top: 50%;
  left: 0px;
  width: 3%;
}

#b {
  position: absolute;
  bottom: 0px;
  right: 50%;
  width: 3%
}

#hypo {
  position: absolute;
  top: 45%;
  left: 40%;
  width: 100px;
}
<body align="center">
  <h2> Triangle rectangle </h2>
  <div class="triangle">
    <form autocomplete="off">
      <input type="text" name="a" id="a" placeholder='a'>
      <input type="text" name="b" id="b" autofocus='on' placeholder='b'>
      <input type="text" name="hypo" id="hypo" placeholder='Hypothénuse'>
    </form>
    <canvas id="myCanvas" width="500" height="250">Your browser does not support the HTML5 canvas tag.</canvas>
  </div>
</body>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...