If you're up for the challenge, one way to achieve this is by utilizing svg animations with the help of the raphael javascript library. Below is a snippet of code that has been slightly modified from the raphael animation demo, serving as a proof of concept. Keep in mind that you may need to incorporate multiple gradual path animations to achieve your desired effect.
<html>
<head>
<meta charset="utf-8">
<title>Raphaël · Animation</title>
<link rel="stylesheet" href="http://raphaeljs.com/demo.css"media="screen">
<link rel="stylesheet" href="http://raphaeljs.com/demo-print.css"media="print">
<style media="screen">
#holder {
height: 419px;
margin: -205px 0 0 -305px;
width: 619px;
}
</style>
<script src="http://raphaeljs.com/raphael.js"></script>
<script>
Raphael.fn.arrow = function (x, y) {
return this.path(["M", x, y] + "m-10-10l20,0 0-6 10,16 -10,16 0-6 -20,0 0,6 -10-16 10-16z").attr({fill: "#fff", stroke: "none", "stroke-dasharray": "-", "fill-opacity": 0.2});
};
window.onload = function () {
var r = Raphael("holder", 619, 419),
dashed = {fill: "none", stroke: "#666", "stroke-dasharray": "- "};
// Path 3
(function () {
var el = r.path("M20,290c0-20 40,20 40,0").attr({fill: "none", stroke: "#fff", "stroke-width": 2}),
elattrs = [{path: "M20,290c0-20 40,20 40,0c0-20 -40,20 -40,0z"}, {path: "M20,290c0-20 40,20 40,0c"}],
now = 1;
r.arrow(90, 290).node.onclick = function () {
el.stop().animate(elattrs[+(now = !now)], 1000);
};
})();
};
</script>
</head>
<body>
<div id="holder"></div>
</body>
</html>