当前位置:首页 > JavaScript

js实现图片放大

2026-01-16 12:06:26JavaScript

使用 CSS transform 实现图片放大

通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。

const img = document.querySelector('img');
img.addEventListener('mouseenter', () => {
  img.style.transition = 'transform 0.3s ease';
  img.style.transform = 'scale(1.2)';
});
img.addEventListener('mouseleave', () => {
  img.style.transform = 'scale(1)';
});

使用 CSS zoom 属性

CSS 的 zoom 属性也可以实现简单的放大效果,但注意这个属性是非标准属性。

const img = document.querySelector('img');
img.addEventListener('mouseover', () => {
  img.style.zoom = '150%';
});
img.addEventListener('mouseout', () => {
  img.style.zoom = '100%';
});

创建放大镜效果

实现类似放大镜的效果,在鼠标位置显示放大后的图片区域。

js实现图片放大

const img = document.getElementById('zoom-img');
const lens = document.createElement('div');
lens.style.position = 'absolute';
lens.style.width = '100px';
lens.style.height = '100px';
lens.style.border = '1px solid #000';
lens.style.background = 'rgba(255, 255, 255, 0.3)';
lens.style.display = 'none';
document.body.appendChild(lens);

img.addEventListener('mousemove', (e) => {
  lens.style.display = 'block';
  lens.style.left = `${e.pageX - 50}px`;
  lens.style.top = `${e.pageY - 50}px`;

  const zoom = 2;
  const x = e.offsetX;
  const y = e.offsetY;
  img.style.transformOrigin = `${x}px ${y}px`;
  img.style.transform = `scale(${zoom})`;
});

img.addEventListener('mouseleave', () => {
  lens.style.display = 'none';
  img.style.transform = 'scale(1)';
});

使用第三方库实现高级放大

对于更复杂的放大效果,可以使用专门的 JavaScript 库如 zoomingmedium-zoom

安装 medium-zoom:

js实现图片放大

npm install medium-zoom

使用示例:

import mediumZoom from 'medium-zoom';

const zoom = mediumZoom('[data-zoomable]', {
  margin: 24,
  background: '#000',
  scrollOffset: 40,
});

响应式图片放大

确保放大效果在不同屏幕尺寸下都能正常工作。

function setupImageZoom() {
  const images = document.querySelectorAll('.zoomable');

  images.forEach(img => {
    const originalWidth = img.naturalWidth;
    const originalHeight = img.naturalHeight;

    img.addEventListener('click', () => {
      const scale = Math.min(
        window.innerWidth / originalWidth,
        window.innerHeight / originalHeight
      ) * 0.9;

      img.style.transform = `scale(${scale})`;
      img.style.transition = 'transform 0.3s ease';
    });
  });
}

window.addEventListener('resize', setupImageZoom);
window.addEventListener('load', setupImageZoom);

触摸设备支持

为移动设备添加触摸支持的双击放大功能。

const img = document.querySelector('img');
let lastTap = 0;

img.addEventListener('touchend', (e) => {
  const currentTime = new Date().getTime();
  const tapLength = currentTime - lastTap;

  if (tapLength < 300 && tapLength > 0) {
    if (img.style.transform === 'scale(2)') {
      img.style.transform = 'scale(1)';
    } else {
      img.style.transform = 'scale(2)';
    }
    e.preventDefault();
  }
  lastTap = currentTime;
});

标签: 图片js
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

h5实现全景图片

h5实现全景图片

H5 实现全景图片的方法 使用 Three.js 库 Three.js 是一个强大的 3D 库,可以用于创建全景图片效果。以下是一个简单的实现步骤: 引入 Three.js 库 <scri…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #34…

h5实现图片压缩

h5实现图片压缩

使用Canvas API压缩图片 HTML5的Canvas API可以通过调整画布尺寸和图像质量来实现图片压缩。创建一个Canvas元素,将图片绘制到Canvas上,再通过toDataURL或toBl…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。…