холст x, y значение на реагирующей изменяющейся странице с размером экрана - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь получить координаты x, y из двух разных полотен на одной странице, которые могут изменить положение с помощью изменения размера экрана.

Тестовая страница выглядит как на картинке ниже enter image description here

с моим текущим кодом, когда я нажимаю на любую из черных точек, я получаю правильные координаты x, y для холста, на котором я щелкнул.

однако, если размер страницы изменяется, а правый холст опускается ниже левого холста, когда я нажимаю на теперь более низкую черную точку холста, значение Y уменьшается, и я не могу обойти это.

Ниже показан код, который можно запустить в полноэкранном режиме с изменением размера ответа.

Моя цель - узнать, когда была нажата черная точка и на каком холсте произошло это событие. Это должно быть в состоянии сделать это при изменении размера страницы на разных экранах

Просто чтобы уточнить координаты Y верхней строки холста 2 - это 15. Если я изменяю резкость и холст 2 опускается ниже холста 1, y становится примерно 323 в верхней строке, но мне нужно, чтобы он оставался на том же значении, что и раньше изменение размера

Любая помощь будет отличной, спасибо

function circle (name, setTemp, temp){
  c=document.getElementById(name);
  var ctx=c.getContext("2d");
  c.width = 200;
  c.height = 300;
  ctx.fillStyle = "gray";
  ctx.fillRect(0, 0, c.width, c.height);
  ctx.beginPath();
  ctx.arc(100,170,5,0,2*Math.PI);
  ctx.fillStyle = 'black';
  ctx.fill();
}
circle ('den');
circle ('wc');
var den=document.getElementById('den');
den.addEventListener('mousedown',denClicked, false);
function denClicked(event){
    c=document.getElementById('den');
    var rect = c.getBoundingClientRect()
    var x = event.pageX - rect.left;
    var y = event.pageY;
  console.log('x: ' + x + ' y: ' + y);
}
var wc=document.getElementById('wc');
wc.addEventListener('mousedown',wcClicked, false);
function wcClicked(event){
    c=document.getElementById('wc');
    var rect = c.getBoundingClientRect()
    var x = event.pageX - rect.left;
    var y = event.pageY;
  console.log(rect);
    console.log('x: ' + x + ' y: ' + y);
}
* {
    box-sizing: border-box;
}

[class*="col-"] {
    float: left;
    padding: 5px;
}

/* For mobile phones: */
[class*="col-"] {
    width: 100%;
}
@media only screen and (min-width: 768px){
/* For desktop: */
	.col-1 {width: 8.33%;}
	.col-2 {width: 16.66%;}
	.col-3 {width: 25%;}
	.col-4 {width: 33.33%;}
	.col-5 {width: 41.66%;}
	.col-6 {width: 50%;}
	.col-7 {width: 58.33%;}
	.col-8 {width: 66.66%;}
	.col-9 {width: 75%;}
	.col-10 {width: 83.33%;}
	.col-11 {width: 91.66%;}
	.col-12 {width: 100%;}
}
@media only screen and (min-width: 600px){
	.col-m-1 {width: 8.33%;}
	.col-m-2 {width: 16.66%;}
	.col-m-3 {width: 25%;}
	.col-m-4 {width: 33.33%;}
	.col-m-5 {width: 41.66%;}
	.col-m-6 {width: 50%;}
	.col-m-7 {width: 58.33%;}
	.col-m-8 {width: 66.66%;}
	.col-m-9 {width: 75%;}
	.col-m-10 {width: 83.33%;}
	.col-m-11 {width: 91.66%;}
	.col-m-12 {width: 100%;}
}
<html>
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <link rel="stylesheet" href="canvas.css">
  </head>
  <body>
    <div class="row">
      <div class="col-6">
         <div><canvas id="den"></canvas> </div>
      </div>
      <div class="col-6">
         <div><canvas id="wc"></canvas> </div>
      </div>
     </div>
    <div><script src="canvas.js"></script> </div>
  </body>
</html>

1 Ответ

0 голосов
/ 19 ноября 2018

Я думаю, у меня это работает. возможно лучший способ сделать это, но в данный момент он работает, когда размер страницы изменяется.

под функцией щелчка я получаю высоту страницы, которая, возможно, была изменена, следовательно, причина для этого в функции щелчка Если ширина страницы опустилась ниже ширины в css для изменения макета страницы, функция if увеличит компенсатор, который будет удален от оси Y, чтобы дать правильные координаты.

Пока все работает нормально, нужно будет протестировать это больше с 4-мя полотнами подряд и на экранах разных размеров

 var Ycompensator = 0;
function circle (name, setTemp, temp){
  c=document.getElementById(name);
  var ctx=c.getContext("2d");
  c.width = 200;
  c.height = 300;
  ctx.fillStyle = "gray";
  ctx.fillRect(0, 0, c.width, c.height);
  ctx.beginPath();
  ctx.arc(100,170,5,0,2*Math.PI);
  ctx.fillStyle = 'black';
  ctx.fill();
}
circle ('den');
circle ('wc');
var den=document.getElementById('den');
den.addEventListener('mousedown',denClicked, false);
function denClicked(event){
    c=document.getElementById('den');
    var rect = c.getBoundingClientRect()
    var x = event.pageX - rect.left;
    var y = event.pageY - rect.top;
  console.log('x: ' + x + ' y: ' + y);
}
var wc=document.getElementById('wc');
wc.addEventListener('mousedown',wcClicked, false);
function wcClicked(event){
    var w = window.innerWidth;
    if (w < 768){
      Ycompensator = 324;
    }
    c=document.getElementById('wc');
    var rect = c.getBoundingClientRect()
    var x = event.pageX - rect.left;
    var y = event.pageY - Ycompensator;
    console.log('x: ' + x + ' y: ' + y);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...