You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:基于原生JS实现双列列表响应式合并为单列的方法

用原生JS实现响应式两列转单列布局

没问题,我来帮你搞定这个响应式需求!核心思路是监听窗口尺寸变化,根据屏幕宽度动态决定是拆分数组为两列,还是合并成单列,同时我们会把渲染逻辑封装成可复用函数,再配合防抖优化性能。

步骤拆解

  • 封装渲染逻辑:把数组拆分、DOM渲染的代码抽成独立函数,方便初始加载和窗口变化时重复调用
  • 监听窗口resize事件:窗口大小改变时触发渲染,用防抖避免频繁执行
  • 响应式断点判断:设定一个宽度阈值(比如768px,可自行调整),大于阈值时分两列,小于则合并为单列

完整实现代码

<style>
/* 基础列样式 */
.column {
  float: right;
  margin-right: 1.2em;
  padding: 0 20px;
}

/* 小屏幕下单列布局 */
@media (max-width: 768px) {
  .column {
    float: none;
    margin-right: 0;
    margin-bottom: 1em;
  }
}
</style>

<div id="displayA" class="column"></div>
<div id="displayB" class="column"></div>

<script>
const arr = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l' ];
const displayA = document.getElementById('displayA');
const displayB = document.getElementById('displayB');
// 响应式断点,可根据需求修改
const RESPONSIVE_BREAKPOINT = 768;

// 防抖函数:避免窗口拖动时频繁触发渲染
function debounce(func, delay = 200) {
  let timer;
  return function() {
    clearTimeout(timer);
    timer = setTimeout(() => func.apply(this, arguments), delay);
  };
}

// 生成列表HTML的辅助函数,避免重复代码
function generateListHTML(items) {
  return items.map(item => `<li><a href="#">${item}</a></li>`).join('');
}

// 核心渲染函数
function renderColumns() {
  const windowWidth = window.innerWidth;
  
  if (windowWidth > RESPONSIVE_BREAKPOINT) {
    // 大屏幕:拆分数组为两列
    const firstColumnItems = arr.slice(0, 4);
    const secondColumnItems = arr.slice(4);
    
    displayA.innerHTML = generateListHTML(firstColumnItems);
    displayB.innerHTML = generateListHTML(secondColumnItems);
  } else {
    // 小屏幕:合并为单列,清空第二列内容
    displayA.innerHTML = generateListHTML(arr);
    displayB.innerHTML = '';
  }
}

// 页面加载完成后先渲染一次
renderColumns();
// 监听窗口resize事件,用防抖优化性能
window.addEventListener('resize', debounce(renderColumns));
</script>

关键细节说明

  1. 避免原数组被修改:替换了原来的splice方法(会修改原数组),改用slice方法,保证原数组始终完整可用
  2. 防抖优化:debounce函数可以减少窗口拖动时的渲染次数,避免不必要的性能消耗
  3. 样式与逻辑分离:用CSS媒体查询处理布局样式,JS负责内容的动态切换,分工更清晰
  4. 可维护性:把生成列表HTML的逻辑抽成辅助函数,后续修改列表结构只需要改这一处

内容的提问来源于stack exchange,提问作者bfoley_teamug

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 21:32:39