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 相关文章推荐
jQuery源码分析-05异步队列 Deferred 使用介绍
Nov 14 Javascript
分享一个asp.net pager分页控件
Jan 04 Javascript
javascript插入样式实现代码
Feb 22 Javascript
javascript不可用的问题探究
Oct 01 Javascript
Position属性之relative用法
Dec 14 Javascript
BootStrap制作导航条实例代码
May 06 Javascript
深入分析node.js的异步API和其局限性
Sep 05 Javascript
jQuery实现的模拟弹出窗口功能示例
Nov 24 Javascript
解决URL地址中的中文乱码问题的办法
Feb 10 Javascript
Vue仿微信app页面跳转动画效果
Aug 21 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
Sep 29 Javascript
浅谈layui 绑定form submit提交表单的注意事项
Oct 25 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
使用PHP实现Mysql读写分离
2013/06/28 PHP
php模拟ping命令(php exec函数的使用方法)
2013/10/25 PHP
php获取淘宝分类id示例
2014/01/16 PHP
php实现微信扫码自动登陆与注册功能
2016/09/22 PHP
php实现生成code128条形码的方法详解
2017/07/19 PHP
Javascript中获取出错代码所在文件及行数的代码
2010/09/23 Javascript
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
利用js实现遮罩以及弹出可移动登录窗口
2013/07/08 Javascript
jquery 缓存问题的几个解决方法
2013/11/11 Javascript
在JavaScript中判断整型的N种方法示例介绍
2014/06/18 Javascript
jquery过滤特殊字符',防sql注入的实现方法
2016/08/17 Javascript
SelecT下拉框选中和取值的解决方法
2016/11/22 Javascript
js实现表单提交后不重新刷新当前页面
2016/11/30 Javascript
Bootstrap Table使用整理(四)之工具栏
2017/06/09 Javascript
浅谈对Angular中的生命周期钩子的理解
2017/07/31 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
解决vue路由后界面没有变化,但是链接有的问题
2018/09/01 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
[15:46]教你分分钟做大人——沙王
2015/03/11 DOTA
关于Django显示时间你应该知道的一些问题
2017/12/25 Python
JavaScript中的模拟事件和自定义事件实例分析
2018/07/27 Python
python获取本周、上周、本月、上月及本季的时间代码实例
2020/09/08 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
css3 column实现卡片瀑布流布局的示例代码
2018/06/22 HTML / CSS
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
Structs界面控制层技术
2013/10/11 面试题
党员个人思想汇报
2013/12/28 职场文书
工厂保安员岗位职责
2014/01/31 职场文书
市场营销求职信范文
2014/02/21 职场文书
制冷与空调专业毕业生推荐信
2014/07/07 职场文书
光学与应用专业毕业生求职信
2014/09/01 职场文书
简单租房协议书
2014/10/21 职场文书
国际贸易实训报告
2014/11/05 职场文书
小学生暑假安全保证书
2015/07/13 职场文书
三十年再续同学情倡议书
2019/11/27 职场文书