Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите разобраться с canvas html5 и javascript

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Необходимо нарисовать при клике круг и двигать его за мышью.
Altynayka
Отправлено: 03 Января, 2014 - 10:02:08
Post Id


Частый гость


Покинул форум
Сообщений всего: 208
Дата рег-ции: Март 2008  


Помог: 0 раз(а)




Добрый день!
Помогите решить задачу: Необходимо нарисовать круг на холсте и перемещать его за мышью. У меня при движении мыши рисуется новый объект, а отрисованные до этого элементы остаются на холсте.

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <!DOCTYPE HTML>
  3. <html>
  4.     <head>
  5.         <title>html5canvas.ru</title>
  6.         <META charset = "utf-8">
  7. <script>
  8.        
  9.  
  10. // Иницализируем необходимые переменные
  11. function init() {
  12.  canvas = document.getElementById("example");
  13.  context = canvas.getContext("2d");
  14.  canvas.width = 600;
  15.  canvas.height = 375;
  16.  width = 100;
  17.  height = 70;
  18.  radius=30;
  19.  drag = false; // переменная истинная когда зажата кнопка мыши
  20.  initdrag = 0;
  21.  dragRect = new Shape(radius);
  22.  canvas.onmousedown = mouseDown;
  23.  setInterval(draw, 1000 / 60);
  24. }
  25. // Метод отрисовки
  26. function draw() {
  27. var imageObj = new Image();
  28.        imageObj.src = "hand.jpg";
  29.         context.drawImage(imageObj,0,0, 600, 375);
  30.        dragRect.draw();
  31. }
  32. // Класс задающий круг
  33. function Shape(radius) {
  34.  this.radius = radius; // Радиус
  35.  this.offsetX = 0;
  36.  this.offsetY = 0;
  37.  this.draw = function() // Метод рисующий круг
  38.  {
  39.    if (initdrag) {
  40.         context.stroke();
  41.    context.lineWidth = 1;
  42.    context.strokeStyle = "red";
  43.         context.arc(this.x,this.y,this.radius,0,2*Math.PI);
  44.         context.stroke();
  45.         }
  46.  }
  47. }
  48. // Метод срабатывающий на нажатие кнопки мыши
  49. function mouseDown(evt) {
  50.  var mouseX = evt.pageX - canvas.offsetLeft;
  51.  var mouseY = evt.pageY - canvas.offsetTop;
  52. if (!initdrag) {
  53.         initdrag=1;
  54.         dragRect.x = mouseX;
  55.         dragRect.y = mouseY;
  56.         dragRect.draw();
  57. //alert(dragRect.x+','+dragRect.y);
  58. }
  59. if(((mouseX - dragRect.x) * (mouseX - dragRect.x) + (mouseY - dragRect.y) * (mouseY - dragRect.y)) <= dragRect.radius * dragRect.radius){
  60.    drag = true;
  61.    dragRect.offsetX = mouseX - dragRect.x + 8;
  62.    dragRect.offsetY = mouseY - dragRect.y + 8;
  63.    canvas.onmousemove = mouseMove;
  64.    canvas.onmouseup = mouseUp;
  65.  }
  66. }
  67. // Движение мыши
  68. function mouseMove(evt) {
  69.  var mouseY = evt.pageY;
  70.  var mouseX = evt.pageX;
  71.  if (drag) {
  72.    // Изменение координат фигуры
  73.    dragRect.x = mouseX - dragRect.offsetX;
  74.    dragRect.y = mouseY - dragRect.offsetY;
  75.  }
  76. }
  77. // Если отпущина кнопка мыши, то переменная drag принимает ложное значение
  78. function mouseUp(evt) {
  79.  drag = false;
  80. //alert(dragRect.x+','+dragRect.y)
  81. }
  82.  
  83.  
  84. </script>
  85.     </head>
  86.     <body onload="init()">
  87.         <canvas id="example" style="background-image: './hand.jpg';border:1px solid #d3d3d3;background-color:#fff;"> </canvas>
  88.     </body>
  89. </html>
  90.  
  91.  


Как исправить?
 
 Top
Panoptik
Отправлено: 03 Января, 2014 - 10:47:51
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




попробуйте перед отрисовкой круга закрашивать всю поверхность фоном


-----
Just do it
 
 Top
nerv
Отправлено: 04 Января, 2014 - 15:20:45
Post Id



Посетитель


Покинул форум
Сообщений всего: 407
Дата рег-ции: Февр. 2013  
Откуда: Россия


Помог: 9 раз(а)




перед рисованием
CODE (javascript):
скопировать код в буфер обмена
  1. context.clearRect(0,0, canvas.width, canvas.height);

(Отредактировано автором: 04 Января, 2014 - 15:21:02)



-----
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB