Re: Issue with dragging shapes

jonathan wood <[email protected]>
Newsgroups gmane.text.xml.batik.user
Message-ID <CAKiJDQRtF88YsWpJG81fLwOsJJQ6Y8D3Ue1c80xuKkkTpL72sw@mail.gmail.com>
I've found it best to handle mousedown on the element being dragged, then
track all mm/mu on a glasspane above the elements to be dragged.

here's a very simple example in svg:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<svg version="1.1" width="100%" height="100%" xmlns="
http://www.w3.org/2000/svg" onload="init()" pointer-events="all">
    <script type="text/ecmascript">
        <![CDATA[
        var drag = false;
        var svg;
        var draggable;

        function init(e) {
            svg = document.documentElement;
            var rect = document.getElementById("draggable");
            rect.addEventListener("mousedown", md, false);
            svg.addEventListener("mousemove", mm, false);
            svg.addEventListener("mouseup", mu, false);
        }

        function md(e) {
            drag = true;
            draggable = e.currentTarget;
        }

        function mu(e) {
            drag = false;
        }

        function mm(e) {
            if (drag) {
                var p = getPoint(e);
                var m = svg.createSVGMatrix().translate(p.x, p.y);
                var transform = "matrix(" + m.a + " " + m.b + " " + m.c + "
" + m.d + " " + m.e + " " + m.f + ")";
                draggable.setAttributeNS(null, "transform", transform);
            }
        }

        function getPoint(e) {
            var p = svg.createSVGPoint();
            p.x = e.clientX;
            p.y = e.clientY;
            p = p.matrixTransform(svg.getScreenCTM().inverse());
            return p;
        }
        ]]>
    </script>
    <rect id="background" x="0" y="0" width="100%" height="100%"
fill="#BBB" stroke="#000" />
    <rect id="draggable" x="0" y="0" height="100" width="100"
fill="cornflowerblue"/>
</svg>

On Sat, Aug 4, 2012 at 11:48 AM, fireball <[email protected]> wrote:

> I have two issues actually, one major and one minor.
>
> Major: I can't drag shapes over others. I have to drag them around for it
> to
> work. Note that when I go back to the shape, the handle is still there and
> the shape will continue moving without re-clicking.
> Does it have to do with the way I add shapes to the DOM document or the way
> I handle the dragging, or is it both, or is it something else?
>
> Minor: Moving mouse too fast after a mousedown loses the shape (shape stops
> moving) but when I go back to it the handle is still there and the shape
> keeps moving with the mouse without re-clicking on it. Same behaviour as in
> the major case above. What would be the cause?
>
> I register a handler object which listens to mousedown, mousemove, and
> mouseup for any object that is draggable. I do keep track of initial points
> to re-adjust the position. Something similar to
> http://wiki.apache.org/xmlgraphics-batik/DragTutorial
>
> Please let me know if you need to see any code for more info.
>
> Thanks,
>
> fireball.
>
>
>
> --
> View this message in context:
> http://batik.2283329.n4.nabble.com/Issue-with-dragging-shapes-tp4655175.html
> Sent from the Batik - Users mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.