jQ 放大镜效果

2020-05-03  本文已影响0人  lessonSam

该项目可以直接使用 在宽高读取都是没有写死的 可以直接用,也可以写成插件也是没问题的

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.11.0/jquery.js"></script>

    <style>
      .small {
        position: absolute;
        top: 100px;
        left: 100px;
        width: 250px;
        height: 250px;
        border: 1px solid red;
        margin-bottom: 30px;
      }
      .small img {
        width: 100%;
        height: 100%;
      }
      .big {
        position: relative;
        display: none;
        top: 100px;
        left: 500px;
        /* 这个宽高是蒙版的4倍· */
        width: 400px;
        height: 400px;
        border: 1px solid red;
        overflow: hidden;
      }
      .big img {
        width: 1000px;
        height: 1000px;
        position: absolute;
      }
      .mark {
        display: none;
        position: absolute;
        top: 0;
        left: 0;
        width: 100px;
        height: 100px;
        background-color: #fff;
        opacity: 0.5;
        filter: alpha(opacity=50);
      }
    </style>
  </head>
  <body>
    <!-- 布局 -->
    <!-- 小图 -->
    <div class="small">
      <img src="../五星评价/img/a.jpg" alt="" srcset="" />

      <div class="mark"></div>
    </div>
    <!-- 大图 -->
    <div class="big">
      <img src="../五星评价/img/a.jpg" alt="" srcset="" />
    </div>
    <div></div>

    <script>
      $(function () {
        $('.small')
          .mouseenter(function () {
            $('.mark,.big').show();
          })
          .mouseleave(function () {
            $('.mark, .big').hide();
          })
          .mousemove(function (e) {
            var l = e.pageX - $(this).offset().left - $('.mark').width() / 2;
            var t = e.pageY - $(this).offset().top - $('.mark').height() / 2;
            // 边界判断
            // 水平方向 left 方向是不能小于0 right 方向是不能超过small -mark 的宽度
            l =
              l <= 0
                ? 0
                : l >= $('.small').width() - $('.mark').width()
                ? $('.small').width() - $('.mark').width()
                : l;
            // 垂直方向 同垂直方向道理相同
            t =
              t <= 0
                ? 0
                : t >= $('.small').height() - $('.mark').height()
                ? $('.small').height() - $('.mark').height()
                : t;
            // 改变遮罩层的位置
            $('.mark').css({
              left: l,
              top: t,
            });
            // 同时改变放大图片的位置
            $('.big img').css({
              left: -4 * l,
              top: -4 * t,
            });
          });
      });
    </script>
  </body>
</html>

上一篇下一篇

猜你喜欢

热点阅读