捏和缩放不适用于ipad

时间:2012-10-31 07:54:15

标签: ios ipad safari

我无法在ipad上进行捏合和缩放,我想下面给出的代码可能会影响代码, 请给出任何完美的解决方案 身体儿童事件的绑定是否有任何问题,或者需要计算不同变量的触摸,并进行手动计算。

     ///I-Pad evenet Binding
   $(document).ready(function () {

       $("body").children().bind('touchstart touchmove touchend touchcancel', function () {
           var touches = event.changedTouches, first = touches[0], type = "";
           switch (event.type) {
               case "touchstart": type = "mousedown";
                   break;
               case "touchmove": type = "mousemove";
                   break;
               case "touchend": type = "mouseup";
                   break;
               default: return;
           }

           var simulatedEvent = document.createEvent("MouseEvent");
           simulatedEvent.initMouseEvent(type, true, true, window, 1,
                  first.screenX, first.screenY,
                  first.clientX, first.clientY, false,
                  false, false, false, 0/*left*/, null);
           if (touches.length < 2) {
               first.target.dispatchEvent(simulatedEvent);
               event.preventDefault();
           }

       });


   (function () {
            var last_x = null, last_y = null, w_area = workarea[0],
                panning = false, keypan = false, dopanning = false;

            $("#svgroot").bind('mousemove mouseup', function (evt) {
                if (dopanning === false) return;
                var clientxnew = +$("#svgcontent")[0].getAttribute("x"),
                clientynew = +$("#svgcontent")[0].getAttribute("y");
                clientxnew += (evt.clientX - last_x);
                clientynew += (evt.clientY - last_y);
                last_x = evt.clientX;
                last_y = evt.clientY;
                //this.setAttribute("viewBox", vb.join(' '));
                // updateCanvas(true);
                $("#svgcontent").show();
                $("#svgcontent")[0].setAttribute("x", clientxnew);
                $("#svgcontent")[0].setAttribute("y", clientynew);
                svgedit.select.getSelectorManager().selectorParentGroup.setAttribute("transform", "translate(" + clientxnew + "," + clientynew + ")");
                if (evt.type === 'mouseup') { dopanning = false; }

                return false;
            }).mousedown(function (evt) {

                var mouse_target = svgCanvas.getMouseTarget(evt);
                if (svgCanvas.getMode() == "text" || svgCanvas.getMode() == "textedit") {
                    dopanning = false; return;
                }
                if ((mouse_target.id.indexOf("grouplayerdragged") > -1 || mouse_target.id.indexOf("hotspot") > -1 ||
                mouse_target.id.indexOf("clonediv") > -1 || mouse_target.tagName === "text")) { dopanning = false; return; }
                if (selectedElement != null) {
                    dopanning = false; return;
                }
                if (evt.button === 0) {
                    dopanning = true;
                    last_x = evt.clientX;
                    last_y = evt.clientY;
                    svgCanvas.clearSelection(true);
                    return false;

                }
            });

            $(window).mouseup(function () {
                panning = false;
                dopanning = false;
            });

1 个答案:

答案 0 :(得分:0)

你应该使用gesturechange。尝试这种方式(这不是你的确切解决方案,但你可以破解它)

var angle = 0;
var newAngle;
var scale = 1;
var newScale;

function saveChanges() {
    angle = newAngle;
    scale = newScale;
}
function getAngleAndScale(e) {

    // Don't zoom or rotate the whole screen
    e.preventDefault();
    // Rotation and scale are event properties
    newAngle = angle + e.rotation;
    newScale = scale * e.scale;
    // Combine scale and rotation into a single transform
    var tString = "scale(" + newScale + ")";
    document.getElementById("theDiv").style.webkitTransform = tString;
}
function init() {
    // Set scale and rotation during gestures
    document.getElementById("theDiv").addEventListener("gesturechange", getAngleAndScale, false);
    // Preserve scale and rotation when gesture ends
    document.getElementById("theDiv").addEventListener("gestureend", saveChanges, false);
}

&LT;的&GT;

<div style="width:300px;height:300px;overflow:scrool;-webkit-overflow-scrolling: touch;">
   <img id="theDiv" style="width:100%;" src="http://animal.discovery.com/guides/wild-birds/gallery/mallard_duck.jpg" />
</div>

Try this on your ipad