每运行一次前端,URL的8080就递增一次8081,8082,8083是怎么回事

一、前提要言

后端代码的端口号已经设置是8080,前端我打算设置为8081

二、问题描述

但是发现:每次运行前端,比如给我URL的是8086,下一次运行又变成8087,下一次又变成8088,8089。。。逐渐递增!!??

三、解决

方法 1:通过命令行参数

在运行 npm run serve 时,可以通过 --port 参数指定端口号。

npm run serve --port 8081

方法 2:修改 package.json 脚本

在 package.json 中修改 scripts 部分,直接指定端口号。如下图,加上--port 8081

方法 3:通过 vue.config.js 配置文件

在项目根目录下创建或修改 vue.config.js 文件,添加 devServer 配置项来指定端口号。

 anyway!

如果前面三个方法还不行!这可能是因为端口 8081 被其他程序占用了,Vue CLI 自动选择了下一个可用的端口(8082,8083,8084,。。。。

你可以检查端口号被谁占用了?在cmd输入:

netstat -ano | findstr :8081

如果被占用会有东西输出,没有就没东西

有就把占用端口号的这个进程杀死!(12345只是举例,换成真正的ID即可)

taskkill /PID 12345 /F

四、复盘

我的错误:

我一开始以为跨域问题是需要前端后端的端口号一致,所以我设置都是8080。。。

但实际上我的项目是前后端分离项目,所以不可以一样!!后端是8080,前端就设置是8081。

---->但是端口号不一样,那我前端就拿不到后端的数据了啊!?

----->so,来设置一个代理服务器,假装是8080,就可以骗过后端那到数据了!!

参考图:

<think>嗯,用户想要做一个前端的时间钟,显示天、小时、分钟、秒,每秒更新,还有一个按钮可以重置为零。首先,我得考虑怎么实现这个功能。 首先,结构部分,应该用HTML来搭建。需要四个部分分别显示天、小时、分钟和秒,每个部分用span或者div包裹,加上对应的类名方便后面用JS操作。然后加上一个按钮,点击后重置时间。 接下来是样式,用户可能希望看起来美观一点,所以用CSS来布局。可以考虑用flex布局让元素居中,设置一些内边距和背景颜色,让各个时间单位之间有间隔,比如用margin-right。数字部分可以加粗,标签用较小的字体,这样层次分明。 然后是JavaScript部分,核心是定时器每秒更新一次时间。需要计算从某个起始时间到当前时间的时间差,或者这里用户可能只需要显示从某个时间点开始的累计时间?不过根据需求,按钮是重置为0,所以可能这个计时器是从0开始,点击按钮后重置。不过用户的问题描述可能有两种情况:一种是显示从某个时间点开始经过的时间,另一种是倒计时。但根据问题中的按钮功能,应该是累计时间,点击后归零重新开始。 不过原问题提到“支持一个按钮可以变为0天0小时0分钟0秒”,也就是将显示的时间重置为零。所以这可能是一个正向计时器,从某个时刻开始累计,或者是一个可以重置的计时器,每次点击按钮就重新从零开始计时。 不过可能用户想要的是一个实时显示当前时间,但点击按钮后显示归零。但这样不太合理,可能更可能是显示一个计时器,从页面加载开始累计时间,点击按钮重置。或者,可能用户想要的是一个静态的时间显示,每秒更新时间,但点击按钮时归零。需要明确。 假设用户希望的是,页面上显示一个时间钟,默认显示0天0小时0分钟0秒,然后开始计时,每秒增加,当点击按钮时重置为0,重新开始计时。或者,另一种情况是,时间显示的是从某个特定时间点开始的经过时间,比如用户访问页面的时间,然后每秒更新,按钮重置为当前时间,导致显示的时间归零。或者可能是倒计时,但按钮重置为零,这需要进一步分析。 但根据问题描述,用户可能希望的是一个计时器,从零开始,每秒自动增加,并且可以重置为零。所以需要记录开始时间,然后用当前时间减去开始时间得到经过的时间,当点击按钮时,将开始时间设置为当前时间,这样显示的时间就会归零,然后重新计时。 不过,如果用户希望的是,点击按钮后立即将显示的时间归零,并且重新开始计时,那么应该如何处理? 可能的实现步骤如下: 1. 在HTML中创建显示时间的元素,每个部分用单独的span,方便更新。 2. 使用JavaScript的setInterval每秒更新一次显示。 3. 记录开始时间,每次更新时计算当前时间与开始时间的差值,转换为天、小时、分钟、秒。 4. 当点击按钮时,重置开始时间为当前时间,这样差值变为零,显示归零,并重新开始计时。 具体步骤: - 定义变量startTime来存储开始的时间戳。 - 在函数中,每次计算当前时间 - startTime得到总毫秒数。 - 将总毫秒数转换为天、小时、分钟、秒。 - 更新DOM元素的内容。 - 按钮点击事件处理函数中,将startTime设置为当前时间,并立即调用更新函数,这样显示就会归零,并且定时器会继续每秒更新。 可能的问题点: - 如何正确转换毫秒数为天、小时等。需要注意余数的处理,比如总毫秒数除以一天的毫秒数得到天数,余数再除以小时的毫秒数得到小时数,以此类推。 - 处理定时器的启动和重置,避免多个定时器同时运行,导致加速更新。需要在重置时清除旧的定时器并重新设置?或者不需要,因为setInterval只要正确维护,只需要一个定时器即可。 可能的代码结构: HTML部分: <div id="timer"> <span id="days">0</span>天 <span id="hours">0</span>小时 <span id="minutes">0</span>分钟 <span id="seconds">0</span>秒 </div> <button id="resetBtn">重置</button> CSS部分: 样式调整,让显示更美观。 JavaScript部分: let startTime = Date.now(); // 初始开始时间 let timerId; function updateTimer() { const currentTime = Date.now(); const diff = currentTime - startTime; // 计算天、小时等 const days = Math.floor(diff / (1000 * 60 * 60 * 24)); const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60)); const seconds = Math.floor((diff % (1000 * 60)) / 1000); // 更新DOM document.getElementById('days').textContent = days; document.getElementById('hours').textContent = hours; document.getElementById('minutes').textContent = minutes; document.getElementById('seconds').textContent = seconds; } // 启动定时器 timerId = setInterval(updateTimer, 1000); // 重置按钮点击事件 document.getElementById('resetBtn').addEventListener('click', () => { startTime = Date.now(); // 重置开始时间为当前时间,这样diff变为0 updateTimer(); // 立即更新显示为0 }); 这样,每次点击按钮时,startTime被设置为当前时间,所以diff是0,显示归零,然后定时器继续每秒更新,显示新的时间差。 测试时需要注意,当用户点击重置后,计时器是否准确重新开始。例如,假设已经运行了10秒,点击重置后,显示归零,然后每秒递增。 另外,可能出现的问题是在计算小时、分钟时是否使用了正确的余数。比如: 总毫秒数diff,除以一天的毫秒数得到天数,余数是剩下的毫秒数,再除以一小时的毫秒数得到小时数,依此类推。 例如: days = Math.floor(diff / (1000*60*60*24)); remaining = diff % (1000*60*60*24); hours = Math.floor(remaining / (1000*60*60)); remaining = remaining % (1000*60*60); minutes = Math.floor(remaining / (1000*60)); remaining = remaining % (1000*60); seconds = Math.floor(remaining / 1000); 这样处理是正确的。 这样,每次更新都会正确显示经过的时间。 另外,在初始化时调用一次updateTimer,避免页面加载后等待1秒才显示初始时间。不过这里初始startTime是Date.now(),diff为0,所以初始显示都是0。不过当页面加载后,用户可能会看到立即开始计时。比如,页面加载时,startTime是当前时间,然后每秒更新,显示从那时起的经过时间。这样可能需要调整初始逻辑,如果用户希望一开始显示0,然后开始递增,那么需要startTime在页面加载时设置为当前时间,然后diff随着时间增长而增加。这符合常规的计时器逻辑。 所以代码是正确的。 另外,按钮点击后,将startTime设置为当前时间,diff变为0,所以显示归零,然后再次开始计算新的时间差,这正是用户需要的。 综上,这个方案是可行的。</think>以下是一个实现计时器的示例代码,包含HTML、CSS和JavaScript部分,满足每秒自动更新并支持重置归零: ```html <!DOCTYPE html> <html> <head> <style> .timer { font-size: 24px; margin: 20px; padding: 15px; background: #f0f0f0; display: inline-flex; border-radius: 8px; } .timer span { font-weight: bold; margin: 0 5px; } .timer-label { font-size: 16px; color: #666; margin-right: 15px; } button { padding: 10px 20px; font-size: 16px; cursor: pointer; background: #4CAF50; color: white; border: none; border-radius: 4px; } button:hover { background: #45a049; } </style> </head> <body> <div class="timer"> <span id="days">0</span><span class="timer-label">天</span> <span id="hours">0</span><span class="timer-label">小时</span> <span id="minutes">0</span><span class="timer-label">分钟</span> <span id="seconds">0</span><span class="timer-label">秒</span> </div> <br> <button onclick="resetTimer()">重置时间</button> <script> let startTime = Date.now(); // 记录初始时间戳 // 时间更新函数 function updateTimer() { const currentTime = Date.now(); const diff = currentTime - startTime; // 计算时间差(毫秒) // 时间单位转换 const days = Math.floor(diff / (1000 * 60 * 60 * 24)); const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60)); const seconds = Math.floor((diff % (1000 * 60)) / 1000); // 更新页面显示 document.getElementById('days').textContent = days; document.getElementById('hours').textContent = hours; document.getElementById('minutes').textContent = minutes; document.getElementById('seconds').textContent = seconds; } // 重置函数 function resetTimer() { startTime = Date.now(); // 重置起始时间 updateTimer(); // 立即更新显示 } // 启动定时器(每秒执行) setInterval(updateTimer, 1000); // 初始化显示 updateTimer(); </script> </body> </html> ``` **实现原理说明:** 1. **时间计算**: - 通过`Date.now()`获取时间戳,计算与起始时间的差值 - 使用取模运算分解出天、小时、分钟、秒: - `天数 = 总毫秒数 / 每天毫秒数` - `剩余毫秒数 = 总毫秒数 % 每天毫秒数` - 依次类推计算小时、分钟、秒 2. **自动更新**: - 使用`setInterval`每秒执行一次`updateTimer`函数 - 每次执行时重新计算时间差并更新DOM显示 3. **重置功能**: - 点击按钮时将`startTime`重置为当前时间戳 - 立即调用`updateTimer`实现归零显示 **功能扩展建议**: 1. 添加暂停/继续功能:通过`clearInterval`控制定时器 2. 增加动画效果:使用CSS过渡实现数字滚动效果 3. 添加音效:在特定时间点触发声音提示 4. 支持自定义起始时间:通过URL参数获取初始时间值 这个实现会在页面加载后自动开始计时,点击重置按钮会立即归零并重新开始计时,所有时间单位均使用两位数显示(可通过`padStart`方法实现,当前版本为简洁显示未添加)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值