JSFiddle - React, Tailwind, and code Playground

HTML

<div id="scrollable">
    <div id="centered">
    </div>
</div>
<div>
    <button id="scale3" type="button">
        Scale 3
    </button>
    <button id="scale05" type="button">
        Scale 0.5
    </button>
</div>

CSS

#centered {
    /*background-image: linear-gradient(to bottom,yellow,red);*/
    background: url("http://lorempixel.com/200/200/sports/1/");
    height: 200px;
    transform: scale(1);
    transition: transform 1s ease-out;
    width: 200px;
}

#scrollable {
    align-items: center;
    border: 1px solid red;
    display: flex;
    height: 300px;
    justify-content: center;
    overflow: auto;
    width: 300px;
}

JavaScript

var $div = $("#centered"); 
var parentDimension = [$div.parent().width(), $div.parent().height()];

var setNewOffset = function(){
    
    // get the current scale:
    // thanks to Lea Verou
    // http://stackoverflow.com/a/5604199/3586288
    var matrixRegex = /matrix\((-?\d*\.?\d+),\s*0,\s*0,\s*(-?\d*\.?\d+),\s*0,\s*0\)/,
     matches = $($div).css('transform').match(matrixRegex);
    var scaleX = matches[1]; var scaleY = matches[2];

    var divPos = $div.position();
    console.log($div.position());


    // set x-offset:
    var currentWidth = $div.width() * scaleX;
    var xOff = divPos.left <= 0 ? 
        0 : (parentDimension[0] - currentWidth)/2;

    // set y-offset:
    var currentHeight = $div.height() * scaleY;
    var yOff = divPos.top <= 0 ? 
        0 : (parentDimension[1] - currentHeight)/2;
 
    $div.offset({left: xOff, top: yOff});
    
}

// thanks to Jim Jeffers!
// http://stackoverflow.com/a/9255507/3586288
$("#centered").bind("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd", setNewOffset);

$('#scale3').on('click', function () {
    $('#centered').css({transform: 'scale(3)'});  
});
$('#scale05').on('click', function () {
    $('#centered').css({transform: 'scale(0.5)'});
   
});