仿淘宝商品图片放大镜效果(鼠标移动上去会出现放大的图片,并且可以移动)...

    *{
        margin:0;
        padding:0;    
    }
    
    ul li{
        list-style-type:none;    
    }
    
    #content{
        width:950px;
        margin:20px;    
    }
    
    #magnifier{
        width:460px;
        height:460px;
        border:1px solid #eee;
        position:relative;
    }
    
    #magnifier span{
        width:230px;
        height:150px;
        background:url(http://img04.taobaocdn.com/tps/i4/T12pdtXaldXXXXXXXX-2-2.png);
        position:absolute;    
        display:none;
        cursor:move;
    }
    
    #magnifier .small_img{
        position:absolute;
        background:red;
        font-size:0; /* 休正IE 67 图片下方一个像素BUG*/
    }
    
    #magnifier .big_img{
        position:absolute;
        width:400px;
        height:260px;
        left:465px;
        top:0px;
        border:1px solid #eee;
        display:none;
        overflow:hidden;
    }
    
    #magnifier .big_img img{
        display:block;
        position:absolute;
        left:0;
        top:0;
    }
  <div id="magnifier">
            
            <!-- -->
            <div class="small_img">
                <img src="http://img04.taobaocdn.com/bao/uploaded/i4/14935023161110472/T13uaJXvtcXXXXXXXX_!!0-item_pic.jpg_460x460.jpg" />
            </div>
            
            <div class="big_img">
                <img src="http://img04.taobaocdn.com/bao/uploaded/i4/14935023161110472/T13uaJXvtcXXXXXXXX_!!0-item_pic.jpg" />
            </div>
            
            <span class="float"></span>
        </div>
        
window.onload = function(){
        
        magnifier();
        
        function magnifier(){
            //获取DOM
            var migni = document.getElementById('magnifier'); //最外层DIV
            
            var sLayer = migni.getElementsByTagName('div')[0]; //左边小的图片容器
            var bLayer = migni.getElementsByTagName('div')[1]; //右边大的图片容器
            
            var flt = migni.getElementsByTagName('span')[0]; // 跟随鼠标移动的浮动层
            
            var smallImg = sLayer.getElementsByTagName('img')[0]; //800*800的大图
            var bigImg = bLayer.getElementsByTagName('img')[0]; //800*800的大图
            
            
            
            //注册事件
            migni.onmouseover = function(e){
            
                // 休正事件对象
                var evt = fixEvent(e);
                
                //当鼠标在migni里快速的移动,鼠标会在flt和smallImg中快速切换,不断触发事件和事件冒泡间接的触发事件。需要屏蔽掉。
                if(evt.relatedTarget == flt || evt.relatedTarget == smallImg) return false;
                
                flt.style.display = 'block';
                
                bLayer.style.display = 'block';
            }
            
            migni.onmouseout = function(e){
                
            
                var evt = fixEvent(e);
                
                if(evt.relatedTarget == flt || evt.relatedTarget == smallImg) return false;
                
                flt.style.display = 'none';
                
                bLayer.style.display = 'none';
            }
            
            
            migni.onmousemove = function(e){ //事件必须绑定在外层上,否则鼠标在 flt上移动,事件不会冒泡到migni上
                
                var evt = fixEvent(e);
                var l = evt.pageX - migni.offsetLeft - flt.offsetWidth/2;
                var t = evt.pageY - migni.offsetTop - flt.offsetHeight/2;
                
                
                // 给 flt设置活动范围
                if(l<0){
                    l=0;    
                }else if(l>migni.offsetWidth - flt.offsetWidth){
                    l = migni.offsetWidth - flt.offsetWidth;    
                }
                
                if(t<0){
                    t=0;    
                }else if(t>migni.offsetHeight - flt.offsetHeight){
                    t= migni.offsetHeight - flt.offsetHeight;
                }
                
                //设置浮动层的位置
                flt.style.left = l + 'px';
                flt.style.top = t + 'px';
                //console.log(e.pageX);
                
                
                //设置大图的位置。
                
                bigImg.style.left = -(l/smallImg.offsetWidth * bigImg.offsetWidth) + 'px';
                bigImg.style.top = -(t/smallImg.offsetHeight * bigImg.offsetHeight) + 'px'
                
            }
            
            //修正事件对象,处理兼容性
            function fixEvent(evt){
                
                var e = evt || window.event;
                
                if(!e.target){  //IE
                
                    if(e.type == 'mouseover'){
                        e.relatedTarget = e.fromElement;    
                    }else if(e.type == 'mouseout'){
                        e.relatedTarget = e.toElement;
                    }
                    
                    e.pageX = document.documentElement.scrollLeft + e.clientX;
                    e.pageY = document.documentElement.scrollTop + e.clientY;
                }
                    
                    
                
                return e;
                
            }
            
        }
    }
    

IE 6 和 IE7下,移动不是很流畅,暂时没解决。但是可以用。

转载于:https://www.cnblogs.com/iu90/archive/2013/05/22/3093299.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值