京东放大镜效果

开始以为是很难的事情,结果可以用别的思维去解决的,就显得很简单辣其实,比如说,图片放大,是本来的图片的大小,然后进行一个移动产生,所以UI很重要,这样子,js写起来才轻松多一点

主要的js代码如下:

function bigImg () {
        
        var $mask = $("#mask");
        var $maskTop = $("#maskTop");
        var $loading = $("#loading");
        var $largeImg = $("#largeImg");
        var $mediumImg = $("#mediumImg");
        //小黄块的宽高
        var maskWidth = $mask.width();
        var maskHeight = $mask.height();
        //移动区域
        var maskTopWidth = $maskTop.width();
        var maskTopHeight = $maskTop.height();
        
        var $largeImgContainer = $("#largeImgContainer");
        
        
        
        
        $maskTop.hover(function(){
            
            
            $mask.show();
            
            var src = $mediumImg.attr('src').replace('-m.', '-l.')
              $largeImg.attr('src', src)
            $largeImgContainer.show();
            //显示小黄块之后,等待加载大图出来再进行小黄块的移动
            $largeImg.on('load',function () {
                
                //得到大图的尺寸
                var largeImgWidth = $largeImg.width();
                var largeImgHeight = $largeImg.height();
                
                //大图容器的尺寸是大图的二分之一
                $largeImgContainer.css({
                    largeImgWidth/2,
                    height:largeImgHeight/2
                })
                
                $largeImg.show();
                $loading.hide();
                
                
                $maskTop.mousemove(function(event){
                event = event || window.event
                var eventLeft = event.offsetX;
                var eventTop = event.offsetY;
                
                //定位把小黄块中心点到当前鼠标的位置,从而实现移动
                var left = eventLeft - maskWidth/2;
                var top = eventTop - maskHeight/2;
                
                if(left<0 ){
                    left = 0;
                }else if(left > maskTopWidth-maskWidth){
                    left = maskTopWidth-maskWidth;
                }
                
                if(top<0){
                    top = 0;
                }else if (top>maskTopHeight-maskHeight) {
                    top = maskTopHeight - maskHeight;
                }
                
                //设置小黄块的位置
                $mask.css({
                    left:left,
                    top:top
                })
                
                left = -left *  largeImgWidth / maskTopWidth;
                top = -top * largeImgHeight / maskTopHeight;
                $largeImg.css({
                    left:left,
                    top:top
                })
            })
            })
            
            
        },function(){
            $mask.hide();
            $largeImg.hide();
            $largeImgContainer.hide();
        })
        
        
        
        
    }
    
原文地址:https://www.cnblogs.com/caicaihong/p/9542669.html