gpt4 book ai didi

javascript - 动画的心图标

转载 作者:太空宇宙 更新时间:2023-11-04 08:02:00 26 4
gpt4 key购买 nike

所以我目前正在尝试为 SVG 图标制作动画。我有一颗心和几行围绕着它的所有线条。默认情况下,我希望心脏只有一个轮廓,然后在单击时更改背景颜色(我有那个工作)。

我正在努力解决的部分只是在点击时显示心脏周围的线条。我知道这很简单,但我似乎无法理解它。在我的 css 中,我默认设置了 .lines{display: none} 并且我还创建了一个类 .lines-show{fill: red} 我希望它们在什么时候显示心脏被点击。然后我将使用 setTimeout() 函数在 X 秒后隐藏这些行。如果这有帮助,这里是我的代码笔的链接 https://codepen.io/Brushel/pen/xXvqgK?editors=1111这是我到目前为止的代码:

const lines = document.querySelectorAll(".lines");
const heart = document.querySelector('.heart');

heart.addEventListener('click', function(){
heart.classList.toggle("heart-fill-up");
});
svg {
max-height: 100px;
}

.heart {
fill: transparent;
transition: all .5s;
}

.heart-fill-up {
fill: red;
}

.lines {
display: none;
}

.lines-show {
fill: red;
}
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 298 281" style="enable-background:new 0 0 298 281;" xml:space="preserve">
<style type="text/css">
.heart{
stroke:#FF0606;
stroke-miterlimit:10;
stroke-width: 5px;
}
</style>
<title>icon_wishlist</title>
<g id="icon_wishlist">
<path class="heart" d="M66.3,69.4c-19.1,20-19.1,51.5,0,71.5l84.6,87.9l84.7-87.8c19.1-20,19.1-51.5,0-71.5
c-18-19.1-48.1-19.9-67.2-1.8c-0.6,0.6-1.2,1.2-1.8,1.8L151,85.7l-15.6-16.2c-18-19.1-48.1-19.9-67.2-1.8
C67.6,68.2,67,68.8,66.3,69.4L66.3,69.4z"/>
</g>
<path class="lines" d="M58.1,60.6L9.4,22.1c-1.5-1.2-1.8-3.4-0.6-4.9l0,0c1.2-1.5,3.4-1.8,4.9-0.6l48.6,38.5c1.5,1.2,1.8,3.4,0.6,4.9
l0,0C61.8,61.5,59.6,61.8,58.1,60.6z"/>
<path class="lines" d="M265.4,237l-48.6-38.5c-1.5-1.2-1.8-3.4-0.6-4.9v0c1.2-1.5,3.4-1.8,4.9-0.6l48.6,38.5c1.5,1.2,1.8,3.4,0.6,4.9
l0,0C269.1,237.9,266.9,238.2,265.4,237z"/>
<path class="lines" d="M40.1,230.6L88,191.3c1.5-1.2,3.7-1,4.9,0.5v0c1.2,1.5,1,3.7-0.5,4.9l-47.9,39.3c-1.5,1.2-3.7,1-4.9-0.5l0,0
C38.4,234.1,38.6,231.9,40.1,230.6z"/>
<path class="lines" d="M236.7,54.8l46-41.6c1.4-1.3,3.7-1.2,4.9,0.2v0c1.3,1.4,1.2,3.7-0.2,4.9l-46,41.6c-1.4,1.3-3.7,1.2-4.9-0.2v0
C235.2,58.3,235.3,56.1,236.7,54.8z"/>
<path class="lines" d="M16.9,139.2h34c1.9,0,3.5,1.6,3.5,3.5v0c0,1.9-1.6,3.5-3.5,3.5h-34c-1.9,0-3.5-1.6-3.5-3.5v0
C13.4,140.7,15,139.2,16.9,139.2z"/>
<path class="lines" d="M249.8,139.2h34c1.9,0,3.5,1.6,3.5,3.5v0c0,1.9-1.6,3.5-3.5,3.5h-34c-1.9,0-3.5-1.6-3.5-3.5v0
C246.3,140.7,247.8,139.2,249.8,139.2z"/>
<path class="lines" d="M154.5,237.3v34c0,1.9-1.6,3.5-3.5,3.5l0,0c-1.9,0-3.5-1.6-3.5-3.5v-34c0-1.9,1.6-3.5,3.5-3.5l0,0
C152.9,233.8,154.5,235.4,154.5,237.3z"/>
<path class="lines" d="M154.5,20.3v34c0,1.9-1.6,3.5-3.5,3.5l0,0c-1.9,0-3.5-1.6-3.5-3.5v-34c0-1.9,1.6-3.5,3.5-3.5l0,0
C152.9,16.8,154.5,18.4,154.5,20.3z"/>
</svg>

这是我想要的点击

结果

enter image description here

最佳答案

由于您有不止一个元素“行”,因此无论何时您想要切换它们的类,都需要单独对它们中的每一个进行排序(我使用了一个 for 循环来执行此操作)。我还添加了一个 setTimeOut 以在 1000 毫秒后删除它们。

http://jsfiddle.net/jnqzoq1g/

const lines = document.querySelectorAll(".lines");
const heart = document.querySelector('.heart');

heart.addEventListener('click', function(){
heart.classList.toggle("heart-fill-up");
for (var x = 0; x < lines.length; x++){
lines[x].classList.toggle("lines-show");
}
setTimeout(function(){
for (var x = 0; x < lines.length; x++){
lines[x].classList.toggle("lines-show");
}
}, 1000);
});

.lines {
fill: transparent;
transition: all .5s;
}

.lines-show {
fill: red;

关于javascript - 动画的心图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46940204/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com