原生放大图层(预览放大图片) demo

<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <title>qc-detail</title>

  <meta http-equiv="X-UA-Compatible" content="IE=edge">

  <meta name="renderer" content="webkit">

  <link rel="stylesheet" href="./css/common.css">

  <link rel="stylesheet" href="./css/product.css">

</head>

<body>

  <!-- 项部导航 -->

  <div class="topnav">

  </div>

  <!-- 头部 -->

  <div class="header">

    <div class="wrapper">

      <!-- 网站Logo -->

      <h1 class="logo"><a href="/">100% Focus On Original Jordan Series</a></h1>

      <!-- 主导航 -->

    </div>

  </div>

  <div class="wrapper">

    <div class="container">

      <!-- 商品信息 -->

      <div class="product-info">

        <div class="left">

          <div class="pictrue">

            <div class="middle">

              <img id="myImage" src="./images/1.jpg" alt="">

              <div class="layer"></div>

            </div>

            <div class="large" style="background-image: url(./images//1.jpg);"></div>

            <div class="small">

              <ul class="smallPhoto">

                <li class="active"><img src="./images/1.jpg" alt=""></li>

                <li><img src="./images/2.jpg" alt=""></li>

                <li><img src="./images/3.jpg" alt=""></li>

                <li><img src="./images/4.jpg" alt=""></li>

                <li><img src="./images/5.jpg" alt=""></li>

                <li><img src="./images/5.jpg" alt=""></li>

                <li><img src="./images/5.jpg" alt=""></li>

              </ul>

            </div>

          </div>

        </div>

        <!-- 详细描述 -->

        <div class="right">

          <div class="fontsize">

            <div class="qc">

              QC Pictures

            </div>

            <div class="font">


 

              <p>Order number:TS9544091</p>

              <p>Member name:<span>Jlyn Gibson</span></p>

              <p>Product name: <span>adidas Yeezy Slide Desert Sand FW6344</span></p>

              <p>Size: <span>US9/EUR43</span></p>

            </div>

            <div class="font_button">

              <button type="button" class="btn1">Satisfied, Candeliver</button>

              <button type="button" class="btn2">Not satisfied, Please retake QC</button>

            </div>

          </div>

        </div>

      </div>

    </div>


 

  </div>

  </div>

  <script>

    const small = document.querySelector('.small')

    const middle = document.querySelector('.middle')

    const large = document.querySelector('.large')

    // 切换图片

    small.addEventListener('mouseover', function (e) {

      if (e.target.tagName === 'IMG') {

        small.querySelector('.active').classList.remove('active')

        e.target.parentNode.classList.add('active')

        middle.querySelector('img').src = e.target.src

        large.style.backgroundImage = `url(${e.target.src})`

      }

    })

    // 显示隐藏大图弹层

    let timerId = null

    const show = function () {

      clearTimeout(timerId)

      large.style.display = 'block'

    }

    const hide = function () {

      clearTimeout(timerId)

      timerId = setTimeout(function () {

        large.style.display = 'none'

      }, 200)

    }

    middle.addEventListener('mouseenter', show)

    middle.addEventListener('mouseleave', hide)

    large.addEventListener('mouseenter', show)

    large.addEventListener('mouseleave', hide)

    // 移动遮罩层和大图预览

    const layer = middle.querySelector('.layer')

    document.addEventListener('mousemove', function (e) {

      // console.log(e,"源");              

      const position = middle.getBoundingClientRect()

      console.log(middle.width, "213123213123123");

      // console.log(position.left ,'wqewqewqe');

      // console.log(position);

      console.log(e.pageY, "e.pageYsfwetfsefsdfsd");

      console.log(position.top, "wqeqeqwewr1111position.top");

      const x = e.pageX - position.left, y = e.pageY - position.top - document.documentElement.scrollTop




 

      // 获取当前图片的高

      let img = document.getElementById("myImage");

      let height = img.height;

      // console.log(x,'1232321x');

      // console.log(e.pageX,"312u3u921u92134u09e.pageX");

      if (x >= 0 && x <= 500 && y >= 0 && y <= height) {

        let mx = 0, my = 0;

        if (x <= 100) mx = 0

        if (x > 100 && x < 400) mx = x - 50

        if (x >= 400) mx = 400

        if (y <= 100) my = 0

        if (y > 100 && y < height - 50) my = y - 50

        if (y >= height - 50) my = height - 100

        layer.style.left = mx + 'px'

        layer.style.top = my + 'px'

        large.style.backgroundPositionX = - 2 * mx + 'px'

        large.style.backgroundPositionY = - 2 * my + 'px'

      }

    })

    middle.addEventListener('mouseenter', function () {

      layer.style.display = 'block'

    })

    middle.addEventListener('mouseleave', function () {

      layer.style.display = 'none'

    })

  </script>

</body>

</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值