var ImgZoom = function (image, viewer, options) { this._init(image, viewer, options); } ImgZoom.prototype = { _init: function (image, viewer, options) { this._image = $$O.byId(image); //原图 this._viewer = $$O.byId(viewer); //显示框 this._initViewer(); this._MOVE = $$F.bindAsEventListener(this._move, this); // $$E.addEvent(this._image, "mousemove", this._MOVE); $$E.addEvent(document, "mousemove", this._MOVE); }, _initViewer: function () { //初始化显示框 var viewer = this._viewer; $(viewer).css({ "padding": 0, "overflow": "hidden", "position": "absolute" }); //显示图 this._zoom = document.createElement("img"); this._zoom.src = this._image.src; $(this._zoom).css("position", "absolute"); if (!viewer.contains(this._zoom)) { viewer.appendChild(this._zoom); } }, _move: function (e) {//移动 var self = this, image = this._image, zoom = this._zoom, viewer = this._viewer, x = e.pageX, y = e.pageY; //原图位置 var imageRect = { top: parseInt($(image).offset().top), left: parseInt($(image).offset().left), width: parseInt($(image).width()), height: parseInt($(image).height()) }; $(viewer).show(); if (x > imageRect.left + imageRect.width || x < imageRect.left || y > imageRect.top + imageRect.height || y < imageRect.top) { $(viewer).hide(); } var pos = { //(x - imageRect.left):相对图片的位置 //zoom.width / imageRect.width:原图、显示图的比例 //viewer.offsetWidth:显示框的宽度,因为需要将图片放到正中央显示,因此 viewer.offsetWidth / 2 left: viewer.offsetWidth / 2 - (x - imageRect.left) * (zoom.width / imageRect.width), top: viewer.offsetHeight / 2 - (y - imageRect.top) * (zoom.height / imageRect.height) }; // $$P.log("log", "viewer.offsetWidth=" + viewer.offsetWidth); x = Math.ceil(Math.min(Math.max(pos.left, viewer.offsetWidth - zoom.width), 0)); y = Math.ceil(Math.min(Math.max(pos.top, viewer.offsetHeight - zoom.height), 0)); zoom.style.left = x + "px"; zoom.style.top = y + "px"; } }
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <style type="text/css"> .container { position: relative; } .izImage { width: 300px; cursor: crosshair; } .izImage, .izViewer { border: 1px solid #000; <!-- background: #fff url(http://images.cnblogs.com/cnblogs_com/cloudgamer/169629/o_loading.gif) no-repeat center;--> } .izViewer { width: 400px; height: 400px; position: absolute; left: 320px; top: 0px; display: none; } .izViewer div { position: absolute; border: dashed 1px #999; top: 0px; left: 0px; z-index: 999; width: 100%; height: 100%; } </style> </head> <body> <div class="container"> <img alt="../../../images/DSCN0015.JPG" id="idImage" class="izImage" src="../../../images/DSCN0015.JPG" /> <div id="idViewer" class="izViewer"></div> </div> <div id="log"></div> </body> <script src="../../../js/jquery-1.7.2.min.js" type="text/javascript"></script> <!--<script src="../../../js/jquery-1.10.2.min.js"></script> <!--jq 1.9 以上版本,废除了 live,用$.on()代替--> <!--<script src="../../../js/jquery-migrate-1.2.1.min.js"></script>--> <!--加上该引用后可以继续用--> <script src="../../../js/jone.js" type="text/javascript"></script> <script src="ZoomImage_wzq.js" type="text/javascript"></script> <script type="text/javascript"> var iz = new ImgZoom("idImage", "idViewer", {}); </script> </html>