var getPoints = function (isDeeper) {
return isDeeper ?
'0 0, 45 0, 150 150, 255 0, 300 0, 300 200, 0 200, 0 0' :
'0 0, 145 0, 150 20, 155 0, 300 0, 300 200, 0 200, 0 0';
};
var pointsToObj = function (points) {
var ps = points.match(/\d+/g).map(Number),
obj = {length: ps.length};
ps.forEach(function (n, i) {
obj['_' + i] = n;
});
return obj;
};
var objToPoints = function (obj) {
var ps = [];
for (var i = 0; i < obj.length; i++)
ps.push(obj['_' + i]);
return ps.join(' ');
};
var renderPoints = function ($element, isDeeper) {
var dest = pointsToObj(getPoints(isDeeper)),
src = pointsToObj($element.attr('points'));
$(src).animate(dest, {
step: function (now, fx) {
src[fx.prop] = fx.now;
$element.attr('points', objToPoints(src));
}
});
};
$(function () {
var $button = $('button');
var $element = $('svg polygon');
var isDeeper = false;
$button.bind('click', function () {
isDeeper = !isDeeper;
renderPoints($element, isDeeper);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<svg width="300" height="200" viewBox="0 0 300 200"
xmlns="http://www.w3.org/2000/svg" version="1.1"
xmlns:xlink="http://www.w3.org/1999/xlink">
<polygon points="0 0, 145 0, 150 20, 155 0, 300 0, 300 200, 0 200, 0 0"/>
</svg>
<button style="position:fixed;top:0;right:0">Click to change</button>