如何使用 css 和 javascript 创建泪滴/水滴填充

Pan*_*nda 1 javascript css

如何使用 css 和 javascript 动态填充水来创建泪滴/水滴填充。

例如。

在此输入图像描述

它将填充水/泪滴,具体取决于百分比。

例如,当百分比为 100% 时,它将充满水/泪滴。

Jon*_*mes 5

解决该问题的最佳方法是使用 SVG 图形,因此动态创建它

<div class="box">
<svg width="100%" viewbox="0 0 50 42">
  <path class="tear"
        d="M15 6
           Q 15 6, 25 18
           A 12.8 12.8 0 1 1 5 18
           Q 15 6 15 6z" />
</svg>
  </div>
Run Code Online (Sandbox Code Playgroud)

您想要查看的下一件事是用基于颜色的颜色填充路径

.tear {
  fill: red;
  stroke: black;
  stroke-width: 2PX;
 
  transform-origin: top center;
}
Run Code Online (Sandbox Code Playgroud)
    <div class="box">
    <svg width="100%" viewbox="0 0 50 42">
      <path class="tear"
            d="M15 6
               Q 15 6, 25 18
               A 12.8 12.8 0 1 1 5 18
               Q 15 6 15 6z" />
    </svg>
      </div>
Run Code Online (Sandbox Code Playgroud)

最后一步是创建渐变并使用 JS 操作渐变的开始和结束位置

//change gradient 

function change()
{
let tear = document.getElementById('tear');
tear.setAttribute("fill","url(#grad2)");

}


var click1 =document.getElementById('clickMe');
click1.addEventListener("click",change);
Run Code Online (Sandbox Code Playgroud)
.tear {
  
  stroke: black;
  stroke-width: 2PX;
 
  transform-origin: top center;
}
Run Code Online (Sandbox Code Playgroud)
<div id='clickMe'> Click here !</div>

 <div class="box">
<svg width="100%" viewbox="0 0 50 42">
<defs>
    <linearGradient id="grad1" x1="0%" y1="0%" x2="0%" y2="100%">
      <stop offset="0%" style="stop-color:rgb(255,0,0);stop-opacity:1" />
      <stop offset="50%" style="stop-color:rgb(255,255,255);stop-opacity:1" />
      <stop offset="60%" style="stop-color:rgb(0,0,255);stop-opacity:1" />
    </linearGradient>
    
     <linearGradient id="grad2" x1="0%" y1="0%" x2="0%" y2="100%">
      <stop offset="0%" style="stop-color:rgb(255,0,0);stop-opacity:1" />
      <stop offset="20%" style="stop-color:rgb(255,255,255);stop-opacity:1" />
      <stop offset="30%" style="stop-color:rgb(0,0,255);stop-opacity:1" />
    </linearGradient>
  </defs>

  <path id="tear" class="tear"
        d="M15 6
           Q 15 6, 25 18
           A 12.8 12.8 0 1 1 5 18
           Q 15 6 15 6z" fill="url(#grad1)"/>
</svg>
  </div>
Run Code Online (Sandbox Code Playgroud)

在网络上的其他示例中,人们尝试覆盖另一条路径,但对于最简单的方法,只需在 svg 和一些 JS 中使用几个渐变

我相信这对你有帮助