js图片放大镜实例讲解(必看篇)


Posted in Javascript onJuly 17, 2017

1、图片放大镜的思路:

当打开页面时只有图片

首先,说一下基本效果和调理,图片放大镜,也就是当你鼠标移入当前的商品图片时,会出现一个小灰色的观察移动框,有点会出现一个对应部位的放大的图片。

然后当鼠标移动时,右边的放大镜会出现对应部位的放大图片

最后当鼠标移开后,小的观察框和放大的图片都会消失。

2、有了基本思路就看代码

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
      #small{
        width: 300px;
        height: 300px;
        border: 1px solid firebrick;
        float: left;
        position: relative;
      }
      #small img{
        width: 100%;
        height: 100%;
         
      }
      #mask{
        width: 100px;
        height: 100px;
        background: rgba(0,0,0,0.3);
        position: absolute;
        top: 0;
        left: 0;
        display: none;
      }
      #big{
        width: 300px;
        height: 300px;
        border: 1px solid hotpink;
        overflow: hidden;
        float: left;
        margin-left: 50px;
        position: relative;
        display: none;
      }
      #big img{
        position: absolute;
      }
    </style>
    <script type="text/javascript">
      window.onload = function(){
//       获取到所有的元素,因为有对应元素的移动,所以在设置样式的,一定要给对应的元素绝对定位,类似于拖拽
        var oSmall = document.getElementById('small'),
        oMask = document.getElementById('mask'),
        oBig = document.getElementById('big'),
        oBigImg = document.getElementById('bigImg');
        //给当前小的div一个鼠标移入事件
        oSmall.onmouseover = function(){
//         当鼠标移入时,对应的区域显示 小的观察框,和 对应的右面的放大图片
          oMask.style.display = 'block';
          oBig.style.display = 'block';
        };
        oSmall.onmouseout = function(){
//         当鼠标移除时对应的区域隐藏
          oMask.style.display = 'none';
          oBig.style.display = 'none'
        }
        oSmall.onmousemove = function(ev){
//         首先获取到event事件
          var oEvent = ev || event;
//         offsetWidth = 本身的样式宽 + 左右padding + 左右border
//         clientX clientY 获取鼠标指针位置,相对于当前窗口的 X 和 Y 坐标
           
//         鼠标距离当前窗口左边的距离 了l ,就为当前鼠标距离窗口左边的距离 减去 小的观察框的宽度
//             oMask.offsetWidth / 2 设置鼠标处于正中心的位置
          var l = oEvent.clientX - oMask.offsetWidth / 2;
          var t = oEvent.clientY - oMask.offsetHeight / 2;
           
//         对观察框距离的限制, 1.当它距离左边的距离比0 小的时候,设置它为0 就是它移动到最左边的时候
          if (l < 0) {
            l = 0;
          }else if(l > oSmall.offsetWidth - oMask.offsetWidth){
//           当它移动到最右边的时候,设置它的left值为 当前的left值
            l = oSmall.offsetWidth - oMask.offsetWidth;
          };
           
          //同理对上下边界进行设置
          if (t < 0) {
            t = 0;
          }else if(t > oSmall.offsetHeight - oMask.offsetHeight){
            t = oSmall.offsetHeight - oMask.offsetHeight;
          };
 
//         设置小的观察框的移动时的当前位置
          oMask.style.left = l + 'px';
          oMask.style.top = t + 'px';
           
//         设置对应的右边放大图片对应的位置
          //var scale = l / (oSmall.offsetWidth - oMask.offsetWidth);
//         大的可视区域的宽减去小的观察框对应的宽,就是可移动的总距离,  当前处的位置,处于总的距离的比例 与大图片,在大图片的可视框里所处的位置相同所以如下
          oBigImg.style.left = l * (oBig.offsetWidth - oBigImg.offsetWidth)/(oSmall.offsetWidth-oMask.offsetWidth)+"px";
          oBigImg.style.top = t * (oBig.offsetHeight - oBigImg.offsetHeight)/(oSmall.offsetHeight-oMask.offsetHeight)+"px";
           
        }
      }
    </script>
  </head>
  <body>
    <div id="small">
      <img src="img/s.jpg" />
      <spanS id="mask"></span>
    </div>
    <div id="big">
      <img src="img/b.jpg" id="bigImg"/>
    </div>
  </body>
</html>

还有什么更好的方法互相交流

以上这篇js图片放大镜实例讲解(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javaScript 页面自动加载事件详解
Feb 10 Javascript
node.js 中国天气预报 简单实现
Jun 06 Javascript
XMLHttpRequest Level 2 使用指南
Aug 26 Javascript
总结几道关于Node.js的面试问题
Jan 11 Javascript
js 性能优化之算法和流程控制
Feb 15 Javascript
Node.js  事件循环详解及实例
Aug 06 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
Jul 23 Javascript
javascript闭包的使用之按钮切换功能
Aug 30 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
Aug 23 Javascript
微信小程序实现侧边分类栏
Oct 21 Javascript
vue.js iview打包上线后字体图标不显示解决办法
Jan 20 Javascript
vuex分模块后,实现获取state的值
Jul 26 Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
Jul 17 #Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
Jul 16 #Javascript
node.js express中app.param的用法详解
Jul 16 #Javascript
Node.js中流(stream)的使用方法示例
Jul 16 #Javascript
js+html5实现半透明遮罩层弹框效果
Aug 24 #Javascript
Vue Spa切换页面时更改标题的实例代码
Jul 15 #Javascript
Vue应用部署到服务器的正确方式
Jul 15 #Javascript
You might like
各种战术和打法的原创者
2020/03/04 星际争霸
php模板之Phpbean的目录结构
2008/01/10 PHP
php导入模块文件分享
2015/03/17 PHP
PHP查找一列有序数组是否包含某值的方法
2020/02/07 PHP
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
javascript cookie操作类的实现代码小结附使用方法
2010/06/02 Javascript
通过js简单实现将一个文本内容转译成加密文本
2013/10/22 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
2015/06/01 Javascript
javascript实现动态标签云
2015/10/16 Javascript
Vue.js原理分析之observer模块详解
2017/02/17 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
[06:49]2018DOTA2国际邀请赛寻真——VirtusPro傲视群雄
2018/08/12 DOTA
Python实现3行代码解简单的一元一次方程
2014/08/18 Python
Python selenium 三种等待方式解读
2016/09/15 Python
Python 类的继承实例详解
2017/03/25 Python
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
使用turtle绘制五角星、分形树
2019/10/06 Python
基于python调用psutil模块过程解析
2019/12/20 Python
Pytorch环境搭建与基本语法
2020/06/03 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
用python查找统一局域网下ip对应的mac地址
2021/01/13 Python
CSS3 实现footer 固定在底部(无论页面多高始终在底部)
2019/10/15 HTML / CSS
牵手50香港:专为黄金岁月的单身人士而设的交友网站
2020/08/14 全球购物
介绍一下Ruby中的对象,属性和方法
2012/07/11 面试题
广告语设计及教案
2014/03/21 职场文书
内勤主管岗位职责
2014/04/03 职场文书
财务会计专业自荐书
2014/06/30 职场文书
2014年维修工作总结
2014/11/22 职场文书
2014年保育员工作总结
2014/12/02 职场文书
2015年项目工作总结
2015/04/29 职场文书
2015年社区平安建设工作总结
2015/05/13 职场文书
2015暑假打工实践报告
2015/07/13 职场文书
初中美术教学反思
2016/02/17 职场文书