js 放大镜案例
2021/10/12 23:16:18
本文主要是介绍js 放大镜案例,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
分析和解释都在代码行上
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } .box { margin-left: 100px; height: 1000px; } .box_left { position: relative; width: 300px; } .box_left>img { width: 300px; } .box_right { display: none; position: absolute; top: 0; left: 410px; width: 400px; height: 600px; border: 1px solid #333; overflow: hidden; } .box_right>img { position: absolute; left: 0; top: 0; /* width: 600px; */ /* width: 300px; */ } .meak { display: none; position: absolute; top: 0; left: 0; width: 200px; height: 200px; background: yellow; opacity: .5; } </style> </head> <body> <div class="box"> <div class="box_left"> <img src="./imgaes/1_poster.4aa4c624.jpg" alt=""> <div class="meak"></div> </div> <div class="box_right"> <img id="banimg" src="./imgaes/1_poster.4aa4c624.jpg" alt=""> </div> </div> <script> // 案例分析 // 鼠标移入时 放大镜显示(黄色盒子 和 放大的图显示 // 因 放大镜 定位在了 产品图的上面 他的 lef 和 top 作用于他的父盒子 // 我们需要计算出 鼠标在盒子内的 坐标 然后把坐标 给 放大镜 的 left 和 top // 我们需要让 放大镜 在产品图 盒子里进行移动 并显示 和隐藏 // 大图分析案例在下面对应的代码行 // 先获取属性 var box_left = document.querySelector('.box_left') var meak = document.querySelector('.meak') var box_right = document.querySelector('.box_right') var banimg = document.querySelector('#banimg') // 注册事件 鼠标移入事件 box_left.addEventListener('mouseover', function () { meak.style.display = 'block' box_right.style.display = 'block' }) // 注册事件 鼠标移动事件 box_left.addEventListener('mousemove', function (e) { // 获取鼠标在盒子内的坐标 var x = e.pageX - this.offsetLeft var y = e.pageY - this.offsetTop // 让放大镜盒子 自身向 x 和 y 方向移动自身宽和高的一半 从而得到盒子的移动距离 var meakx = x - meak.offsetWidth / 2 var meaky = y - meak.offsetHeight / 2 // 这里计算出 放大镜在这个 盒子移动的极限距离 (也就是放大镜不能移动出这个盒子) // 用 产品图的 宽和高 减去 盒子的宽和高 就可以得到 盒子的 left 和 top 的最大值 var widthX = this.offsetWidth - meak.offsetWidth var heightY = this.offsetHeight - meak.offsetHeight // 然后用 if 来判断 // 当盒子的 x 小于等于0 就让 盒子的 x 值为 0 // 当盒子的 y 大于等于的 left 的极限值 就让 y = left if (meakx <= 0) { meakx = 0 } else if (meakx >= widthX) { meakx = widthX } if (meaky <= 0) { meaky = 0 } else if (meaky >= heightY) { meaky = heightY } meak.style.left = meakx + 'px' meak.style.top = meaky + 'px' // 现在我们要让大图也跟着移动 // 我们可以利用 产品图与大盒子的比例来判断 // 放大镜的移动距离 大盒子的移动距离 // ------------------ == ------------------ // 放大镜的极限移动距离 大盒子的极限移动距离 // 现在我们已知的条件有 // 放大镜的移动距离、放大镜的极限移动距离、大盒子的极限移动距离 // 所以我们可以推算出 // 大盒子的移动移动距离 = 放大镜的移动距离 * 大盒子的极限移动距离 / 放大镜的极限移动距离 var maximgX = box_right.offsetWidth - banimg.offsetWidth // 大盒子的极限距离 X var maxX = meakx * maximgX / widthX // 大盒子的移动移动距离 X var maximgY = box_right.offsetHeight - banimg.offsetHeight // 大盒子的极限距离 Y var maxY = meaky * maximgY / heightY // 大盒子的移动移动距离 Y // 这里说明一下 大图在移动的时候是与放大镜反方向移动的 所以移动的值为负值 // 我的产品图宽为 300 所以给大图设置了 600 的宽 (当然你不设置也没有问题,但前提得是你的大图的宽高一定要大于产品图,如果你的大图 宽高小于或等于了 产品图 那么在 maxX 和 maxY 的面膜要加 - ,将 left 和 top 变成负值) banimg.style.left = maxX + 'px' banimg.style.top = maxY + 'px' }) // 注册事件 移出事件 box_left.addEventListener('mouseout', function () { meak.style.display = 'none' box_right.style.display = 'none' }) </script> </body> </html>
这篇关于js 放大镜案例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Vue新手入门教程:从零开始学习Vue框架
- 2024-11-23如何集成Ant Design Vue的图标
- 2024-11-23如何集成Ant Design Vue图标
- 2024-11-23使用vue CLI快速搭建Vue项目教程
- 2024-11-23Vue CLI多环境配置简单教程
- 2024-11-23Vue3入门教程:轻松搭建你的第一个Vue3应用
- 2024-11-23Vue3+Vite快速上手指南
- 2024-11-23Vue3阿里系UI组件入门指南
- 2024-11-23Vue3的阿里系UI组件入门指南
- 2024-11-23Vue3公共组件入门教程