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 相关文章推荐
自己开发Dojo的建议框架
Sep 24 Javascript
关于JavaScript中string 的replace
Apr 12 Javascript
js/html光标定位的实现代码
Sep 23 Javascript
JS显示下拉列表框内全部元素的方法
Mar 31 Javascript
JS iFrame加载慢怎么解决
May 13 Javascript
JQuery异步加载PartialView的方法
Jun 07 Javascript
浅析jQuery Ajax通用js封装
Jun 22 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
Jul 07 Javascript
vue.js实例todoList项目
Jul 07 Javascript
jQuery实现的简单前端搜索功能示例
Oct 28 jQuery
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
Jan 08 jQuery
vue组件横向树实现代码
Aug 02 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
php操作mysqli(示例代码)
2013/10/28 PHP
php+jQuery.uploadify实现文件上传教程
2014/12/26 PHP
php面向对象中static静态属性与方法的内存位置分析
2015/02/08 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
2016/01/18 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
javascript 打印页面代码
2009/03/24 Javascript
JavaScript内核之基本概念
2011/10/21 Javascript
javaScript实现浮点数转十六进制字符
2013/10/29 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
2014/09/03 Javascript
JS实现的表格行上下移动操作示例
2016/08/03 Javascript
浅谈在koa2中实现页面渲染的全局数据
2017/10/09 Javascript
vue父子模板传值问题解决方法案例分析
2020/02/26 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
Python设计模式之观察者模式实例
2014/04/26 Python
python多线程操作实例
2014/11/21 Python
python logging类库使用例子
2014/11/22 Python
django1.8使用表单上传文件的实现方法
2016/11/04 Python
python中字符串类型json操作的注意事项
2017/05/02 Python
python线程中的同步问题及解决方法
2019/08/29 Python
python分布式编程实现过程解析
2019/11/08 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
2020/03/27 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
Debenhams爱尔兰:英国知名的百货公司
2017/01/02 全球购物
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
美国家用和厨房电器销售网站:Appliances Connection
2020/01/24 全球购物
人民调解员先进事迹材料
2014/05/08 职场文书
建筑安全生产目标责任书
2014/07/23 职场文书
海洋科学专业求职信
2014/08/10 职场文书
2014年电工工作总结
2014/11/20 职场文书
建国大业电影观后感
2015/06/01 职场文书
如何用python绘制雷达图
2021/04/24 Python
Python 解决空列表.append() 输出为None的问题
2021/05/23 Python
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL