温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

JS实现放大镜效果

发布时间:2020-07-19 15:28:31 来源:网络 阅读:150 作者:Cherish纯紫 栏目:开发技术
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
  <style>
    .img {
      width: 300px;
      height: 400px;
      position: relative;
    }

    .img img {
      width: 100%;
      height: 100%;
    }

    .mask {
      width: 200px;
      height: 200px;
      position: absolute;
      left: 0;
      top: 0;
      background-color: yellow;
      opacity: 0.3;
      display: none;
      cursor: move;
    }

    .big {
      width: 400px;
      height: 400px;
      position: absolute;
      left: 300px;
      top: 0;
      overflow: hidden;
      display: none;
    }

    .big img {
      width: 150%;
      height: 200%;
      position: absolute;
      left: 0;
      top: 0;
    }
  </style>
  <title>Document</title>
</head>

<body>
  <div class="img">
    <img src="./8131572850838_.pic.jpg" alt="">
    <div class="mask"></div>
    <div class="big">
      <img src="./8131572850838_.pic.jpg" alt="">
    </div>
  </div>

  <script>
    $(function () {
      var imgBox = $('.img')
      var mask = $('.mask')
      var big = $('.big')

      imgBox.on({
        mouseover: function (e) {
          mask.css({ 'display': 'block' })
          big.css({ 'display': 'block' })

        },
        mouseout: function (e) {
          mask.css({ 'display': 'none' })
          big.css({ 'display': 'none' })
        },
        mousemove: function (e) {

          // 鼠标在盒子中的位置
          var x = e.pageX - imgBox.offset().left
          var y = e.pageY - imgBox.offset().top

          // 遮挡层的坐标
          var maskX = x - mask.width() / 2
          var maskY = y - mask.height() / 2

          // 遮挡层最大移动距离
          var maxX = imgBox.width() - mask.width()
          var maxY = imgBox.height() - mask.height()

          if (maskX <= 0) {
            maskX = 0
          } else if (maskX > maxX) {
            maskX = maxX
          }
          if (maskY <= 0) {
            maskY = 0
          } else if (maskY > maxY) {
            maskY = maxY
          }
          mask.css({
            'left': maskX,
            'top': maskY
          })

          // 大图片的最大移动距离
          var bigImg = big.children('img')
          var bigMaxX = bigImg.width() - big.width()
          var bigMaxY = bigImg.height() - big.height()

          // 大图片移动距离   
          // mask最小移动距离 / mask最大移动距离 = big最小移动距离 / big最大移动距离
          var bigX = maskX * bigMaxX / maxX
          var bigY = maskY * bigMaxY / maxY

          // 相反方向移动需要  负号
          bigImg.css({
            'left': -bigX,
            'top': - bigY
          })

        }

      }) // imgBox.on

    })
  </script>
</body>

</html>
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI