先把原理说一下:首先是两张内容相同的图片a和b,图片a作为原图,图片b作为放大的效果图。
当鼠标在图片a上经过时,按照固定大小截取图片b显示出来。截取的方法很简单,用style的left和top属性就好了。
<html>
<head><style type="text/css">
.zoomPan{width:800px;left:100px;position:relative; }
.sh{zoom:1;background:#eee;filter:progid:DXImageTransform.Microsoft.dropShadow(color='#54000000', OffX=2,OffY=2);-webkit-box-shadow:4px 4px 4px #666;-moz-box-shadow:4px 4px 4px #666;}
#zoom{position:absolute;width:254px;height:254px;border:3px solid #fff;left:-9999px;top:0;overflow:hidden;background:#fff;}
#zoom img{position:relative;}
</style>
</head>
<body>
<div class="zoomPan" id="zoomPan">
<img id="productimage" src="http_imgload.jpg" alt="" />
<div id="zoom" class="sh">
<img id="zoomimg" src="http_imgload.jpg" alt="" />
</div>
</div>
<!--
<div id="jqzoom" style="width:800px;height:663px;">
<img id="productimage" src="http_imgload.jpg" alt="" />
</div>
<div id="zoom" style="display:none;width:200px;height:200px;overflow:hidden;position:absolute;">
<img id="zoomimg" src="http_imgload.jpg" alt="" />
</div>
<script>
function zoomBox() {this.index.apply(this, arguments)}
zoomBox.prototype = {
index: function(win,zoom) {
var win=document.getElementById(win);
var box=document.getElementById(zoom);
var img=box.getElementsByTagName('IMG')[0];
var zoom=img.width/win.getElementsByTagName('IMG')[0].width;
win.οnmοusemοve=function (e){
e = e || window.event;
var x=e.clientX,y=e.clientY, ori=win.getBoundingClientRect();
if (x>ori.right+20||y>ori.bottom+20||x<ori.left-20||y<ori.top-20)box.style.display='none';
x-=ori.left;
y-=ori.top;
box.style.left=x+150+'px';
box.style.top=y+50+'px';
img.style.left=-x*zoom+'px';
img.style.top=-y*zoom+'px';
}
win.οnmοuseοver=function (){box.style.display=''}
}
};
window.οnlοad=function (){
document.getElementById("zoomimg").style.width = document.getElementById("productimage").clientWidth * 1.5 + 'px';
document.getElementById("zoomimg").style.height = document.getElementById("productimage").clientHeight * 1.5 + 'px';
x=new zoomBox('jqzoom','zoom')
}
</script>
-->
</body>
<script type="text/javascript">
function zoomBox() {this.index.apply(this, arguments)}
zoomBox.prototype = {
index: function(win,zoom) {
var win=document.getElementById(win);
var box=document.getElementById(zoom);
var img=box.getElementsByTagName('IMG')[0];
var zoom=img.width/win.getElementsByTagName('IMG')[0].width;
//var z=Math.round(box.offsetWidth/2);
win.οnmοusemοve=function (e){
e = e || window.event;
var x=e.clientX,y=e.clientY, ori=win.getBoundingClientRect();
if (x>ori.right+20||y>ori.bottom+20||x<ori.left-20||y<ori.top-20)box.style.display='none';
x-=ori.left;
y-=ori.top;
box.style.left=x+'px';
box.style.top=y+'px';
img.style.left=-x*zoom+'px';
img.style.top=-y*zoom+'px';
}
win.οnmοuseοver=function (){box.style.display=''}
}
};
window.οnlοad=function (){
document.getElementById("zoomimg").style.width = document.getElementById("productimage").clientWidth * 1.2 + 'px';
document.getElementById("zoomimg").style.height = document.getElementById("productimage").clientHeight * 1.2 + 'px';
x=new zoomBox('zoomPan','zoom')
}
</script>
</html>