当前位置: 首页 > news >正文

软件开发与创新课程设计 第一周作业


一、来源

  这是一个由同学个人开发的小米商城前端练习项目。作为学习成果,该项目包含了登录页和首页两个核心页面,采用HTML、CSSJavaScript实现。项目的设计目标是模拟小米商城的视觉风格和基础交互体验,注重页面的展示效果,体现了作者对前端布局和基础交互逻辑的掌握。




二、运行环境

  • 操作系统: Windows。
  • 软件: Visual Studio Code。
  • 必要插件: Live Server。
  • Web浏览器: Edge。




三、主要问题列表、针对问题的改善或者重构思路

1. 轮播图不能无限轮播

  现象:当切换到最后一张图片时,再次点击“下一张”按钮无法继续循环到第一张,或者从第一张点击“上一张”时无法跳到最后一张,轮播在两端停止。
改善方案:实现轮播图的自动循环切换,同时同步更新指示器的选中状态,通过opacity控制图片显隐,视觉过渡更柔和。点击右侧按钮时,手动切换到下一张轮播图,同时暂停再重启自动轮播,避免手动操作与自动轮播冲突。点击左侧按钮时,手动切换到上一张轮播图,通过while处理索引负数的情况,实现从第一张切到最后一张的循环效果。点击指示器圆点,直接切换到对应轮播图;鼠标悬停轮播图时暂停自动轮播,离开后恢复自动轮播。

2. 页面下滑后无法回到顶部

  现象:当用户向下滚动浏览较长页面后,如果想返回导航栏或重新浏览顶部内容,只能手动滑动鼠标滚轮,非常不便。
改善方案:先给window绑定scroll事件,页面滚动时会持续触发这个函数。pageYOffset获取页面垂直滚动的距离,记录当前页面滚动的位置。页面滚动不足400px时,回顶部按钮隐藏;页面超过400px时,按钮显示。根据页面滚动状态,动态修改右侧悬浮菜单的top值,保证菜单始终处于合理的视觉位置,避免与页面内容重叠。




四、修改后的代码

点击查看代码
var banner_imgs = document.getElementsByClassName('banner-img');
var circles = document.getElementsByClassName('btn-circle');
var index = 0;
circles[index % banner_imgs.length].style.backgroundColor = '#fff';
var interval_id;
function interval() {interval_id = setInterval(function () {index++;for (var i = 0; i < banner_imgs.length; i++) {banner_imgs[i].style.opacity = 0;}banner_imgs[index % banner_imgs.length].style.opacity = 1;for (var i = 0; i < circles.length; i++) {circles[i].style.backgroundColor = '#33333380';}circles[index % banner_imgs.length].style.backgroundColor = '#fff';}, 6000)
}interval();var box_right = document.getElementsByClassName('box-right');
box_right[0].addEventListener('click', function () {clearInterval(interval_id);for (var i = 0; i < banner_imgs.length; i++) {banner_imgs[i].style.opacity = 0;}index++;index = index % banner_imgs.length;banner_imgs[index].style.opacity = 1;for (var i = 0; i < circles.length; i++) {circles[i].style.backgroundColor = '#33333380';}circles[index].style.backgroundColor = '#fff';interval();
})

点击查看代码
window.addEventListener('scroll', function () {var scroll_top = this.window.pageYOffset;if (scroll_top >= 400) {var return_top = document.querySelector('.return-top');return_top.classList.remove('right-menu-hidden');var right_menu = document.querySelector('.right-menu');right_menu.style.top = '253px';}else {var return_top = document.querySelector('.return-top');return_top.classList.add('right-menu-hidden');var right_menu = document.querySelector('.right-menu');right_menu.style.top = '360px';}
})




五、重构的项目的测试截图

image
image




六、总结

  原生JS开发往往导致DOM操作、事件监听和业务逻辑混杂在一起。在修改轮播图时,最大的难点是逆向推导原作者的逻辑脉络,如索引变量的命名、函数的作用域,避免破坏现有的定时器或点击事件,这比重写一个功能更耗时、更易出错。
  从逆向软件工程的角度来看,真正的难点往往不在于写代码,而在于理解别人为什么那样写代码以及如何在保持原有生态的前提下注入新生命。

http://www.jsqmd.com/news/440586/

相关文章:

  • 2026年知名的紫铜止水钢板公司推荐:不锈钢止水钢板实力工厂推荐 - 行业平台推荐
  • 2026年医美如何做豆包广告?合规GEO服务商推荐与操作指南 - 品牌2026
  • 跨平台自动化框架的OCR点击操作实现详解与思考
  • 2026北京不正当竞争纠纷优质律所推荐榜 - 资讯焦点
  • 2026年口碑好的铝钎焊炉厂家推荐:铜钎焊炉销售厂家哪家好 - 行业平台推荐
  • Spark在用户行为分析中的应用案例
  • xingba-coder
  • 2026年评价高的流延机设备工厂推荐:陶瓷膜流延机/固态电池膜流延机/储能电池膜流延机高口碑品牌推荐 - 行业平台推荐
  • OpenClaw 完整玩法指南:从零上手到高效开发
  • 深入解析C++ STL核心容器:list、stack、queue与priority_queue的实战指南
  • 游戏数据分类总结:静态配置(.asset)vs 动态交互(服务器数据)
  • 2026年靠谱的对拉螺杆公司推荐:止水螺杆实力厂家如何选 - 行业平台推荐
  • 盘点做量化实盘策略一般都会遇到哪些问题?
  • 128.最长连续数列
  • 2026年靠谱的uv涂装生产线品牌推荐:静电涂装生产线直销厂家选哪家 - 行业平台推荐
  • 企业高质量发展的4D层级体系构建:BD→OD→TD→LD
  • AI原生应用领域安全防护的体系架构与设计原则
  • 【图像加密】基于二维 Logistic 混沌映射+ Liu混沌系统的图像加密 解密及安全性分析信息熵、相邻像素相关性)附matlab代码
  • 2026年北京豆包广告服务商有哪些?联系方式与服务模式全解析 - 品牌2026
  • Milvus Collection 基本操作(Java SDK)
  • 浅析在Cursor中落地AI原生开发工作流OpenSpec规范管理工具:面向AI辅助工作流的规范驱动开发技术实践
  • 2026年GEO服务商怎么选?豆包广告公司联系方式一览 - 品牌2026
  • MilvusVectorStore 使用指南 ——基于spring-ai(可用于搭建Rag)
  • 2026年知名的pa66隔热条工厂推荐:门窗隔热条/尼龙隔热条/铝合金隔热条源头工厂推荐 - 行业平台推荐
  • RASPI裸机8(Filesystem)(TODO)
  • 2026年质量好的吸塑PET片厂家推荐:折盒PET片/食品级PET片/透明窗口膜PET片实力工厂怎么选 - 行业平台推荐
  • 记录win下,WPF设置 System.AppUserModel.PreventPinning 属性用于阻止用户将应用程序固定到任务栏
  • AI时代如何获客?联系哪家公司? - 品牌2026
  • P3750 [六省联考 2017] 分手是祝愿题解
  • 【算法面试必刷】200. 岛屿数量