JS放大镜(适用于任何像素比)

tech2022-09-22  78

JS放大镜(适用于任何像素比)

HTML:

<div style="display:flex;">     <div id="box1">       <div id="box0"></div>     </div>     <div id="box2">       <div id="box3">       </div>     </div>   </div>

 

CSS:

<style>     * {       margin: 0;       padding: 0;     }     #box0 {       position: absolute;       background-color: rgba(0, 0, 0, .3);       z-index: 1;     }     #box1 {       position: relative;       width: 640px;       height: 452px;       background: url(0.jpg) no-repeat;       background-size: 100%;       overflow: hidden;     }     #box2 {       width: 640px;       height: 452px;       overflow: hidden;     }     #box3 {       width: 3200px;       height: 2260px;       background: url(0.jpg) no-repeat;       background-size: 3200px 2260px;     }   </style>

 

 

JS:

<script>     let box0 = document.getElementById('box0')//放大镜     let box1 = document.getElementById('box1')//缩略图     let box2 = document.getElementById('box2')//原图框     let box3 = document.getElementById('box3')//原图     let sizeWidth = getStyleNum(getStyle(box3, "width")) / getStyleNum(getStyle(box1, "width"))//原图与缩略图的宽度比     let sizeHeight = getStyleNum(getStyle(box3, "height")) / getStyleNum(getStyle(box1, "height"))//原图与缩略图的高度比     window.onload = function () {       box0.style.width = getStyleNum(getStyle(box1, "width")) / sizeWidth + 'px';       box0.style.height = getStyleNum(getStyle(box1, "height")) / sizeHeight + 'px'     }     box1.onmousemove = function (ev) {       let _event = ev || window.event       let left = _event.pageX - box1.offsetLeft       let top = _event.pageY - box1.offsetTop       let minleft = _event.pageX - box1.offsetLeft//放大镜离左侧的最小距离       let minTop = _event.pageY - box1.offsetTop//放大镜离上方的最小距离       let maxleft = box1.offsetWidth - box0.offsetWidth / 2//放大镜离左侧的最大距离       let maxTop = box1.offsetHeight - box0.offsetHeight / 2//放大镜离上方的最大距离       left = left < 0 ? 0 : left;       top = top < 0 ? 0 : top;       if (left <= maxleft && minleft > box0.offsetWidth / 2) {         box0.style.left = (left - box0.offsetWidth / 2) < 0 ? 0 : (left - box0.offsetWidth / 2) + 'px';         box3.style.backgroundPositionX = -sizeWidth * left + sizeWidth * box0.offsetWidth / 2 + 'px';       }       if (top <= maxTop && minTop > box0.offsetHeight / 2) {         box0.style.top = (top - box0.offsetHeight / 2) < 0 ? 0 : (top - box0.offsetHeight / 2) + 'px';         box3.style.backgroundPositionY = -sizeHeight * top + sizeHeight * box0.offsetHeight / 2 + 'px';       }       let leftEnd = (-sizeWidth * left + left) < 0 ? (-sizeWidth * left + left) : (-left + sizeWidth * left)       let topEnd = (-sizeHeight * top + top) < 0 ? (-sizeHeight * top + top) : (-top + sizeHeight * top)     }     //获取dom节点生效的样式值     function getStyle(obj, arr) {       if (window.getComputedStyle) {         return window.getComputedStyle(obj, null)[arr]       }       return ele.currentStyle[arr]     }     //将生效的样式值转为Number     function getStyleNum(Str) {       let ret = Str.split('px')       return ret[0] - 0     }   </script>

 

最新回复(0)