news 2026/10/22 2:06:53

html+css+js 实现衣服颜色自定义更换的换装系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
html+css+js 实现衣服颜色自定义更换的换装系统

创建项目

如图所示创建一个基本的html项目 我们就叫 outfit-change

导入图片

一共有三张图片 分别是 原图 衣服图和腰带图 如图所示 无水印的图片大家可以去https://www.doitwiki.com/article/details/181203990710272 里面下载大家自行导入即可

效果模拟

首先我们是把原图设置为背景图 需要注意的是 大家如果是自己扣的图衣服图片的位置和尺寸不要变, 然后 我们把衣服和 腰带覆盖到原图上面 用定位的方式,我们把衣服设置一下背景颜色 通过mask蒙版的方式进行设置 再用 mix-blend-mode的方式保留衣服的纹理效果 代码如下

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <style type="text/css"> .box { position: relative; width: 250px; height: 200px; margin: 0 auto; margin-top: 150px; background: url(./img/body.png) no-repeat center/contain; } .skirt { width: 100%; position: absolute; inset: 0; /* 让背景图宽度撑满容器 */ } .belt-img { background-color: green; mask: url("./img/belt.png") no-repeat center/contain; mix-blend-mode: multiply; } .clothes-img { background-color: red; mask: url("./img/clothes.png") no-repeat center/contain; mix-blend-mode: multiply; } </style> </head> <body> <div class="box"> <div class="skirt belt-img"></div> <div class="skirt clothes-img"></div> </div> </body> </html>

自定义完整效果

代码如下 大概意思就是通过css变量来进行改变颜色 其他的原理和上一步一样

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>换装</title> <style type="text/css"> :root { /* 使用 CSS 变量管理颜色,方便 JS 实时修改 */ --clothes-c1: #ff4757; --clothes-c2: #ff6b81; --belt-color: #2f3542; } body { background-color: #f0f2f5; margin: 0; height: 100vh; display: flex; justify-content: center; align-items: center; font-family: system-ui, sans-serif; } .container { display: flex; align-items: center; gap: 60px; /* 侧边栏与模特之间的间距 */ } /* --- 模特展示区 --- */ .model-view { position: relative; width: 320px; height: 480px; /* 身体原图作为底层背景 */ background: url("./img/body.png") no-repeat center/contain; filter: drop-shadow(0 15px 25px rgba(0,0,0,0.1)); } .layer { position: absolute; inset: 0; /* 统一遮罩配置:不重复、居中、自适应大小 */ -webkit-mask-repeat: no-repeat; -webkit-mask-position: center; -webkit-mask-size: contain; mask-repeat: no-repeat; mask-position: center; mask-size: contain; /* 混合模式保留底图纹理:暗部叠加 */ mix-blend-mode: multiply; } .clothes-layer { background: linear-gradient(135deg, var(--clothes-c1), var(--clothes-c2)); -webkit-mask-image: url("./img/clothes.png"); mask-image: url("./img/clothes.png"); } .belt-layer { background: var(--belt-color); -webkit-mask-image: url("./img/belt.png"); mask-image: url("./img/belt.png"); } /* --- 侧边选择面板 --- */ .control-box { background: #fff; padding: 20px; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); width: 140px; } .section-title { font-size: 12px; color: #94a3b8; font-weight: bold; display: block; margin-bottom: 15px; letter-spacing: 1px; } .color-item { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; } /* 美化 input color */ input[type="color"] { -webkit-appearance: none; border: none; width: 28px; height: 28px; cursor: pointer; background: none; padding: 0; } input[type="color"]::-webkit-color-swatch { border: 2px solid #f1f5f9; border-radius: 6px; } .label-text { font-size: 13px; color: #475569; } </style> </head> <body> <div class="container"> <div class="control-box"> <span class="section-title">衣服</span> <div class="color-item"> <input type="color" id="cp1" value="#ff4757"> <span class="label-text">色调 1</span> </div> <div class="color-item"> <input type="color" id="cp2" value="#ff6b81"> <span class="label-text">色调 2</span> </div> </div> <div class="model-view"> <div class="layer clothes-layer"></div> <div class="layer belt-layer"></div> </div> <div class="control-box"> <span class="section-title">腰带</span> <div class="color-item"> <input type="color" id="bp1" value="#2f3542"> <span class="label-text">单色</span> </div> </div> </div> <script> // 缓存根节点提升性能 const rootStyle = document.documentElement.style; // 衣服控制:处理两个色块合并为渐变 const handleClothesChange = () => { rootStyle.setProperty('--clothes-c1', document.getElementById('cp1').value); rootStyle.setProperty('--clothes-c2', document.getElementById('cp2').value); }; // 皮带控制:直接修改变量 const handleBeltChange = (e) => { rootStyle.setProperty('--belt-color', e.target.value); }; // 绑定事件 document.getElementById('cp1').oninput = handleClothesChange; document.getElementById('cp2').oninput = handleClothesChange; document.getElementById('bp1').oninput = handleBeltChange; </script> </body> </html>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/19 19:23:27

以曲求直:校平技术中的反直觉哲学

"矫枉过正"这个成语通常带有贬义&#xff0c;指纠正错误超过了应有的限度。但在金属校平领域&#xff0c;这却是一项必须遵循的物理定律——要想让弯曲的板材变直&#xff0c;必须先让它弯得更厉害。这种看似矛盾的操作逻辑&#xff0c;构成了校平技术最迷人的反直觉…

作者头像 李华
网站建设 2026/10/19 3:27:34

【易经系列】六二:直方大,不习无不利。

文章目录 1. 词义拆解2. 整体释义3. 深层哲学含义总结 六二&#xff0c;直方大&#xff0c;不习无不利。 《象》曰&#xff1a;六二之动&#xff0c;直以方也&#xff0c;"不习无不利"&#xff0c;地道光也。这句话出自《易经》&#xff08;周易&#xff09;中的坤卦…

作者头像 李华
网站建设 2026/10/19 2:08:56

理解巴菲特的财务指标分析

理解巴菲特的财务指标分析 关键词:巴菲特、财务指标分析、价值投资、财务报表、投资决策 摘要:本文旨在深入探讨巴菲特的财务指标分析方法。通过对巴菲特投资理念和所关注的关键财务指标进行剖析,阐述其在价值投资中的重要性。从核心概念、算法原理、数学模型到实际案例分析…

作者头像 李华
网站建设 2026/10/21 10:51:36

深度探究提示工程架构师的提示工程文档规范体系应用

深度探究提示工程架构师的提示工程文档规范体系应用 一、引言:从“技巧”到“工程化”——为什么提示工程需要文档规范? 1. 一个让所有AI团队头疼的痛点 你是否经历过这样的场景? 团队里的提示工程师各自为战,有人用自然语言写提示,有人用JSON格式,有人加了一堆上下文…

作者头像 李华
网站建设 2026/10/19 4:51:27

Flutter 三端应用实战:OpenHarmony “极简文本行数统计器”

一、为什么需要“简易文本行数统计器”&#xff1f; 在 OpenHarmony 的内容创作、代码审查与数据处理场景中&#xff0c;“行数”是衡量内容规模与结构清晰度的基础指标&#xff1a; 开发者&#xff1a;快速验证配置文件行数是否超标&#xff0c;日志文件是否异常增长&#x…

作者头像 李华
网站建设 2026/10/19 20:59:00

开题报告 网上书店管理系统的设计与实现

目录开题报告概述系统核心功能模块技术实现方案预期成果项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作开题报告概述 网上书店管理系统旨在通过数字化手段优化图书销售、库存管理及用户服务流程。系统通常…

作者头像 李华