纯享JS进度条控件
调用示例
const myProgressBar = ProgressBar(false); 参数控制是否初始化对象显示
设置进度
myProgressBar.updateProgress(50);
const ProgressBar = (shouldShowOnInit = true) => {
const overlay = document.createElement("div");
const container = document.createElement("div");
let progress = 0;
const progressBar = document.createElement("div");
const percentageDisplay = document.createElement("div");
let isShowing = false;
const init = () => {
overlay.style.position = "fixed";
overlay.style.top = 0;
overlay.style.left = 0;
overlay.style.width = "100%";
overlay.style.height = "100%";
overlay.style.backgroundColor = "rgba(0, 0, 0, 0.5)";
overlay.style.zIndex = 1002;
if (shouldShowOnInit) {
overlay.style.display = "block";
isShowing = true;
} else {
overlay.style.display = "none";
isShowing = false;
}
container.style.position = "absolute";
container.style.top = "50%";
container.style.left = "50%";
container.style.transform = "translate(-50%, -50%)";
container.style.borderRadius = "10px";
container.style.width = "80%";
container.style.backgroundColor = "white";
progressBar.style.width = `${progress}%`;
progressBar.style.height = "20px";
progressBar.style.borderRadius = "10px";
progressBar.style.backgroundColor = "orange";
progressBar.style.transition = "width 0.3s ease";
percentageDisplay.style.position = "absolute";
percentageDisplay.style.top = "50%";
percentageDisplay.style.left = "50%";
percentageDisplay.style.transform = "translate(-50%, -50%)";
percentageDisplay.style.fontSize = "24px";
percentageDisplay.style.color = "black";
percentageDisplay.textContent = "0%";
progressBar.appendChild(percentageDisplay);
container.appendChild(progressBar);
overlay.appendChild(container);
document.body.appendChild(overlay);
};
const updateProgress = (newProgress) => {
if (!isShowing) {
overlay.style.display = "block";
isShowing = true;
}
if (newProgress >= 0 && newProgress <= 100) {
progress = newProgress;
percentageDisplay.textContent = progress + "%";
progressBar.style.width = `${progress}%`;
}
};
const show = () => {
overlay.style.display = "block";
isShowing = true;
};
const hide = () => {
overlay.style.display = "none";
isShowing = false;
};
const destroy = () => {
updateProgress(100);
overlay.parentNode.removeChild(overlay);
};
init();
return {
updateProgress,
show,
hide,
destroy,
};
};