zoukankan      html  css  js  c++  java
  • JS 实现商品图片放大镜(大图)效果

     1 <script>
     2 
     3         // 当页面加载完成后执行
     4         window.addEventListener('load', function () {
     5 
     6             //查找元素
     7             //small 小图div
     8             var small = document.querySelector('.small')
     9             //小图遮罩层div
    10             var mask = document.querySelector('.mask')
    11             //大图div
    12             var big = document.querySelector('.big')
    13 
    14             //当鼠标经过 主图时 时执行-显示大图
    15             small.addEventListener('mouseover', function () {
    16                 mask.style.display = 'block'
    17                 big.style.display = 'block'
    18             })
    19 
    20             //当鼠标离开 主图时 时执行-隐藏大图
    21             small.addEventListener('mouseout', function () {
    22                 mask.style.display = 'none'
    23                 big.style.display = 'none'
    24             })
    25 
    26             //当鼠标在主图内 移动时 执行
    27             small.addEventListener('mousemove', function (e) {
    28                 //获取鼠标在主图盒子内的XY坐标,减去偏移值
    29                 var x = e.pageX - this.offsetLeft
    30                 var y = e.pageY - this.offsetTop
    31 
    32                 //将获取到的鼠标XY坐标,赋值给 mask遮罩层盒子的定位坐标
    33                 //注意一定后面+'px',不然没效果
    34                 var maskX = x - mask.offsetWidth / 2
    35                 var maskY = y - mask.offsetTop / 2
    36 
    37                 //遮罩最大移动距离
    38                 var maskMax = small.offsetWidth - mask.offsetWidth
    39 
    40                 //限制X轴移动范围
    41                 if (maskX <= 0) {
    42                     maskX = 0
    43                 } else if (maskX >= maskMax) {
    44                     maskX = small.offsetWidth - mask.offsetWidth
    45                 }
    46 
    47                 //限制Y轴移动范围
    48                 if (maskY <= 0) {
    49                     maskY = 0
    50                 } else if (maskY >= maskMax) {
    51                     maskY = maskMax
    52                 }
    53 
    54                 mask.style.left = maskX + 'px'
    55                 mask.style.top = maskY + 'px'
    56 
    57                 //获取大图
    58                 var big_img = document.querySelector('.big_img')
    59 
    60                 //大图最大移动距离
    61                 var bigImgMax = big_img.offsetWidth - big.offsetWidth
    62 
    63                 //大图的X轴移动距离
    64                 var bigImgX = maskX * bigImgMax / maskMax
    65 
    66                 //大图的Y轴移动距离
    67                 var bigImgY = maskY * bigImgMax / maskMax
    68 
    69                 //坐标赋值,让大图跟着遮罩层一起移动
    70                 big_img.style.left = -bigImgX + 'px'
    71                 big_img.style.top = -bigImgY + 'px'
    72             })
    73         })
    74     </script>
     1 <!DOCTYPE html>
     2 <html lang="zh-CN">
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7     <title>图片放大镜效果</title>
     8     <style>
     9         .small {
    10             position: relative;
    11              546px;
    12             height: 546px;
    13             margin: 50px 100px;
    14 
    15             background: rgba(251, 227, 227, 0.979)
    16         }
    17 
    18         .small .phone_img {
    19 
    20              100%;
    21             height: 100%;
    22         }
    23 
    24         .mask {
    25             display: none;
    26             position: absolute;
    27             left: 0;
    28             top: 0;
    29              200px;
    30             height: 200px;
    31             border: 1px solid rgb(68, 0, 255);
    32             background: rgba(12, 12, 12, 0.1);
    33             /* 只要鼠标放到遮罩层上就变成十字形状 */
    34             cursor: move;
    35         }
    36 
    37         .big {
    38             display: none;
    39             position: absolute;
    40             right: -820px;
    41             top: 0;
    42              819px;
    43             height: 819px;
    44             background: rgb(255, 254, 254);
    45             z-index: 99;
    46             border: 1px solid #ccc;
    47 
    48             /* 超出的部分隐藏 */
    49             overflow: hidden;
    50         }
    51 
    52         .big .big_img {
    53             position: absolute;
    54             left: 0;
    55             top: 0;
    56              1092px;
    57             height: 1092px;
    58         }
    59     </style>
    60 </head>
    61 
    62 <body>
    63     <div class="small">
    64         <img src="../img/huaweip40.jpg" alt="" class="phone_img">
    65         <div class="mask"></div>
    66         <div class="big">
    67             <img src="../img/hwp402-big.jpg" alt="" class="big_img">
    68         </div>
    69     </div>
    70 
    71 </body>
    72 
    73 </html>
    HTML/CSS代码

    效果图

    时间若流水,恍惚间逝去
  • 相关阅读:
    Android自动开关机实现
    List<T>的各种排序方法
    Struts、Ajax、Restful、Web Service 狂想曲框架实现篇(二)
    ArrayList和LinkedList性能比较
    Struts、Ajax、Restful、Web Service 狂想曲框架实现篇(三)
    ACM
    jquery
    安装IIS和部署网站的区别
    用IIS部署网站的问题和解决方案
    bug管理初识记录测试结果(外企)
  • 原文地址:https://www.cnblogs.com/alanshreck/p/14268994.html
Copyright © 2011-2022 走看看