Dojo connect不能与dojo声明一起使用

时间:2016-04-30 10:02:35

标签: javascript drag-and-drop dojo onmousemove

我建了一个正方形和一个矩形。我使用dojo.declare来覆盖onMouseMove事件,因此只有dnd在表面内。

但我有问题将广场连接到一个功能。

矩形不使用自定义移动设备并连接到某个功能。它每次移动时都会打印到控制台。

我做错了什么?

http://jsfiddle.net/Baboly/jh6dnb49/

HTML:

 <body>
 <div id='drawing_surface'></div>
 </body>

使用Javascript:

djConfig='parseOnLoad: true'>
dojo.require('dojox.gfx');   // omit this and the rectangle doesn't draw
dojo.require('dojox.gfx.move');  // omit this and the rectangle doesn't move
dojo.require('dojo.parser');  // parser and dojo.css aren't required


dojo.ready(function() {

surface = dojox.gfx.createSurface(dojo.byId('drawing_surface'),'640px',  '550px');
// draw rectangle on the surface
// createRect({}) parameters
//             x: horizontal offset from left side of surface
//             y: vertical offset from top of surface
//             height, width: dimensions of rectangle
rectangle = surface.createRect({ x: 20, y: 5, height: 100, width: 150})
                .setFill([0,0,255,0.3])   
                .setStroke({ color: "blue", width: 2})
              ;
 var symbol = surface.createGroup();

square = surface.createRect({ x: 20, y: 10, height: 100, width: 100})
                .setFill([0,0,255,0.3])
                .setStroke({ color: "blue", width: 2})
              ;
  // define limits to motion - in this case, the entire drawing surface.
  var limits = { xmin: 0, xmax: 640, ymin: 0, ymax: 550};

  // Extend mover with a class that overwites onMouseMove.
  // We will call the class net.aa3sd.surfaceMover to prevent naming 
  // conflicts with any existing dojo classes
  dojo.declare("net.aa3sd.surfaceMover",dojox.gfx.Mover, { 
       // Mover has several methods, we only need to overwrite onMouseMove.
       onMouseMove: function(event) {

          // getTransform() will tell us how far the shape has been moved
          // from its initial position
          transform = this.shape.getTransform();
          // If this.shape hasn't been transformed yet 
          // getTransform() will return null, so we
          // need to handle the special case of the first mouse movement.
          if (transform==null) { 
             // We aren't dealing with rotations here, so we will 
             // just define initial values for the translations dx and dy.
             transform = { dx: 0, dy: 0 };
          }
          // event.layerX is the mouse position in the coordinate system of the
          // layer that was clicked on, the rectangle in this case
          var layerx = event.layerX;  
          var layery = event.layerY;
          if (this.click_on_rectangle==null) { 
            // we need to find where in the rectangle the mouse pointer is
            // otherwise the rectangle will drag untill the mouse pointer
            // hits the limits, rather than when the rectangel hits 
            // the limits.
            this.click_on_rectangle  = {  
                x: layerx - this.shape.shape.x - transform.dx,
                y: layery - this.shape.shape.y - transform.dy
             }  // x,y of initial mouse click in coordinate system of rectangle
          }
          var click_on_surface = {
             x: layerx - this.click_on_rectangle.x,
             y: layery - this.click_on_rectangle.y 
          };   // x,y of mouse click in coordinate system of drawing surface
          var x = event.clientX;
          var y = event.clientY;
          // check to see if the edges of the rectangle are within the
          // limits of movement, if so, allow the rectangle to be moved
          if (click_on_surface.x > limits.xmin 
            & click_on_surface.y > limits.ymin 
            & click_on_surface.x < limits.xmax - square.shape.width
            & click_on_surface.y < limits.ymax - square.shape.height
             ) { 
                // move the rectangle by applying a translation
                this.shape.applyLeftTransform({ 
                       dx: x - this.lastX, 
                       dy: y - this.lastY
                });
                // store the last position of the rectangle
                this.lastX = x;
                this.lastY = y;
          }
          dojo.stopEvent(event);
       }
       });
  // now we simply make the rectangle movable using the custom mover.
var recHandler = new dojox.gfx.Moveable(rectangle);

console.log(recHandler);

dojo.connect(recHandler, "onMove", function(mover) {

console.log("recHandler start moving with mover:", mover);
        });

var sqHandler = new dojox.gfx.Moveable(square, { mover:  net.aa3sd.surfaceMover      })
console.log(sqHandler);

dojo.connect(sqHandler, "onMove", function(mover) {

console.log("sqHandler start moving with mover:", mover);
});

});

0 个答案:

没有答案