ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

一个简单的放大镜demo

2022-07-03 21:01:38  阅读:138  来源: 互联网

标签:style const 放大镜 demo none mouseY mouseX 简单 display


html部分:

<div class="web">
    <div class="goodsBox">
      <img src="./small.jpg" alt="" />
      <div class="mask"></div>
    </div>

    <div class="zoomBox">
      <img src="./big.jpg" alt="">
    </div>
  </div>

css部分:

@charset "utf-8";

* {
  margin: 0;
  padding: 0;
  text-decoration: none;
  list-style: none;
}

.web {
  padding: 50px;
}

.goodsBox {
  width: 350px;
  height: 350px;
  overflow: hidden;
  position: relative;

  /* 鼠标移入变化 */
  cursor: move;
}

.goodsBox>img {
  width: 100%;
}

.mask {
  display: none;

  position: absolute;
  width: 200px;
  height: 200px;
  background-color: rgba(255, 255, 0, 0.3);
  top: 0;
  left: 0;
  /* 使得元素节点忽略事件触发 事件穿透 */
  pointer-events: none;

}

.zoomBox {
  position: absolute;
  top: 0;
  left: 400px;

  width: 457px;
  height: 457px;
  overflow: hidden;
  display: none;
}

.zoomBox img {
  position: absolute;
  top: 0;
  left: 0;
}

js部分:

const goodsBoxNode = document.querySelector(".goodsBox");
const maskNode = document.querySelector(".mask");
const bigImg = document.querySelector(".zoomBox img");
const bigBox = document.querySelector(".zoomBox");

// 商品图片盒子高度
const goodsBoxHeight = goodsBoxNode.clientHeight;
// 商品图片盒子宽度
const goodsBoxWidth = goodsBoxNode.clientWidth;
// 遮罩层盒子高度
let maskHeight = 0;
// 遮罩层盒子宽度
let maskWidth = 0;

// 鼠标Y轴
let mouseY;
// 鼠标X轴
let mouseX;

// 鼠标在商品图片框中移动事件
goodsBoxNode.addEventListener("mousemove", (e) => {
  mouseX = e.layerX - maskWidth / 2;
  console.log(e.layerX);
  // console.log(maskWidth);
  if (mouseX < 0) {
    mouseX = 0;
  }

  if (mouseX > goodsBoxWidth - maskWidth) {
    mouseX = goodsBoxWidth - maskWidth;
  }

  maskNode.style.left = `${mouseX}px`;
  bigImg.style.left = `-${mouseX * (bigImg.clientWidth / goodsBoxWidth)}px`;

  mouseY = e.layerY - maskHeight / 2;
  if (mouseY < 0) {
    mouseY = 0;
  }
  if (mouseY > goodsBoxHeight - maskHeight) {
    mouseY = goodsBoxHeight - maskHeight;
  }
  maskNode.style.top = `${mouseY}px`;
  bigImg.style.top = `-${mouseY * (bigImg.clientHeight / goodsBoxHeight)}px`;
});

// 鼠标移入遮罩及放大图片出现
goodsBoxNode.addEventListener("mouseenter", () => {
  maskNode.style.display = "block";
  maskWidth = 200;
  maskHeight = 200;
  bigBox.style.display = "block";
});

// 鼠标移出遮罩及放大图片消失
goodsBoxNode.addEventListener("mouseleave", () => {
  maskNode.style.display = "none";
  bigBox.style.display = "none";
});

参考:https://blog.csdn.net/learner_boy/article/details/72190462

标签:style,const,放大镜,demo,none,mouseY,mouseX,简单,display
来源: https://www.cnblogs.com/echo42/p/15883806.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有