2013-07-25 3 views
1

Я сделал этот пример, чтобы показать, что моя проблема: http://jsfiddle.net/GSRgf/HTML5 - Canvas, нарисуйте прямоугольник с помощью DIV

HTML

<canvas id="canvas" width="500" height="500"></canvas> 
<div id="div"></div> 

JS

$(function() { 
var ctx=$('#canvas')[0].getContext('2d'); 
rect = {}; 
drag = false; 

$(document).on('mousedown','#canvas',function(e){ 
    rect.startX = e.pageX - $(this).offset().left; 
    rect.startY = e.pageY - $(this).offset().top; 
    rect.w=0; 
    rect.h=0; 
    drag = true; 
}); 

$(document).on('mouseup','#canvas',function(){ 
    drag = false; 
}); 

$(document).on('mousemove','#canvas',function(e){ 
    if (drag) { 
     rect.w = (e.pageX - $(this).offset().left)- rect.startX; 
     rect.h = (e.pageY - $(this).offset().top)- rect.startY; 
     ctx.clearRect(0, 0, 500, 500); 
     ctx.fillStyle = 'rgba(0,0,0,0.5)'; 
     ctx.fillRect(rect.startX, rect.startY, rect.w, rect.h); 
    } 
});  
}); 

Как это возможно продолжайте рисовать прямоугольник, когда мышь находится над div?

Спасибо!

ответ

1

Удалить селектор «#canvas» для событий mousemove и mouseup. Измените событие mousemove на использование $ ("# canvas") вместо $ (this).

http://jsfiddle.net/GSRgf/3/

$(function() { 
    var ctx=$('#canvas')[0].getContext('2d'); 
    rect = {}; 
    drag = false; 

    $(document).on('mousedown','#canvas',function(e){ 
     rect.startX = e.pageX - $(this).offset().left; 
     rect.startY = e.pageY - $(this).offset().top; 
     rect.w=0; 
     rect.h=0; 
     drag = true; 
    }); 

    $(document).on('mouseup',function(){ 
     drag = false; 
    }); 

    $(document).on('mousemove',function(e){ 
     if (drag) { 
      rect.w = (e.pageX - $("#canvas").offset().left)- rect.startX; 
      rect.h = (e.pageY - $("#canvas").offset().top)- rect.startY; 
      ctx.clearRect(0, 0, 500, 500); 
      ctx.fillStyle = 'rgba(0,0,0,0.5)'; 
      ctx.fillRect(rect.startX, rect.startY, rect.w, rect.h); 
     } 
    });  
}); 
+0

Я решил пойти по этому пути, хотя ... Есть ли у вас какие-либо идеи, почему она не работает в IE вообще? (пытается с IE10). – ticktack

+0

@ticktack - В IE9 jQuery 1.10.1 не работает, по крайней мере, в JSFiddle, переход на jQuery 1.9 исправил проблему (с IE9) для меня http://jsfiddle.net/GSRgf/4/ Я не есть IE10, хотя –

+0

Правильно, это исправлено и в IE10 тоже. Благодаря! – ticktack

Смежные вопросы