当前位置:首页 > JavaScript

js 实现变宽

2026-01-31 16:04:29JavaScript

使用 CSS 和 JavaScript 动态调整元素宽度

通过 JavaScript 动态修改元素的 style.width 属性可以实时改变宽度。以下是一个基础实现示例:

const element = document.getElementById('targetElement');
element.style.width = '200px'; // 设置固定宽度
element.style.width = '50%';   // 设置百分比宽度

动画效果实现平滑变宽

结合 CSS 过渡和 JavaScript 实现平滑动画效果:

js 实现变宽

#targetElement {
  transition: width 0.3s ease-in-out;
}
document.querySelector('#resizeButton').addEventListener('click', () => {
  const element = document.getElementById('targetElement');
  element.style.width = element.offsetWidth === 200 ? '400px' : '200px';
});

响应式宽度调整

根据窗口大小动态调整宽度:

js 实现变宽

function responsiveResize() {
  const element = document.getElementById('targetElement');
  element.style.width = window.innerWidth > 768 ? '80%' : '100%';
}

window.addEventListener('resize', responsiveResize);
responsiveResize(); // 初始化执行

拖拽调整宽度

实现拖拽手柄改变宽度的交互:

const resizer = document.getElementById('dragHandle');
let startX, startWidth;

resizer.addEventListener('mousedown', (e) => {
  startX = e.clientX;
  startWidth = parseInt(document.defaultView.getComputedStyle(resizer.parentElement).width, 10);
  document.documentElement.addEventListener('mousemove', doDrag);
  document.documentElement.addEventListener('mouseup', stopDrag);
});

function doDrag(e) {
  resizer.parentElement.style.width = (startWidth + e.clientX - startX) + 'px';
}

function stopDrag() {
  document.documentElement.removeEventListener('mousemove', doDrag);
  document.documentElement.removeEventListener('mouseup', stopDrag);
}

使用 requestAnimationFrame 优化性能

对于高频宽度变化场景,使用动画帧优化:

function animateWidth(element, targetWidth) {
  const startWidth = element.offsetWidth;
  const duration = 500;
  const startTime = performance.now();

  function updateWidth(timestamp) {
    const elapsed = timestamp - startTime;
    const progress = Math.min(elapsed / duration, 1);
    const currentWidth = startWidth + (targetWidth - startWidth) * progress;
    element.style.width = `${currentWidth}px`;

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

  requestAnimationFrame(updateWidth);
}

标签: 变宽js
分享给朋友:

相关文章

js实现轮播

js实现轮播

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

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…