如何使用css和javascript创建泪滴/水滴填充[重复]

Posted

技术标签:

【中文标题】如何使用css和javascript创建泪滴/水滴填充[重复]【英文标题】:How to create a teardrop/water drop filling using css and javascript [duplicate] 【发布时间】:2020-06-01 23:33:07 【问题描述】:

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

例如。

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

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

【问题讨论】:

考虑改用 SVG,它会容易得多。您可以只为液滴设置一个<path>,为条设置一个<mask><clipPath> 普通的旧 CSS/Javascript 在这种类型的问题上表现不佳 - 它并不是真正适合不规则形状的对象。有一些技巧,但泪滴形状太难了。因此,您可以采用以下两种方式之一 - 动态生成 SVG,或者如果您不需要高精度的图形,只需为各种级别的水滴制作 n 幅图像。对于这类事情来说,这通常已经足够了,但这取决于用例。 【参考方案1】:

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

<div class="box">
<svg  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>

接下来您要查看的是使用基于

的颜色填充路径

.tear 
  fill: red;
  stroke: black;
  stroke-width: 2PX;
 
  transform-origin: top center;
    <div class="box">
    <svg  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>

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

//change gradient 

function change()

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




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

 <div class="box">
<svg  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>

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

我相信这对你有帮助

【讨论】:

以上是关于如何使用css和javascript创建泪滴/水滴填充[重复]的主要内容,如果未能解决你的问题,请参考以下文章

CSS 3.0实现水滴单选框

CSS 3.0实现水滴加载特效

CSS 3.0实现水滴加载特效

CSS 3.0结合SVG实现水滴穿透加载动画

Swift / SpriteKit:如何创建水滴效果?

如何将 Amazon Route 53 与 Digital Ocean 水滴一起使用?