gpt4 book ai didi

Javascript div 宽度倒计时

转载 作者:行者123 更新时间:2023-11-30 20:23:25 26 4
gpt4 key购买 nike

我正在尝试通过 div 的宽度可视化倒计时。这可以用于显示下一个横幅何时滑入的横幅系统,或者用于显示通知可见多长时间的通知系统。

所以在我下面的示例中,我在 5 秒后清空了 .outer div,但是 .timer div 的宽度没有达到 width: 0% ;setTimeout() 启动的同时。

变量 len 表示横幅或通知显示的时间。

变量 offset 中的计算让我失望(我认为),我似乎无法正确计算。我希望它是动态的,也就是说,无论 len 是什么以及外部/父 div 的宽度是多少,它总是需要 len 时间才能达到 宽度:0%;

我希望我的解释是有道理的。任何帮助将不胜感激。

const len = 5000;
let outer = document.querySelector('.outer');

let timer = document.querySelector('.timer');
let timerWidth = timer.offsetWidth;
let offset = len / timerWidth;
let init = 100;

let interval = setInterval(() => {
init = init - offset;
timer.style.width = init + '%';
}, 1000);

setTimeout(() => {
outer.innerHTML = '';
clearInterval(interval);
}, len);
* {
box-sizing:border-box;
}

body {
padding: 100px 10px 10px;
}

.outer {
width: 100%;
border: 1px solid slategray;
padding: 10px;
}

.timer {
width: 100%;
height: 10px;
background: red;
transition: all 1000ms linear;
}
<div class="outer">
<div class="timer"></div>
<p>Some Message Here!</p>
</div>

最佳答案

代码的两个问题:

  1. interval 不会在页面加载后立即开始,因此 CSS 转换较晚。
  2. offset 确实是错误的。

这是我修复它的方法:

let toElapse = 3000; // modify as you like
let tick = 1000; //if you modify this don't forget to replicate
//in CSS transition prop
let countDownEl = document.querySelector('#countdown');
let outer = document.querySelector('.outer');
let timer = document.querySelector('.timer');
let init = 100;
// we calculate the offset based on the tick and time to elapse
let offset = init / (toElapse/tick);
countDownEl.innerHTML = init;

setTimeout(()=>{
// we need to start the first CSS transition ASAP so it is not late.
init = init - offset;
timer.style.width = init.toFixed(2) + '%';
},0)

let interval = setInterval(() => {
// the same interval.
countDownEl.innerHTML = init;
init = init - offset;
timer.style.width = init.toFixed(2) + '%';
}, tick);

setTimeout(() => {
// the same clearance timeout
outer.innerHTML = '';
clearInterval(interval);
}, toElapse);
* {
box-sizing:border-box;
}

body {
padding: 100px 10px 10px;
}

.outer {
width: 100%;
border: 1px solid slategray;
padding: 10px;
}

.timer {
width: 100%;
height: 10px;
background: red;
transition: width 1s linear;
}
<div class="outer">

<div class="timer"></div><span id="countdown"></span>
<p>Some Message Here!</p>
</div>

关于Javascript div 宽度倒计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51205138/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com