I'm working on a small zoom plugin, zoom In is working great so far:
<!DOCTYPE html>
<html>
<head>
  <title></title>
  <script
    src="https://code.jquery.com/jquery-2.2.4.min.js"
    integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
    crossorigin="anonymous"></script>
    <style>
      .zoom {
        position: relative;
        width: 400px;
        margin: 0 auto;
        height: 500px;
        overflow: hidden;
      }
      img {
        position: absolute;
        width: 100%;
        top: 0;
        left: 0;
      }
      .container {
        padding-top: 200px;
        width: 50%;
        margin: 0 auto;
        text-align: center;
      }
    </style>
    <script>
      var _scale = 1;
      var defaultWidth;
      var defaultHeight;
      var widget = {
        init: function() {
          setTimeout(function() {
            defaultWidth = $('img').prop('width');
            defaultHeight = $('img').prop('height');
          }, 100);
          $('.zoom').on('click', function(e) {
            var scaleDelta = 0.5;
            var currentScale = _scale;
            var nextScale = currentScale + scaleDelta;
            var mousePosOnImageX = (e.pageX - $('.zoom').offset().left);
            var mousePosOnImageY = (e.pageY - $('.zoom').offset().top);
            var offsetX = -(mousePosOnImageX * scaleDelta);
            var offsetY = -(mousePosOnImageY * scaleDelta);
            offsetX = offsetX + parseFloat($('img').css('left').split('px').join(''));
            offsetY = offsetY + parseFloat($('img').css('top').split('px').join(''));
            $('img').css({
              width: defaultWidth * nextScale,
              height: defaultHeight * nextScale,
              left: offsetX,
              top: offsetY
            });
            _scale = nextScale;
          });
        }
      };
      $(document).ready(function() {
        widget.init();
      });
    </script>
</head>
<body>
  <div class="container">
    <div class="zoom">
      <img src="https://s7d1.scene7.com/is/image/BHLDN/44945368_007_a?$zoom-xl$" />
    </div>
  </div>
</body>
</html>
Demo: http://jsfiddle.net/SySZL/220/
Note: The code is crap, I'm just playing around...
As you can see you can zoom In around a point. It's been 5hours I'm stuck to do the same for zoom Out, I believe it's just the "inverse" of the formula I wrote for zoom In, any thoughts?