Canvas can do what you’re asking.
Just put 2 canvas’ on top of each other. The bottom canvas is the frame. The top canvas (which is smaller than the frame) is the picture. Then you can animate all you want on the picture. If your animation is simple, you might not even need a canvas library to keep track of your drawn elements. Excellent performance too since you’re not having the DOM track your elements as with SVG.
BTW, you could do the same with 1 canvas drawn on top of an SVG frame if you already have your frame drawn in SVG. Actually, you could even use an image for the frame if you wanted.
Here is code and a Fiddle: http://jsfiddle.net/m1erickson/9Tj3s/
<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style>
body{ background-color: ivory; }
#container{
position:relative;
border:1px solid green;
width:1380px;
height:1315px;
}
#frame{
position:absolute;
top:0px;
left:0px;
border:1px solid red;
}
#picture{
position:absolute;
top:66px;
left:67px;
border:1px solid blue;
}
</style>
<script>
$(function(){
var frame=document.getElementById("frame");
var ctxFrame=frame.getContext("2d");
var picture=document.getElementById("picture");
var ctxPicture=picture.getContext("2d");
var img=new Image();
img.onload=function(){
ctxFrame.drawImage(this,0,0,frame.width,frame.height);
}
img.src="http://www.themezoom-neuroeconomics.com/images/5/5e/Golden-frame.jpg";
var dx= 4;
var dy=4;
var y=150;
var x=10;
function draw(){
ctxPicture.clearRect(0,0,243,182);
ctxPicture.beginPath();
ctxPicture.fillStyle="#0000ff";
ctxPicture.arc(x,y,20,0,Math.PI*2,true);
ctxPicture.closePath();
ctxPicture.fill();
if( x<10 || x>225) dx=-dx;
if( y<10 || y>160) dy=-dy;
x+=dx;
y+=dy;
}
setInterval(draw,60);
}); // end $(function(){});
</script>
</head>
<body>
<div id="container">
<canvas id="frame" width=380 height=315></canvas>
<canvas id="picture" width=243 height=182></canvas>
</div>
</body>
</html>