• javascript图片放大镜效果展示


    javascript图片放大镜效果展示

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
            .box {
                 350px;
                height: 350px;
                margin:100px;
                border: 1px solid #ccc;
                position: relative;
            }
            .big {
                 400px;
                height: 400px;
                position: absolute;
                top: 0;
                left: 360px;
                border: 1px solid #ccc;
                overflow: hidden;
                display: none;
            }
            .mask {
                 175px;
                height: 175px;
                background: rgba(255, 255, 0, 0.4);
                position: absolute;
                top: 0;
                left: 0;
                cursor: move;
                display: none;
            }
            .small {
                position: relative;
            }
            img {
                vertical-align: top;
            }
        </style>
    
        <script src="animate.js"></script>
        <script>
            window.onload = function () {
                //需求:鼠标放到小盒子上,让大盒子里面的图片和我们同步等比例移动。
                //技术点:onmouseenter==onmouseover 第一个不冒泡
                //技术点:onmouseleave==onmouseout  第一个不冒泡
                //步骤:
                //1.鼠标放上去显示盒子,移开隐藏盒子。
                //2.老三步和新五步(黄盒子跟随移动)
                //3.右侧的大图片,等比例移动。
    
                //0.获取相关元素
                var box = document.getElementsByClassName("box")[0];
                var small = box.firstElementChild || box.firstChild;
                var big = box.children[1];
                var mask = small.children[1];
                var bigImg = big.children[0];
    
                //1.鼠标放上去显示盒子,移开隐藏盒子。(为小盒子绑定事件)
                small.onmouseenter = function () {
                    //封装好方法调用:显示元素
                    show(mask);
                    show(big);
                }
                small.onmouseleave = function () {
                    //封装好方法调用:隐藏元素
                    hide(mask);
                    hide(big);
                }
    
                //2.老三步和新五步(黄盒子跟随移动)
                //绑定的事件是onmousemove,而事件源是small(只要在小盒子上移动1像素,黄盒子也要跟随)
                small.onmousemove = function (event) {
                    //想移动黄盒子,必须知道鼠标在small中的位置。x作为mask的left值,y作mask的top值。
                    //新五步
                    event = event || window.event;
                    var pagex = event.pageX || scroll().left + event.clientX;
                    var pagey = event.pageY || scroll().top + event.clientY;
                    //让鼠标在黄盒子最中间,减去黄盒子宽高的一半
                    var x = pagex - box.offsetLeft - mask.offsetWidth/2;
                    var y = pagey - box.offsetTop - mask.offsetHeight/2;
                    //限制换盒子的范围
                    //left取值为大于0,小盒子的宽-mask的宽。
                    if(x<0){
                        x = 0;
                    }
                    if(x>small.offsetWidth-mask.offsetWidth){
                        x = small.offsetWidth-mask.offsetWidth;
                    }
                    //top同理。
                    if(y<0){
                        y = 0;
                    }
                    if(y>small.offsetHeight-mask.offsetHeight){
                        y = small.offsetHeight-mask.offsetHeight;
                    }
                    //移动黄盒子
                    console.log(small.offsetHeight);
                    mask.style.left = x + "px";
                    mask.style.top = y + "px";
    
                    //3.右侧的大图片,等比例移动。
                    //如何移动大图片?等比例移动。
                    //    大图片/大盒子 = 小图片/mask盒子
                    //    大图片走的距离/mask走的距离 = (大图片-大盒子)/(小图片-黄盒子)
    //                var bili = (bigImg.offsetWidth-big.offsetWidth)/(small.offsetWidth-mask.offsetWidth);
    
                    //大图片走的距离/mask盒子都的距离 = 大图片/小图片
                    var bili = bigImg.offsetWidth/small.offsetWidth;
    
                    var xx = bili*x;
                    var yy = bili*y;
    
    
                    bigImg.style.marginTop = -yy+"px";
                    bigImg.style.marginLeft = -xx+"px";
                }
    
    
    
    
    
            }
        </script>
    </head>
    <body>
        <div class="box">
            <div class="small">
                <img src="images/001.jpg" alt=""/>
                <div class="mask"></div>
            </div>
            <div class="big">
                <img src="images/0001.jpg" alt=""/>
            </div>
        </div>
    </body>
    </html>
    

      javascript引出

    //显示
    function show(ele){
    	ele.style.display="block";
    }
    
    //隐藏
    function hide(ele){
    	ele.style.display="none";
    }
    
    //动画效果的基本原理
    function animate(ele,target){
    	clearInterval(ele.timer);
    
    	ele.timer=setInterval(function(){
    
    		var step=(target-ele.offsetTop)/10;
    
    		step=step>0?Math.ceil(step):Math.floor(step);
    
    		ele.style.top=ele.offsetTop+step+"px";
    
    		if (Math.abs(target-ele.offsetTop)<Math.abs(step)) {
    			ele.style.top=target+"px";
    			clearInterval(ele.timer);
    		}
    
    
    	},25)
    
    }
    
    
    function scroll(){
    	if (window.pageYOffset!=null) {
    
    		return{
    			left:window.pageXOffset,
    			top:window.pageYOffset
    		}
    
    	}else if (document.compatMode==="Css1compat") {
    		return{
    			left:document.documentElement.scrollLeft,
    			top:document.documentElement.scrollTop
    		}
    	}else{
    		return{
    			left:document.body.scrollLeft,
    			top:document.body.scrollTop	
    		}
    
    	}
    
    }
    

      

  • 相关阅读:
    Python-温度的转换
    这些Servlet知识你一定要知道,金九银十大厂面试官都爱问
    【建议收藏】一份阿里大牛花了三天整理出来的XML学习笔记,写的非常详细
    一年六个月十八天,从外包到字节跳动客户端提前批,没想到我也能够逆袭
    面试官:小伙子,你能给我说一下HashMap的实现原理吗?
    盘点一下面试官最爱问的泛型和包装类,建议反复观看,真的写的非常详细
    深度分析:面试阿里,字节跳动,美团90%被问到的List集合,看完还不懂算我输
    2020阿里Java面试题目大汇总,看看你离阿里还有多远,附答案!
    不会吧,你连Java 多线程线程安全都还没搞明白,难怪你面试总不过
    java开发两年,连Spring中bean的装配都不知道?你怎么涨薪啊
  • 原文地址:https://www.cnblogs.com/sj1988/p/6639860.html
Copyright © 2020-2023  润新知