进度条按钮

问题描述 投票:0回答:1

我想要这种类型的动画进度按钮:https://dribbble.com/shots/16005120-Energy-Bar 按钮的左侧部分将有一个心形图像,右侧部分将为进度条留空,如果我们单击心形图像,则图像应该更改,并且进度条将从右侧部分加载。

我已经尝试了很多次,但我不能,这是我的代码

document.getElementById('heartButton').addEventListener('click', function() {
  const heartIcon = document.getElementById('heartIcon');
  const brokenHeartIcon = document.getElementById('brokenHeartIcon');
  const progressBar = document.querySelector('.progress-bar');

  // Hide the heart image and display the broken heart image
  heartIcon.style.display = 'none';
  brokenHeartIcon.style.display = 'block';

  // Animate progress bar
  progressBar.style.width = '100%';

  // Reset button after animation
  setTimeout(function() {
    progressBar.style.width = '0';

    // Toggle back to the original state
    heartIcon.style.display = 'block';
    brokenHeartIcon.style.display = 'none';
  }, 1000); // Change the duration as needed
});
body {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100vh;
  margin: 0;
}

button {
  position: relative;
  display: flex;
  align-items: center;
  background-color: #3498db;
  border: none;
  padding: 10px 20px;
  color: #fff;
  font-size: 16px;
  cursor: pointer;
  overflow: hidden;
}

.left-section {
  display: flex;
  align-items: center;
}

#heartIcon,
#brokenHeartIcon {
  width: 30px;
  height: 30px;
  margin-right: 10px;
}

#brokenHeartIcon {
  display: none;
}

.right-section {
  width: 80px;
  height: 30px;
  background-color: #000;
  overflow: hidden;
}

.progress-bar {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  width: 0;
  background-color: #e74c3c;
  transition: width 1s linear;
  /* Use linear transition for smooth animation */
}
<button id="heartButton">
  <div class="left-section">
    <img src="love.png" alt="Heart Icon" id="heartIcon">
    <img src="heartbroken.png" alt="Broken Heart Icon" id="brokenHeartIcon">
  </div>
  <div class="right-section">
    <div class="progress-bar"></div>
  </div>
</button>

javascript css button progress-bar
1个回答
0
投票

看起来

.progress-bar
position: absolute
并且具有相对位置的最接近的父元素是按钮元素。

如果您不希望进度条与整个按钮重叠,则将

postition: relative
添加到
.right-section
可能就可以解决问题

© www.soinside.com 2019 - 2024. All rights reserved.