JointJS Zooming

HTML

<script src="http://jointjs.com/js/joint.js"></script>
<link rel="stylesheet" href="http://jointjs.com/css/joint.css">
<!-- JointJS Fiddle -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.3/backbone.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/dagre/0.8.2/dagre.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/@dagrejs/[email protected]/dist/graphlib.core.js"></script>
	<!-- нет события клика -->
    <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/jointjs/2.1.0/joint.js"></script> -->
	<!-- версия 2.1.4 -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jointjs/2.1.4/joint.js"></script>
<h2>Use the mousewheel to zoom.</h2>

<div id="paper"></div>

CSS

#paper {
    display: inline-block;
    border: 1px solid gray;
}

JavaScript

var graph = new joint.dia.Graph;
var paper = new joint.dia.Paper({ el: '#paper', width: 600,height: 400, model: graph });
(new joint.shapes.basic.Rect).position(100, 100).resize(100, 100).addTo(graph);
(new joint.shapes.basic.Circle).position(300, 150).resize(100, 100).addTo(graph);

paper.$el.on('mousewheel DOMMouseScroll', onMouseWheel);

function onMouseWheel(e) {

    e.preventDefault();
    e = e.originalEvent;

    var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail))) / 50;
    var offsetX = (e.offsetX || e.clientX - $(this).offset().left); // offsetX is not defined in FF
    var offsetY = (e.offsetY || e.clientY - $(this).offset().top); // offsetY is not defined in FF
    var p = offsetToLocalPoint(offsetX, offsetY);
    var newScale = V(paper.viewport).scale().sx + delta; // the current paper scale changed by delta

    if (newScale > 0.4 && newScale < 2) {
        paper.setOrigin(0, 0); // reset the previous viewport translation
        paper.scale(newScale, newScale, p.x, p.y);
    }
}

function offsetToLocalPoint(x, y) {
    var svgPoint = paper.svg.createSVGPoint();
    svgPoint.x = x;
    svgPoint.y = y;
    // Transform point into the viewport coordinate system.
    var pointTransformed = svgPoint.matrixTransform(paper.viewport.getCTM().inverse());
    return pointTransformed;
}