当前位置:首页 > JavaScript

js实现图片放大效果

2026-01-30 12:02:54JavaScript

使用 CSS transform 实现放大效果

通过 CSS 的 transform: scale() 属性配合过渡效果实现平滑放大。将以下代码添加到图片元素的样式或类中:

.img-zoom {
  transition: transform 0.3s ease;
}
.img-zoom:hover {
  transform: scale(1.5); /* 放大1.5倍 */
}

动态计算放大位置(跟随鼠标)

结合鼠标事件实现跟随光标位置的放大效果,需监听 mousemove 事件计算相对位置:

js实现图片放大效果

const img = document.querySelector('.zoom-img');
img.addEventListener('mousemove', (e) => {
  const { left, top, width, height } = e.target.getBoundingClientRect();
  const x = ((e.clientX - left) / width) * 100;
  const y = ((e.clientY - top) / height) * 100;
  img.style.transformOrigin = `${x}% ${y}%`;
  img.style.transform = 'scale(2)';
});
img.addEventListener('mouseleave', () => {
  img.style.transform = 'scale(1)';
});

使用第三方库(如 medium-zoom)

对于更复杂的场景,可使用现成的库快速实现。安装 medium-zoom 后:

import mediumZoom from 'medium-zoom';
mediumZoom('.zoomable-image', {
  margin: 24,
  background: 'rgba(0, 0, 0, 0.8)'
});

创建放大镜组件

通过绝对定位的浮动层实现局部放大效果,需计算鼠标位置与放大比例:

js实现图片放大效果

function createMagnifier(imgElement, zoom = 2) {
  const magnifier = document.createElement('div');
  magnifier.className = 'magnifier';
  document.body.appendChild(magnifier);

  imgElement.addEventListener('mousemove', (e) => {
    const { left, top, width, height } = imgElement.getBoundingClientRect();
    const x = e.clientX - left;
    const y = e.clientY - top;

    magnifier.style.display = 'block';
    magnifier.style.left = `${e.clientX + 20}px`;
    magnifier.style.top = `${e.clientY + 20}px`;
    magnifier.style.backgroundImage = `url(${imgElement.src})`;
    magnifier.style.backgroundSize = `${width * zoom}px ${height * zoom}px`;
    magnifier.style.backgroundPosition = `-${x * zoom}px -${y * zoom}px`;
  });

  imgElement.addEventListener('mouseleave', () => {
    magnifier.style.display = 'none';
  });
}

对应的 CSS 样式:

.magnifier {
  position: absolute;
  width: 150px;
  height: 150px;
  border-radius: 50%;
  border: 3px solid #fff;
  pointer-events: none;
  display: none;
  box-shadow: 0 0 10px rgba(0,0,0,0.5);
}

响应式处理

针对移动设备添加触摸事件支持:

imgElement.addEventListener('touchmove', (e) => {
  const touch = e.touches[0];
  const { left, top, width, height } = imgElement.getBoundingClientRect();
  const x = ((touch.clientX - left) / width) * 100;
  const y = ((touch.clientY - top) / height) * 100;
  imgElement.style.transformOrigin = `${x}% ${y}%`;
  imgElement.style.transform = 'scale(2)';
});

标签: 效果图片
分享给朋友:

相关文章

网页制作css图片切换

网页制作css图片切换

CSS图片切换的实现方法 使用CSS实现图片切换可以通过多种方式完成,以下是几种常见的方法: 纯CSS轮播图 通过CSS动画和关键帧实现自动轮播效果。定义一个容器,内部放置多个图片,利用anima…

css制作卷边效果

css制作卷边效果

使用伪元素和渐变实现卷边效果 通过CSS伪元素和线性渐变可以模拟纸张卷边的视觉效果。这种方法不需要额外元素,仅通过::before或::after伪元素实现。 .element { posit…

vue实现图片轮播

vue实现图片轮播

Vue 实现图片轮播的方法 使用第三方库(推荐) 安装 vue-awesome-swiper 库,这是基于 Swiper 的 Vue 封装: npm install swiper vue-awe…

vue实现图片

vue实现图片

Vue 实现图片展示的方法 在 Vue 中实现图片展示可以通过多种方式完成,以下是一些常见的方法: 使用 img 标签直接引入 通过 img 标签的 src 属性直接引入本地或远程图片: &l…

vue 实现图片

vue 实现图片

Vue 实现图片加载与展示的方法 在 Vue 中实现图片加载和展示可以通过多种方式完成,包括静态资源引用、动态绑定、懒加载等。以下是几种常见的方法: 静态资源引用 将图片放在项目的 public…

js实现滚动条效果

js实现滚动条效果

实现滚动条效果的方法 使用原生JavaScript实现滚动条 通过监听滚动事件,可以动态调整滚动条的位置和样式。以下是一个基础实现示例: // 获取DOM元素 const container =…