练习-放大镜效果
<!DOCTYPE html> <html lang="en"> <!-- 这个放大镜效果只是固定图像到左上角,一旦图片更换位置就必须修改代码 --> <head> <meta charset="UTF-8"> <title>Document</title> <script src="../jquery1.8.3/jquery.min.js"> </script> <style> * {margin: 0; padding: 0; } #min {width: 350px; border: 1px solid skyblue;} #max {width: 350px; height: 350px; position: absolute; overflow: hidden; display: none;} #inner {width: 100px; height: 100px; position: absolute; top: 0; left: 0; background: rgba(0, 0, 0, .4); display: none;} </style> </head> <body> <img src="images/loupe.jpg" id="min" alt=""> <div id="max"> <img src="images/loupe.jpg" alt=""></div> <div id="inner"></div> <script> $(document).mouseover(function() { var p = $('#min').offset(); var w = $('#min').width(); $('#max').css({ top: p.top, left: p.left + w + 5 }).show(); }).mousemove(function(e) { $('#inner').css({ // 在移动的同时检测边界 top: pointY(e.pageY - 50), left: pointX(e.pageX - 50) }).mousemove(function(e) { $('#max').scrollTop((e.pageY-$('#min').offset().top) * 10 -175) .scrollLeft((e.pageX-$('#min').offset().left) * 10 - 175); }).show(); //判断鼠标是否越界,越过即隐藏遮罩层和右侧大图 if(e.pageY>247 || e.pageY<=5 || e.pageX>350 ){ $('#max').hide(); $('#inner').hide(); } }); /* 处理边界 因为鼠标的移动是一种综合移动,同时包含了x轴和y轴的两个方向的值, 那么把X轴和Y轴都分成两个部分来计算。各半部分控制一边的边界。
--这里我用到了之前练习时候的小人移动的知识来解决这个边界问题。事实上也是不完美的,没有解决在任何位置的边界问题,
也就是说,如果这个图片移动位置了,图片改变大小了,要重写。这个说法应该叫封装吧,下次找机会修改一下。 */ function pointY(point){ return point>70?Math.min(point,147):Math.max(point,1); } function pointX(point){ return point>125?Math.min(point,250):Math.max(point,1); } </script> </body> </html>
在线地址:http://www.yupinghua.com/practices/components/loupe.html