当前位置:首页 > JavaScript

js实现页面左右调节

2026-04-04 18:41:53JavaScript

实现页面左右调节的JavaScript方法

使用CSS和JavaScript控制布局

通过CSS设置页面容器为flex布局,结合JavaScript动态调整左右分栏的宽度比例。HTML结构需包含主容器和左右分栏:

<div class="container">
  <div class="left-panel" id="leftPanel">左侧内容</div>
  <div class="divider" id="divider"></div>
  <div class="right-panel">右侧内容</div>
</div>
.container {
  display: flex;
  height: 100vh;
}
.left-panel {
  flex: 1;
  background: #f0f0f0;
}
.right-panel {
  flex: 1;
  background: #e0e0e0;
}
.divider {
  width: 10px;
  background: #ccc;
  cursor: col-resize;
}
const divider = document.getElementById('divider');
const leftPanel = document.getElementById('leftPanel');
let isDragging = false;

divider.addEventListener('mousedown', (e) => {
  isDragging = true;
  document.body.style.cursor = 'col-resize';
});

document.addEventListener('mousemove', (e) => {
  if (!isDragging) return;
  const containerWidth = divider.parentNode.offsetWidth;
  const newLeftWidth = (e.clientX / containerWidth) * 100;
  leftPanel.style.flex = `0 0 ${newLeftWidth}%`;
});

document.addEventListener('mouseup', () => {
  isDragging = false;
  document.body.style.cursor = '';
});

使用第三方库实现拖拽调节

引入split.js等专门库可快速实现分栏拖拽功能:

<script src="https://unpkg.com/split.js/dist/split.min.js"></script>
Split(['#leftPanel', '#rightPanel'], {
  sizes: [50, 50],
  minSize: 100,
  gutterSize: 10,
  cursor: 'col-resize'
});

响应式布局增强

添加媒体查询确保移动设备上的可用性:

@media (max-width: 768px) {
  .container {
    flex-direction: column;
  }
  .divider {
    width: 100%;
    height: 10px;
    cursor: row-resize;
  }
}

保存用户偏好

使用localStorage存储用户调整后的宽度比例:

// 存储设置
leftPanel.addEventListener('mouseup', () => {
  const flexValue = leftPanel.style.flex;
  localStorage.setItem('panelRatio', flexValue);
});

// 加载设置
window.addEventListener('load', () => {
  const savedRatio = localStorage.getItem('panelRatio');
  if (savedRatio) leftPanel.style.flex = savedRatio;
});

触屏设备支持

为触摸事件添加相应处理:

js实现页面左右调节

divider.addEventListener('touchstart', (e) => {
  isDragging = true;
});

document.addEventListener('touchmove', (e) => {
  if (!isDragging) return;
  const touch = e.touches[0];
  const containerWidth = divider.parentNode.offsetWidth;
  const newLeftWidth = (touch.clientX / containerWidth) * 100;
  leftPanel.style.flex = `0 0 ${newLeftWidth}%`;
});

document.addEventListener('touchend', () => {
  isDragging = false;
});

标签: 页面js
分享给朋友:

相关文章

js实现轮播

js实现轮播

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

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js防抖和节流实现

js防抖和节流实现

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

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

vue实现页面手写

vue实现页面手写

Vue 实现手写功能 在 Vue 中实现手写功能通常需要使用 HTML5 的 Canvas 元素,结合鼠标或触摸事件来捕捉用户的绘制动作。以下是实现步骤和代码示例: 基础实现步骤 创建一个 Vue…