如何使用SVG作为剪辑路径

坦干扬

我正在尝试建立星级评定功能,但惊讶地发现给我最大麻烦的部分是弄清楚如何获得星形。在我看来,考虑到我已经构建的内容,最直接的方法是尝试使用SVG星形在显示等级的div元素上创建剪切路径。我对一般意义上的clip-path很熟悉,并已将其用于更基本的形状,但是要了解如何将其与svg一起使用以及为什么我的当前代码无法正常工作(我不完全了解svg)我典型的驾驶室)。

编码:

const stars = document.getElementsByClassName('star');

function fillStars(starClasses, placeRating) {
   const wholeFill = Math.floor(placeRating);
   const decimalFill = placeRating % 1;
   const yellowFill = decimalFill.toFixed(2).toString().replace('0.', '');

   for (let i = 0; i < wholeFill; i++) {
      starClasses[i].style.backgroundColor = '#fbff01';
   }

   if (placeRating - wholeFill !== 0) {
      starClasses[starClasses.length - 1].style.background = `linear-gradient(90deg, #fbff01 ${yellowFill}%, #FFFFFF 0%)`;
   } 
 }

fillStars(stars, 4.3);
.star {
  width: 30px;
  height: 30px;
  border: solid 1px gray;
  clip-path: url(#star-clip);
}
      
#rating {
  display: flex;
}
<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0">
    <defs>
        <clipPath id="star-clip" clipPathUnits="objectBoundingBox">
            <rect fill="#fff" id="canvas_background" height="40" width="41" y="-1" x="-1"/>
              <rect fill="url(#gridpattern)" stroke-width="0" y="0" x="0" height="100%" width="100%"/>
              <path id="svg_1" d="m3.885,14.64105l11.84103,0l3.65897,-12.22295l3.65897,12.22295l11.84103,0l-9.57958,7.55411l3.65916,12.22295l-9.57958,-7.55431l-9.57958,7.55431l3.65916,-12.22295l-9.57958,-7.55411z" stroke-width="1.5" stroke="#000" fill="#fff"/>
        </clipPath>
    </defs>
    </svg>
    <div id="header">
      <div id="rating">
        <div id="star-1" class="star"></div>
        <div id="star-2" class="star"></div>
        <div id="star-3" class="star"></div>
        <div id="star-4" class="star"></div>
        <div id="star-5" class="star"></div>
      </div>
    </div>

卡萨夫

关于从原始SVG尺寸计算clipPath的0-1范围,这里有一个很好的答案

.star {
  width: 30px;
  height: 30px;
  clip-path: url(#star-clip);
  background: Gold;
}

#rating {
  display: flex;
}
<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0">
  <defs>
    <clipPath id="star-clip" clipPathUnits="objectBoundingBox" transform="scale(0.025, 0.02439)">
      <path d="m3.885,14.64105l11.84103,0l3.65897,-12.22295l3.65897,12.22295l11.84103,0l-9.57958,7.55411l3.65916,12.22295l-9.57958,-7.55431l-9.57958,7.55431l3.65916,-12.22295l-9.57958,-7.55411z" />
    </clipPath>
  </defs>
</svg>

<div id="rating">
  <div id="star-1" class="star"></div>
  <div id="star-2" class="star"></div>
  <div id="star-3" class="star"></div>
  <div id="star-4" class="star"></div>
  <div id="star-5" class="star"></div>
</div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用移动的div作为CSS剪辑路径

来自分类Dev

使用整个 SVG 的 CSS 剪辑路径

来自分类Dev

如何使SVG剪辑路径在Google Chrome中正常工作?

来自分类Dev

缩放时如何保留SVG剪辑路径的长宽比

来自分类Dev

SVG 剪辑路径的坐标翻转?

来自分类Dev

如何应用相对于原始 SVG 而不是目标元素的 SVG 剪辑路径

来自分类Dev

SVG剪辑路径不起作用

来自分类Dev

使用剪辑路径从圆圈中的 4 条 svg 行中删除 37px

来自分类Dev

有 SVG 路径问题的 CSS 剪辑路径属性

来自分类Dev

如何使用SVG作为游标

来自分类Dev

我如何用jQuery动画剪辑路径

来自分类Dev

我如何用jQuery动画剪辑路径

来自分类Dev

如何使内容过度剪辑路径形状 div?

来自分类Dev

使用clipPathUnits =“ objectBoundingBox”使剪辑路径消失

来自分类Dev

将剪辑路径:polygon()转换为与Edge兼容的SVG

来自分类Dev

SVG剪辑路径根据视口调整大小

来自分类Dev

没有运气调整SVG剪辑路径的大小

来自分类Dev

SVG剪辑路径在本地工作,但不在线

来自分类Dev

如何使用变量作为资源的路径?

来自分类Dev

如何使用变量作为资源的路径?

来自分类Dev

如何使用grep输出作为cd的路径?

来自分类Dev

如何将路径添加到剪辑路径

来自分类Dev

图像作为svg路径的背景

来自分类Dev

如何使用SVG React组件作为背景?

来自分类Dev

如何使用as3同时访问所有影片剪辑(以及影片剪辑中的影片剪辑,...)?

来自分类Dev

从剪辑到剪辑路径迁移以使用百分比值

来自分类Dev

如何使 CSS 剪辑路径仅驻留在 div 之上?

来自分类Dev

如何使svg遵循路径?

来自分类Dev

下拉菜单无法使用剪辑路径 css 工作

Related 相关文章

热门标签

归档