目录
一、需求描述
二、实现效果
三、完整代码
四、实现过程
1、HTML 页面结构
2、CSS 元素样式
3、JavaScript动态控制
(1)获取元素
(2)控制大图和遮罩层的显隐性
(3)遮罩层跟随鼠标移动
(4)控制遮罩层移动范围
(5)显示放大图
前端实现放大镜效果;
初始效果
放大效果
【test.html】
放大镜效果
一个原图片的盒子【div元素】,里面放原图【img元素】和遮罩层【div元素】
一个放大后的图片盒子【div元素】,里面放大图【img元素】;
(1)两个盒子及图片样式
这里设置原图的宽高均为300px;大图的宽高是原图的三倍;
【 cursor: move; 】使得鼠标在移入图片变成“移动”样式;
【overflow: hidden;】使得图片超出盒子部分被隐藏(大图);
注意,大图盒子最初的的display的值应设为none,显隐性由鼠标移入或移出图片决定;
.one-img-box, .big-img-box { position: relative; width: 300px; height: 300px; box-shadow: 0 0 6px 1px #cacaca; border-radius: 10px; overflow: hidden; } .one-img-box { display: inline-block; top: 60px; left: 60px; cursor: move; } .one-img-box>img { width: 100%; height: 100%; } .big-img-box { display: inline-block; top: 60px; left: 100px; } .big-img-box>img { width: 300%; height: 300%; } .big-img { position: absolute; left: 0; top: 0; }
(2)遮罩层样式
遮罩层使用绝对定位,根据鼠标的移动位置,再更改其left和top值,使遮罩层跟随鼠标移动;
注意:遮罩层最初不显示,display的值也应设为none;
.mask { display: inline-block; position: absolute; left: 0; top: 0; width: 100px; height: 100px; background-color: yellowgreen; opacity: .4; }
注意:
原图的宽高均为300px;遮罩层的宽高均为100px;遮罩层与原图的宽高比例都是1 :3;
放大图的盒子和大图的比例需要一致(1 :3),所以大图的宽高应该均为900px;
这里的比例如果不一致,则会出现,遮罩层覆盖的内容,在大图中没有完全显示,或显示不全;当然可以自定义这个比例;
将页面中需要操作的元素都进行获取;
这里使用的是querySelector()方法来获取元素,是JavaScript中获取dom元素的方式之一;
先设置大图盒子和遮罩层的display 为 none;
...... .big-img-box { /* display: inline-block; */ display: none; ...... } .mask { /* display: inline-block; */ display: none; ...... } ......
分析需求可知:
分析需求可知:
注意:
这里存在一个问题,就是当鼠标靠近图片边缘的时候,遮罩层会继续移动,被裁剪;
应该加以判断,控制遮罩层的移动范围,使得遮罩层不会被移出去;
分析需求可知:
分析需求可知:
=========================================================================
每天进步一点点~!
记录一下这个实用的前端"小轮子"~!