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

如何优化JS等比尺寸计算函数支持按宽/高两种维度缩放

等比响应式尺寸计算函数优化方案

最终实现代码

// 全局常量可根据业务场景自行调整
const WINDOW_WIDTH = window.innerWidth
const WINDOW_HEIGHT = window.innerHeight

export default (originalDimensions, finalConfig = { width: WINDOW_WIDTH }) => {
  // 兼容旧版本直接传入finalWidth的调用方式
  const config = typeof finalConfig === 'number' 
    ? { width: finalConfig } 
    : finalConfig

  let responsiveWidth, responsiveHeight

  // 传入最终宽度,计算匹配高度
  if (config.width !== undefined) {
    responsiveWidth = config.width
    responsiveHeight = ruleOfThree(
      originalDimensions.height,
      originalDimensions.width,
      responsiveWidth
    )
  } 
  // 传入最终高度,计算匹配宽度
  else if (config.height !== undefined) {
    responsiveHeight = config.height
    responsiveWidth = ruleOfThree(
      originalDimensions.width,
      originalDimensions.height,
      responsiveHeight
    )
  } 
  // 参数非法兜底逻辑
  else {
    throw new Error('请传入合法的最终宽度width或最终高度height')
  }

  return {
    width: responsiveWidth,
    height: responsiveHeight,
  };
};

/* 三分律辅助函数 注:原代码存在语法错误,function声明不需要加箭头符号 */
function ruleOfThree (originalX, originalY, finalY, direct = true) {
  if (direct) {
    return (originalX * finalY) / originalY;
  }
  return (originalY * finalY) / originalX;
};

使用示例

  • 按最终宽度计算(完全兼容原有调用逻辑,旧代码无需修改即可正常运行)
// 旧版调用方式仍支持
const size1 = calculateResponsiveSize({width: 1920, height: 1080}, 1280)
// 新的配置项调用方式
const size2 = calculateResponsiveSize({width: 1920, height: 1080}, {width: 1280})
// 默认使用窗口宽度计算
const size3 = calculateResponsiveSize({width: 1920, height: 1080})
  • 按最终高度计算
const size = calculateResponsiveSize({width: 1920, height: 1080}, {height: 720})
// 如果需要默认按窗口高度计算,仅需修改函数入参的默认配置为{height: WINDOW_HEIGHT}即可

实现思路说明

  • 没有引入复杂设计模式,通过参数判断即可完成需求,代码可读性、可维护性更高
  • 做了向下兼容处理,原有调用该函数的业务代码不需要任何调整
  • 后续如果需要扩展其他计算规则,仅需在config中新增属性判断逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:27:00