/** * 使用方法 * 加入放大镜的css样式 style 标签 // 放大镜功能插件 var _img = $(".product-detail-image-big>img").magnifier({ ratio: 3, }); // 传入的参数在 var defaults = {} 有定义默认参数 */ // 放大镜插件 (function ($) { $.fn.extend({ "magnifier": function (options) { var defaults = { beginStyle: function (_this) { }, ratio: 2, display: "left", margin: 8, endStyle: function (_this) { }, mover: function (magnifier, zoom) { }, mout: function (magnifier, zoom) { } }; var options = $.extend(defaults, options); var _this = this; if (typeof options.beginStyle === "function") { options.beginStyle(_this); } // 获取left以及top ,还有 zoom 的宽度根高度 定义zoom的div层 _this.mouseover(function (e) { // 首先删除已有的显示层结构 $(".class-zoom-img").each(function (key) { $(this).remove() }); $(".class-zoom").each(function (key) { $(this).remove() }); var X = _this.offset().left; var Y = _this.offset().top; var _zoom_width = parseInt(_this.width() / options.ratio); var _zoom_height = parseInt(_this.height() / options.ratio); var _img_tag = "
"; $("body").append(_img_tag); var _class_coom = $(".class-zoom"); _class_coom.css({"position": "absolute", "z-index": "100", "top": (e.pageY - _zoom_height / 2) + "px", "left": (e.pageX - _zoom_width / 2) + "px", "width": parseInt(_zoom_width - 1) + "px", "height": parseInt(_zoom_height - 1) + "px", "border": "1px solid #BBBBBB", "cursor": "pointer"}); // _class_coom.show(); // 显示放大镜效果时执行的配置方法 if (typeof options.mover === "function") { options.mover(_this, _class_coom); } // 图片显示 if (_class_coom.next(".class-zoom-img").length > 0) { var _coom_img_f = _class_coom.next(".class-zoom-img"); } else { var _img_f = ""; _class_coom.after(_img_f); var _coom_img_f = _class_coom.next(".class-zoom-img"); } var _zoomX = parseInt(_zoom_width / options.ratio); var _zoomY = parseInt(_zoom_height / options.ratio); if (options.display === "left") { var imgX = X + _this.width() + options.margin; var imgY = Y; } else if (options.display === "right") { var imgX = X - _this.width() - options.margin; var imgY = Y; } else { console.log("显示方式只有 左右 两种 (display:\"left\" OR \"right\")"); } _coom_img_f.css({"overflow": "hidden", "width": _this.width() + "px", "height": _this.height() + "px", "position": "absolute", "z-index": "100", "left": imgX + "px", "top": imgY + "px", "background-image": "none"/*url(" + _this.attr("src") + ")*/, "background-repeat": "no-repeat"}); classZoomMove(X, Y, _zoom_width, _zoom_height, e, _class_coom, _coom_img_f); _class_coom.mousemove(function (es) { classZoomMove(X, Y, _zoom_width, _zoom_height, es, _class_coom, _coom_img_f); }); _class_coom.mouseout(function () { // 显示放大镜效果时执行的配置方法 if (typeof options.mout === "function") { options.mout(_this, _class_coom); } $(".class-zoom").each(function (key) { $(this).remove() }); $(".class-zoom-img").each(function (key) { $(this).remove() }); if (typeof options.endStyle === "function") { options.endStyle(_this); } }); $(document).mousemove(function (dme) { var dmeX = dme.pageX; var dmeY = dme.pageY; if ((_class_coom.offset().top - 10) > dmeY || (_class_coom.height() + _class_coom.offset().top + 10) < dmeY) { _class_coom.mouseout(); $(document).unbind('mousemove'); } if ((_class_coom.offset().left - 10) > dmeX || (_class_coom.width() + _class_coom.offset().left + 10) < dmeX) { _class_coom.mouseout(); $(document).unbind('mousemove'); } }); }); function classZoomMove(X, Y, _zoom_width, _zoom_height, e, _class_coom, _coom_img_f) { if ((Y + _this.height() - (_zoom_height / 2)) < e.pageY) { var pointY = Y + _this.height() - _zoom_height; } else if ((Y + (_zoom_height / 2)) > e.pageY) { var pointY = Y; } else { var pointY = (e.pageY - _zoom_height / 2); } if ((X + _this.width() - (_zoom_width / 2)) < e.pageX) { var pointX = X + _this.width() - _zoom_width; } else if (X + (_zoom_width / 2) > e.pageX) { var pointX = X; } else { var pointX = (e.pageX - _zoom_width / 2); } _class_coom.css({"position": "absolute", "top": pointY + "px", "left": pointX + "px"}); var positionX = parseInt((X - _class_coom.offset().left) * options.ratio); var positionY = parseInt((Y - _class_coom.offset().top) * options.ratio); _coom_img_f.children("img").css({"position": "relative", "top": positionY + "px", "left": positionX + "px"}); } } }); })(jQuery);