HTML,JS和CSS上的缩放功能

时间:2018-09-20 07:42:15

标签: javascript css zoom jsplumb

我想创建一个具有缩放功能的容器。问题是,当我单击“缩放”按钮时,div变得大于容器大小。

我想做的是放大和缩小容器。

这是我的代码,

<!doctype html>
<html>
<head>
<script src="jsplumb.min.js "></script>
<script>
var instance = null;
var setZoom = null;
jsPlumb.bind("ready", function() {
    instance = jsPlumb.getInstance();
    instance.setContainer("drawing");
    setZoom = function() {
        let zoom = 1.75; 
        let transformOrigin = null;
        let el = null;
      transformOrigin = transformOrigin || [ 0.5, 0.5 ];
      instance = instance || jsPlumb;
      el = el || instance.getContainer();
      var p = [ "webkit", "moz", "ms", "o" ],
          s = "scale(" + zoom + ")",
          oString = (transformOrigin[0] * 100) + "% " + (transformOrigin[1] * 100) + "%";

      for (var i = 0; i < p.length; i++) {
        el.style[p[i] + "Transform"] = s;
        el.style[p[i] + "TransformOrigin"] = oString;
      }

      el.style["transform"] = s;
      el.style["transformOrigin"] = oString;

      instance.setZoom(zoom);    
    };
    instance.registerConnectionType("connector", {
      paintStyle:{ stroke:"blue", strokeWidth:5  },
    });
    instance.registerEndpointTypes({
      "connector":{         
        paintStyle:{fill:"blue"}
      }
    });
    instance.draggable(["el1","el2"], {containment: true});
    instance.addEndpoint("el1", { 
        anchors:"TopLeft",
        type: "connector",
        isTarget: true,
        connectorStyle : { stroke:"blue", strokeWidth:5 },
    });
    instance.addEndpoint("el2", { 
        anchors:"TopLeft",
        type: "connector",
        isTarget: true
    });
    instance.addEndpoint("el1", { 
        anchors:"Bottom",
        type: "connector",
        connector: "Flowchart",
        isSource: true,
        connectorStyle : { stroke:"blue", strokeWidth:5 },
    });
    instance.addEndpoint("el2", { 
        anchors:"Bottom",
        type: "connector",
        connector: "Flowchart",
        isSource: true,
        connectorStyle : { stroke:"blue", strokeWidth:5 },
    });
    instance.connect({
      source:"el1", 
      target:"el2",
      connector: "Flowchart",
      anchors:["Bottom","TopLeft"],
      endpoint:"Dot",
      endpointStyle:{ fill: "blue" },
      type: "connector"
    });
});
</script>
<style>
    #drawing{
        position: absolute;
        height:400px;
        width:400px;
        background-image: url(grid.png);
        background-repeat:repeat;
        overflow-y: auto;
        overflow-x: auto;
        left: 100px;
    }
    .item{
        position:absolute;
        top: 10px;
        left: 20px;
        width:100px;
        height:100px;
        background-color:red;
    }
</style>
</head>
<body>
<button onClick={setZoom()}>zoom</button>
<div id="drawing">
    <div id="el1" class="item" style="top: 200px;">
        test
    </div>
    <div id="el2" class="item">
        test
    </div>
</div>
</body>
 </html>

在这里,我添加了JSPlumb示例,以便可以查看缩放是否有效。目前正在发生的事情是,缩放有效,但位置现在不同。容器的大小也不同。

我还希望允许用户在缩放时拖动工作区。我该怎么办?

0 个答案:

没有答案