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

如何实现可随页面尺寸自适应缩放的图片对比滑块?

解决方案

可以实现自适应缩放需求,仅需调整CSS规则,原有JS逻辑几乎不需要修改,修改点如下:

1. 修正容器样式错误

你原有.wrapper规则中重复定义了两次max-height,将第二个max-height改为max-width: 100%,保证容器宽度不会超出视口范围:

.wrapper {
  height: 85vh;
  width: 57vh;
  max-height: 850px;
  max-width: 100%; /* 替换原重复的max-height属性 */
  position: relative;
}

2. 统一两张对比图的背景规则

不要使用background: round,改用固定的背景定位+缩放规则,保证两张图在任何尺寸下都完全对齐,不会出现错位变形:

/* 共用背景规则,保证两张图对齐 */
.wrapper .images .img-1,
.wrapper .images .img-2 {
  height: 100%;
  width: 100%;
  position: absolute;
  top: 0;
  left: 0;
  background-size: cover;
  background-position: left center;
  background-repeat: no-repeat;
}
/* 分别设置两张图的背景地址 */
.wrapper .images .img-1 {
  background-image: url("2.jpg"); /* 调整后版本的图片 */
}
.wrapper .images .img-2 {
  background-image: url("1.jpg"); /* 调整前版本的图片 */
  overflow: hidden; /* 关键属性:宽度变化时仅裁剪显示区域,背景不会跟着缩放 */
}

3. 可选优化(避免窗口缩放时滑块错位)

如果需要窗口尺寸变化时滑块位置保持对应显示比例,仅需在原有JS代码后新增几行监听逻辑即可:

const slider = document.querySelector(".slider input");
const img = document.querySelector(".images .img-2");
const dragLine = document.querySelector(".slider .drag-line");
// 原有滑块逻辑保留
slider.oninput = ()=>{
  let sliderVal = slider.value;
  dragLine.style.left = sliderVal + "%";
  img.style.width = sliderVal + "%";
}
// 新增窗口缩放监听
window.addEventListener('resize', () => {
  const sliderVal = slider.value;
  dragLine.style.left = `${sliderVal}%`;
  img.style.width = `${sliderVal}%`;
})

修改完成后组件就可以完全随页面尺寸自适应缩放,滑块功能也不会受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:24:09