我有一个带有 carousel 滑块库的网站.问题是,每个滑块都有一个带有边框半径的按钮圆,当我单击一个按钮时,我会将其指定为"活动"类,因此当处于活动状态时,我会将按钮变大.但我也想改变它的形状,让它看起来像一颗星星.我以为把svg和clipPath放在一起会成功,但我没有成功.如果有人能告诉我如何改变它的形状,如果是任何图书馆或什么的,这将对我有很大帮助.

以下是我try 过的:

<button>
    <svg class="star2svg">
        <defs>
            <clipPath id="clipStar">
                <path class="star2" id="star2" d="M325.07,30.69l80.91,163.95l180.93,26.29c18.09,2.63,25.31,24.86,12.22,37.62L468.22,386.16l30.91,180.2
                c3.09,18.02-15.82,31.76-32,23.25l-161.83-85.08l-161.83,85.08c-16.18,8.51-35.09-5.23-32-23.25l30.91-180.2L11.45,258.55
                c-13.09-12.76-5.87-34.99,12.22-37.62l180.93-26.29l80.91-163.95C293.61,14.3,316.98,14.3,325.07,30.69z"/>
            </clipPath>
        </defs>
    </svg>
</button>

我想这样做:

button {
    width: 0.8em;
    height: 0.8em;
    border: none;
    border-radius: 50%;
    transition: 0.2s ease-out;
    position: relative;
    clip-path: url('#clipStar');

    .star2svg {
        position: absolute;
        left: 0;
        right: 0;
        display: block;
        width: 100%;
        height: 100%;
    }
}

推荐答案

您可以通过css path()函数交换/转换svg路径形状.

对于过渡/变形,需要两个形状具有完全相同的命令数.

在圆和星之间转换可以通过以下方式完成:

  • 将星形路径缩减为具有10个点的多边形
  • 圆角是通过笔划线条封口/笔划线条连接属性实现的
  • 初始圆形状是通过将所有10个点置于中心,并应用更大的笔划宽度M50,53.1L50,53.1L50,53.1L50,53.1L50,53.1L50,53.1L50,53.1L50,53.1L50,53.1L50,53.1L50,53.1z来创建的

实例

.btn {
  appearance: none;
  -webkit-appearance: none;
  font-size: 10vw;
  background: none;
  padding: 0;
  border: none;
  color: #000;
  cursor: pointer;
}

.btnSvg {
  display: inline-block;
  height: 1em;
}

.btn .btnSvgPath {
  transition: 0.3s;
  border: none;
  stroke-width: 75;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.btn:hover .btnSvgPath {
  d: path('M50,77L23.3,91l5.1-29.7l-21.6-21L36.7,36L50,9l13.3,27l29.8,4.3l-21.6,21L76.7,91L50,77z');
  stroke-width: 5;
  color: gold;
}
<button class="btn">
    <svg class="btnSvg" viewBox="0 0 100 100" >
        <path class="btnSvgPath" d="M50,53.1L50,53.1L50,53.1L50,53.1L50,53.1L50,53.1L50,53.1L50,53.1L50,53.1L50,53.1L50,53.1z" fill="currentColor" stroke="currentColor" />
    </svg>
</button>

Javascript相关问答推荐

可以的.是否可以在不预编译的情况下使用嵌套 Select 器?

使用json文件字符串来enum显示类型字符串无法按照计算的enum成员值的要求分配给类型号

Google Apps脚本中的discord邀请API响应的日期解析问题

Redux查询多个数据库Api reducerPath&

Exceljs:我们在file.xlsx(...)&#中发现了一个问题'"" 39人;

React Code不在装载上渲染数据,但在渲染上工作

将自定义排序应用于角形数字数组

在我的html表单中的用户输入没有被传送到我的google表单中

无法读取未定义错误的属性路径名''

优化Google Sheet脚本以将下拉菜单和公式添加到多行

搜索功能不是在分页的每一页上进行搜索

当我try 将值更改为True时,按钮不会锁定

自定义确认组件未在vue.js的v菜单内打开

如何为仅有数据可用的点显示X轴标签?

无法设置RazorPay订阅API项目价格

使用线性插值法旋转直线以查看鼠标会导致 skip

Clip-Path在网页浏览器(Mozilla、Edge、Chrome)上不能正常工作,但在预览版Visual Code Studio HTML、CSS、JS上却能很好地工作

我怎样才能得到一个数组的名字在另一个数组?

MongoDB通过数字或字符串过滤列表

如何在Jest中模拟函数