Jquery插件——图片放大镜

    偶然前端网发现了一个比较好的图片放大镜效果插件,稍作修改完善了一下,下面分享给大家。

效果还不错,如下图:

技术分享

技术分享


<!DOCTYPE HTML>

<html>

<head>

    <meta charset="UTF-8">

    <title>放大镜</title>

    <style type="text/css">

    body {

        margin:200px;

        background:#000;

    }

    ol, li {

        list-style: none;

        margin:0;

        padding:0;

    }

    .clearfix:after {

        content:"\200B";

        display: block;

        height: 0;

        clear: both;

    }

    .clearfix {

        *zoom:1;

    }

    .magnifier {

        width:402px;

        height:402px;

    }

    .m_image {

        position:relative;

        width:400px;

        height:400px;

        border:1px #634575 solid;

    }

    .m_image li {

        position: absolute;

    }

    .m_image li.now {

        z-index:1;

    }

    .im_zoom {

        background:#FEDE4F 50% top no-repeat;

        opacity:0.5;

        display: block;

        position: absolute;

        width:100px;

        height:100px;

        left:0;

        top:0;

    }

    .im_zoom_viewer {

        position:absolute;

        width:400px;

        height:400px;

        border:1px #634575 solid;

    }

    .m_thumb {

        position:relative;

        width:402px;

        height:57px;

        overflow:hidden;

        margin-top:10px;

    }

    .m_prev, .m_next {

        display:block;

        height:54px;

        width:17px;

        text-indent:-99999em;

        position:absolute;

        z-index:99;

    }

    .m_prev {

 background:url(http://www.w3cfuns.com/data/attachment/album/201403/12/195114anj0yn8hefawepha.png) no-repeat 0 0;

        left:0;

    }

    .m_next {      background:url(http://www.w3cfuns.com/data/attachment/album/201403/12/195114anj0yn8hefawepha.png) no-repeat -17px 0;

        right:0;

    }

    .m_prev:hover {  background:url(http://www.w3cfuns.com/data/attachment/album/201403/12/195114anj0yn8hefawepha.png) no-repeat -34px 0;

        left:0;

    }

    .m_next:hover {    background:url(http://www.w3cfuns.com/data/attachment/album/201403/12/195114anj0yn8hefawepha.png) no-repeat -51px 0;

    }

    .m_thumb_img {

        width:402px;

        height:54px;

        overflow: hidden;

        margin-left:17px;

        position:relative;

    }

    .m_thumb_img ol {

        position:absolute;

        width:300%;

    }

    .m_thumb_img li {

        width:54px;

        height:54px;

        float:left;

        margin:0 10px;

    }

    .m_thumb_img a {

        border:2px #a6ad88 solid;

        display:block;

        height:50px;

        float:left;

    }

    .m_thumb_img a:hover, .m_thumb_img .now {

        border:2px #f60 solid;

    }

    </style>

</head>

<body>

    <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>

    <script type="text/javascript">

    (function($) {

        var methods = {

            magnifier: function(options) {

                return this.each(function() {

                    var defaults = {

                        zoomWidth: 100,

                        zoomHeight: 100,

                        largeImgWidth: 400,

                        largeImgHeight: 400

                    },

                        settings = $.extend({}, defaults, options),

                        _body = $(‘body‘),

                        _This = $(this),

                        _imgBox = _This.find(‘.m_image‘),

                        _imgShow = _imgBox.find(‘img‘),

                        _thumbContent = _This.find(‘.m_thumb‘),

                        _thumbList = _thumbContent.find(‘ol‘),

                        _thumbLiLeft = _thumbContent.find(‘li‘).eq(0).css("margin-left"),

                        _thumbLiRight = _thumbContent.find(‘li‘).eq(0).css("margin-right"),

                        _thumbLRWidth = parseInt(_thumbLiLeft) + parseInt(_thumbLiRight),

                        _thumbWidth = _thumbList.find(‘a‘)[0].offsetWidth,

                        _thumbImg = _thumbContent.find(‘img‘),

                        _prev = _thumbContent.find(‘.m_prev‘),

                        _next = _thumbContent.find(‘.m_next‘),

                        _width = _imgBox.width(),

                        _height = _imgBox.height(),

                        _positionX = _This.offset().left,

                        _positionY = _This.offset().top,

                        count = moveLen = 0,

                        _img = new Image();


                    _thumbList.find(‘a‘).on(‘click‘, function(event) {

                        var _this = $(this),

                            _src = _this.find(‘img‘).attr(‘src‘);

                        _img.src = _src;

                        $(‘.im_zoom_viewer‘).css({

                            background: ‘url(‘ + _src + ‘) no-repeat‘

                        });

                        _thumbList.find(‘a‘).removeClass(‘now‘);

                        _this.addClass(‘now‘);

                        _imgShow.attr(‘src‘, _src);

                    });


                    _imgBox.on({

                        mouseenter: function(event) {

                            var _this = $(this),

                                _zoomX = event.pageX - _positionX - (settings.zoomWidth / 2),

                                _zoomY = event.pageY - _positionY - (settings.zoomHeight / 2),

                                _imgSrc = _imgBox.find(‘img‘).attr(‘src‘);

                            _this.css("cursor", "move").append(‘<span class="im_zoom" style="left:‘ + _zoomX + ‘px;top:‘ + _zoomY + ‘px;"></span>‘);


                            if (!_body.find(‘.im_zoom_viewer‘).length) {

                                _body.append(‘<div class="im_zoom_viewer" style="left:‘ + (_width + _positionX + 20) + ‘px;top:‘ + _positionY + ‘px;"></div>‘);


                                $(‘.im_zoom_viewer‘).css({

                                    background: ‘url(‘ + _imgSrc + ‘) no-repeat‘

                                });

                                _img.src = _imgSrc;

                            }

                        },

                        mouseleave: function(event) {

                            var _this = $(this);

                            _this.find(‘.im_zoom‘).remove();

                            _body.find(‘.im_zoom_viewer‘).hide();

                        },

                        mousemove: function(event) {

                            var _this = $(this),

                                _zoomX = event.pageX - _positionX - (settings.zoomWidth / 2),

                                _zoomY = event.pageY - _positionY - (settings.zoomHeight / 2);

                            if (_zoomX < 0) {

                                _zoomX = 0;

                            } else if (_zoomX > _width - settings.zoomWidth) {

                                _zoomX = _width - settings.zoomWidth;

                            };


                            if (_zoomY < 0) {

                                _zoomY = 0;

                            } else if (_zoomY > _height - settings.zoomHeight) {

                                _zoomY = _height - settings.zoomHeight;

                            };

                            console.log(_img.width)


                            var _viewX = Math.ceil(parseInt($(‘.im_zoom‘)[0].style.left) / (_width - settings.zoomWidth) * (_img.width - _width)),

                                _viewY = Math.ceil(parseInt($(‘.im_zoom‘)[0].style.top) / (_height - settings.zoomHeight) * (_img.height - _width));


                            $(‘.im_zoom‘).css({

                                left: _zoomX,

                                top: _zoomY

                            });


                            $(‘.im_zoom_viewer‘).css({

                                ‘display‘: ‘block‘,

                                ‘background-position‘: -_viewX + ‘px ‘ + -_viewY + ‘px‘

                            });

                        }

                    });


                    if (_thumbImg.length < 5) {

                        _next.css({

                            ‘background-position‘: ‘-85px 0‘

                        });

                        _prev.css({

                            ‘background-position‘: ‘-68px 0‘

                        });


                    }


                    _next.on(‘click‘, function(event) {

                        event.preventDefault();

                        var _this = $(this),

                            len = _thumbList.find(‘a‘).length;

                        if (count < len - 5) {

                            _prev.removeAttr(‘style‘);

                            moveLen += _thumbWidth + _thumbLRWidth;

                            _thumbList.stop().animate({

                                "left": -moveLen

                            }, 100, ‘linear‘);

                            count++;

                            if (count === len - 5) {

                                _this.css({

                                    ‘background-position‘: ‘-85px 0‘

                                });

                            }

                        }

                    });


                    _prev.on(‘click‘, function(event) {

                        event.preventDefault();

                        var _this = $(this),

                            len = _thumbList.find(‘a‘).length;

                        if (count > 0) {

                            _next.removeAttr(‘style‘);

                            moveLen -= _thumbWidth + _thumbLRWidth;

                            _thumbList.stop().animate({

                                "left": -moveLen

                            }, 100, ‘linear‘);

                            count--;

                            if (count === 0) {

                                _this.css({

                                    ‘background-position‘: ‘-68px 0‘

                                });

                            }

                        }

                    });

                });

            }

        };


        $.fn.Plugins = function(method) {

            //初始化插件

            if (methods[method]) {

                return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));

            } else {

                $.error(‘在Plugins中不存在‘ + method + ‘方法‘);

            }

        }

    })(jQuery);

    </script>

    <script type="text/javascript">

    $(function() {

        /*

            zoomWidth : 遮罩小图片宽度

            zoomHeight : 遮罩小图片高度,

            largeImgWidth : 大图的宽度,

            largeImgHeight : 大图的高度,   

        */

        $(‘.magnifier‘).Plugins(‘magnifier‘, {

            zoomWidth: 100,

            zoomHeight: 100,

            largeImgWidth: 400,

            largeImgHeight: 400

        });

    })

    </script>


    <div class="magnifier">

        <div class="m_image">

            <img src="http://www.w3cfuns.com/data/attachment/album/201403/12/195113nodqe4i31e6eiwi4.jpg" width="400" height="400" />

        </div>

        <div class="m_thumb">

            <a href="javascript:;" class="m_prev">prev</a>

            <a href="javascript:;" class="m_next">next</a>

            <div class="m_thumb_img">

                <ol class="clearfix">

                    <li>

                        <a href="javascript:;" class="now">

                            <img src="http://www.w3cfuns.com/data/attachment/album/201403/12/195113nodqe4i31e6eiwi4.jpg" width="50" height="50" />

                        </a>

                    </li>

                    <li>

                        <a href="javascript:;">

                            <img src="http://www.w3cfuns.com/data/attachment/album/201403/12/195039acx13fuy2mkuy8mx.jpg" width="50" height="50" />

                        </a>

                    </li>

                    <li>

                        <a href="javascript:;">

                            <img src="http://www.w3cfuns.com/data/attachment/album/201403/12/195011cn7uu0pcxutpwnkp.jpg" width="50" height="50" />

                        </a>

                    </li>

                    <li>

                        <a href="javascript:;">

                            <img src="http://www.w3cfuns.com/data/attachment/album/201403/12/194956yv7w9vm44v4794f9.jpg" width="50" height="50" />

                        </a>

                    </li>

                    <li>

                        <a href="javascript:;">

                            <img src="http://www.w3cfuns.com/data/attachment/album/201403/12/194914rj7wl297y9u24rla.jpg" width="50" height="50" />

                        </a>

                    </li>

                    <li>

                        <a href="javascript:;">

                            <img src="http://www.w3cfuns.com/data/attachment/album/201403/12/194940cutwe9tbgqu9wqqw.jpg" width="50" height="50" />

                        </a>

                    </li>

                </ol>

            </div>

        </div>

    </div>

</body>

</html>


参考原文地址:http://www.w3cfuns.com/article-5599770-1-1.html

本文出自 “7439523” 博客,请务必保留此出处http://7449523.blog.51cto.com/7439523/1607722

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。