当前位置:首页 > JavaScript

js原声实现缩放

2026-03-01 14:32:39JavaScript

使用 CSS transform 实现缩放

通过修改元素的 transform 属性实现缩放效果。这种方式不会影响页面布局,适合交互式缩放。

const element = document.getElementById('target');
element.style.transform = 'scale(1.5)'; // 放大1.5倍
element.style.transformOrigin = 'center center'; // 设置缩放中心点

修改元素尺寸实现缩放

直接改变元素的宽高属性实现缩放,会影响页面文档流。

const element = document.getElementById('target');
const originalWidth = element.offsetWidth;
const originalHeight = element.offsetHeight;

// 放大到150%
element.style.width = (originalWidth * 1.5) + 'px';
element.style.height = (originalHeight * 1.5) + 'px';

鼠标滚轮交互缩放

监听鼠标滚轮事件实现动态缩放效果。

const target = document.getElementById('target');
let scale = 1;

target.addEventListener('wheel', (e) => {
  e.preventDefault();
  scale += e.deltaY * -0.01;
  scale = Math.min(Math.max(0.1, scale), 4); // 限制缩放范围
  target.style.transform = `scale(${scale})`;
});

动画缓动缩放效果

使用 requestAnimationFrame 实现平滑的缩放动画。

function animateScale(element, targetScale, duration = 300) {
  const startScale = parseFloat(element.style.transform.replace('scale(', '')) || 1;
  const startTime = performance.now();

  function update(currentTime) {
    const elapsed = currentTime - startTime;
    const progress = Math.min(elapsed / duration, 1);
    const currentScale = startScale + (targetScale - startScale) * progress;

    element.style.transform = `scale(${currentScale})`;

    if (progress < 1) {
      requestAnimationFrame(update);
    }
  }

  requestAnimationFrame(update);
}

双指触摸缩放

处理触摸事件实现移动端双指缩放。

const target = document.getElementById('target');
let initialDistance = null;

target.addEventListener('touchstart', (e) => {
  if (e.touches.length === 2) {
    initialDistance = Math.hypot(
      e.touches[0].clientX - e.touches[1].clientX,
      e.touches[0].clientY - e.touches[1].clientY
    );
  }
});

target.addEventListener('touchmove', (e) => {
  if (e.touches.length === 2 && initialDistance) {
    e.preventDefault();
    const currentDistance = Math.hypot(
      e.touches[0].clientX - e.touches[1].clientX,
      e.touches[0].clientY - e.touches[1].clientY
    );
    const scale = currentDistance / initialDistance;
    target.style.transform = `scale(${scale})`;
  }
});

保持宽高比的缩放计算

在改变尺寸时保持元素原始宽高比。

function scaleWithAspectRatio(element, scaleFactor) {
  const originalWidth = element.offsetWidth;
  const originalHeight = element.offsetHeight;
  const aspectRatio = originalWidth / originalHeight;

  if (aspectRatio > 1) { // 宽大于高
    element.style.width = (originalWidth * scaleFactor) + 'px';
    element.style.height = 'auto';
  } else { // 高大于宽
    element.style.height = (originalHeight * scaleFactor) + 'px';
    element.style.width = 'auto';
  }
}

js原声实现缩放

标签: 缩放原声
分享给朋友:

相关文章

vue 实现展开缩放

vue 实现展开缩放

在Vue中实现展开和缩放效果可以通过多种方式完成,以下是几种常见的方法: 使用CSS过渡和Vue的v-if或v-show指令 通过结合CSS过渡效果和Vue的条件渲染指令,可以实现平滑的展开和缩放…

react实现缩放

react实现缩放

实现缩放的方法 在React中实现缩放效果可以通过CSS变换、第三方库或直接操作DOM元素的方式完成。以下是几种常见的实现方法: 使用CSS变换 通过CSS的transform: scale()属…

js实现图片缩放

js实现图片缩放

使用 CSS transform 实现缩放 通过修改 CSS 的 transform 属性实现缩放效果,这种方法性能较好,不会引起页面重排。 const img = document.getEle…

js实现缩放

js实现缩放

实现缩放的基本方法 在JavaScript中实现缩放效果可以通过多种方式完成,常见的方法包括使用CSS的transform属性、直接修改元素的尺寸属性或结合动画库实现平滑过渡。 使用CSS的tran…

js实现打印缩放

js实现打印缩放

实现打印缩放的方法 在JavaScript中,可以通过CSS的@page规则或JavaScript动态调整打印内容的缩放比例。以下是几种常见的实现方式: 使用CSS @page规则 通过CSS的…

js实现缩放功能

js实现缩放功能

使用CSS transform实现缩放 通过CSS的transform: scale()属性可以实现元素的缩放效果。结合JavaScript动态调整缩放比例。 const element = doc…