e 1 ano atrás
pai
commit
9095cdbfc2
1 arquivos alterados com 102 adições e 0 exclusões
  1. 102 0
      js/DOM/9.放大镜.html

+ 102 - 0
js/DOM/9.放大镜.html

@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Document</title>
+    <style>
+        * {
+            margin: 0;
+            padding: 0;
+            list-style: none;
+            text-decoration: none;
+            box-sizing: border-box;
+        }
+        #container {
+            position: relative;
+        }
+        #small {
+            width: 400px;
+            height: 400px;
+            position: relative;
+        }
+        #big {
+            position: absolute;
+            top: 0;
+            left: 400px;
+            width: 400px;
+            height: 400px;
+            overflow: hidden;
+            display: none;
+        }
+        #drag {
+            width: 200px;
+            height: 200px;
+            background:rgba(0,0,0,.3);
+            position: absolute;
+            top: 0;
+            left: 0;
+            display: none;
+        }
+        #bigImg {
+            position:absolute;
+        }
+    </style>
+</head>
+<body>
+    <div id="container">
+        <div id="small">
+            <img src="./images/6.jpg" alt="">
+            <div id="drag"></div>
+        </div>
+        <div id="big">
+            <img src="./images/7.jpg" id="bigImg" alt="">
+        </div>
+    </div>
+    <script>
+        var drag = document.getElementById("drag");
+        var small = document.getElementById("small");
+        var bigImg = document.getElementById("bigImg");
+        var big = document.getElementById("big");
+        // 思路:鼠标移入小盒子时 遮罩显示 大盒子显示
+        // 鼠标移出小盒子是 遮罩隐藏 大盒子隐藏
+        small.onmouseover = function() {
+            drag.style.display = 'block';
+            big.style.display = 'block';
+        }
+        small.onmouseout = function() {
+            drag.style.display = 'none';
+            big.style.display = 'none';
+        }
+        small.onmousemove = function(e) {
+            var smallLeft = e.clientX - drag.offsetWidth / 2;
+            var smallTop = e.clientY - drag.offsetHeight / 2;
+            drag.style.top = smallTop + 'px';
+            drag.style.left = smallLeft + 'px';
+            if(drag.offsetTop <=0) {
+                drag.style.top = 0;
+            }
+            if(drag.offsetLeft <=0) {
+                drag.style.left = 0;
+            }
+            // 思路:求出遮罩最大可移动的范围
+            var maxLeft = small.offsetWidth - drag.offsetWidth;
+            var maxTop = small.offsetHeight - drag.offsetHeight;
+            if(drag.offsetLeft > maxLeft) {
+                drag.style.left = maxLeft + 'px';
+            }
+            if(drag.offsetTop > maxTop) {
+                drag.style.top = maxTop + 'px';
+            }
+            // 思路:求出大盒子最大可移动的范围
+            var bigLeft = bigImg.offsetWidth - big.offsetWidth;
+            var bigTop = bigImg.offsetHeight - big.offsetHeight;
+            var x = drag.offsetLeft / maxLeft;
+            var y = drag.offsetTop / maxTop;
+            bigImg.style.left = -x * bigLeft + 'px';
+            bigImg.style.top = -y * bigTop + 'px';
+            console.log(drag.offsetLeft)
+        }
+    </script>
+</body>
+</html>