【帆软FR】图片放大镜、缩小镜效果

楼主
分享常见解决方案,仅供个人参考使用!
一、描述
展示商品图片的细节时,预览的时候想要等比例的放大、缩小展示所在图片的区域细节。

二、实现思路
2.1 页面元素原图、大图片、小图片、悬浮的元素(放大镜缩小镜)

<div id="small-box">
<!--悬浮元素-->  
<div id="float-box"></div>  
<!--原图-->
  <img src="http://localhost:8075/webroot/help/picture/1.jpg" /></div>
<!--大图片-->
<div id="big-box">
  <img src="http://localhost:8075/webroot/help/picture/2.jpg"/></div>
  <!--小图片-->
<div id="smaller-box">         
   <img src="http://localhost:8075/webroot/help/picture/3.jpg"/></div>


2.2 放大/缩小的原理通过监控鼠标移入、移出、在原图片上移动,获取在图片的位置,定位大/小图片的相应位置。   


onmouseover鼠标移入   
onmouseout鼠标移出   
onmousemove鼠标移动

三、示例
3.1 模板页面设置通过超链接设置动态参数确定图片放大还是缩小



3.2 添加初始化后事件



js代码:

setTimeout(function(){
            var objSmallBox = document.getElementById("small-box");
            var objFloatBox = document.getElementById("float-box");
            var objBigBox = document.getElementById("big-box");
            var objBigBoxImage = objBigBox.getElementsByTagName("img")[0];
            var objsmallerBox = document.getElementById("smaller-box");
            var objsmallerBoxImage = objsmallerBox.getElementsByTagName("img")[0];
            //鼠标移入,悬浮元素显示,参数a为1大图片显示,参数a为0小图片显示
            objSmallBox.onmouseover = function () {
                objFloatBox.style.display = "block"
                if(a==1)
                {
                objBigBox.style.display = "block"
                }
                if(a==0){
                 objsmallerBox.style.display = "block"
                }
            }
                // 鼠标移出,悬浮元素、大图片、小图片隐藏
            objSmallBox.onmouseout = function () {
                objFloatBox.style.display = "none"
                objBigBox.style.display = "none"
                objsmallerBox.style.display = "none"
            }
            objSmallBox.onmousemove = function (ev) {
                  // 鼠标在图片移动,定位取鼠标的位置
             var _event = ev || window.event;  //兼容多个浏览器的event参数模式
             // left为鼠标的x轴-小图片距离浏览器页面的左边距-悬浮元素的宽度/2         
             var left = _event.clientX - objSmallBox.offsetLeft - objFloatBox.offsetWidth / 2;
             // top鼠标的Y轴-小图片距离浏览器页面的上边距-悬浮元素的高度/2
             var top = _event.clientY  - objSmallBox.offsetTop - objFloatBox.offsetHeight / 2;
             //定义悬浮元素的移动范围
             if (left < 0) {
                left = 0;
                } else if (left > (objSmallBox.offsetWidth - objFloatBox.offsetWidth)) {
                 left = objSmallBox.offsetWidth - objFloatBox.offsetWidth;
                }
                if (top < 0) {
                    top = 0;
                } else if (top > (objSmallBox.offsetHeight - objFloatBox.offsetHeight)) {
                    top = objSmallBox.offsetHeight - objFloatBox.offsetHeight;
                }
                objFloatBox.style.left = left + "px";   
                objFloatBox.style.top = top + "px";
                //悬浮元素距离原图的左边距/(原图片的宽度 - 悬浮元素的宽度)=大图片距离BigBox的左边距/(BigBox的宽度-大图片的宽度)
                //宽度比例系数=left / (objSmallBox.offsetWidth - objFloatBox.offsetWidth)
                //高度的比例系数=top / (objSmallBox.offsetHeight - objFloatBox.offsetHeight)
                var percentX = left / (objSmallBox.offsetWidth - objFloatBox.offsetWidth);
                var percentY = top / (objSmallBox.offsetHeight - objFloatBox.offsetHeight);
                if(a==1)
                {
                objBigBoxImage.style.left = -percentX * (objBigBoxImage.offsetWidth - objBigBox.offsetWidth) + "px";
                objBigBoxImage.style.top = -percentY * (objBigBoxImage.offsetHeight - objBigBox.offsetHeight) + "px";
                }
                 if(a==0)
                {
                objsmallerBoxImage.style.left = -percentX * (objsmallerBoxImage.offsetWidth - objsmallerBox.offsetWidth) + "px";
                objsmallerBoxImage.style.top = -percentY * (objsmallerBoxImage.offsetHeight - objsmallerBox.offsetHeight) + "px";
                }
            }
},100);



3.3 引入css样式





四、 效果查看






编辑于 2021-6-19 22:28  

编辑于 2021-6-19 22:29  
编辑于 2021-6-19 22:30  
分享扩散:

沙发
发表于 2021-6-17 21:16:03

回帖奖励 +20

6666666666
板凳
发表于 2021-6-19 09:16:51

回帖奖励 +20

学习学习
地板
发表于 2021-6-19 16:14:43

回帖奖励 +20

666666666666666666
5楼
发表于 2021-6-21 09:32:59

回帖奖励 +20

6楼
发表于 2021-6-22 12:39:30

回帖奖励 +20

7楼
发表于 2021-7-5 18:05:26

回帖奖励 +20

8楼
发表于 2021-7-6 08:32:02

回帖奖励 +20

9楼
发表于 2022-1-4 09:36:11

回帖奖励 +20

10楼
发表于 2022-1-4 09:45:46

回帖奖励 +20

学到了66666
11楼
发表于 2022-3-4 16:16:09

回帖奖励 +20

666666
12楼
发表于 2023-4-15 11:20:45
这个比较6
13楼
发表于 2023-4-17 11:32:47
真心不错 放大镜
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

12回帖数 8关注人数 6650浏览人数
最后回复于:2023-4-17 11:32

返回顶部 返回列表