在 jquery 或 jquery 插件中创建模拟心电监护动画
Create ANALOG ECG monitoring Animation in jquery or jquery plugin
我想像下面的视频一样制作心电图动画。
https://www.youtube.com/watch?v=Q_gzl_E7jmw
下面是我当前的代码:
<style>
svg {
height: 600px;
width: 1200px;
}
path {
stroke: #259798;
stroke-width: 2px;
fill: none;
stroke-dasharray: 630, 500;
stroke-dashoffset: 0;
animation: pulse 4s infinite linear;
&:nth-child(1) {
stroke: #b7b4c2;
}
}
@keyframes pulse {
0% {
stroke-dashoffset: 1130;
}
100% {
stroke-dashoffset: 0;
}
}
</style>
<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 600 300">
<path d="
M17.902,114.475h26.949c2.296,0,12.876-10.182,20.063-10.182
c7.186,0,10.83,10.182,12.576,10.182h18.266l7.187,10.779l7.485-100.91l5.091,114.984l6.887-24.554h24.41
c3.239,0,14.816-16.769,20.206-16.769s11.08,16.47,13.475,16.47c2.845,0,26.665,0,26.665,0l27.757,0
c2.296,0,12.875-10.181,20.062-10.181c7.186,0,10.831,10.181,12.577,10.181h18.266l7.187,10.779l7.485-100.91l5.091,114.984
l6.888-24.555h24.41c3.24,0,14.817-16.768,20.207-16.768s11.079,16.469,13.474,16.469c2.845,0,26.666,0,26.666
c2.297,0,12.877-10.181,20.063-10.181s10.829,10.181,12.576,10.181h18.265l7.188,10.779l7.485-100.91l5.092,114.984l6.887-24.555
h24.409c3.238,0,14.816-16.768,20.206-16.768s11.08,16.469,13.476,16.469c2.845,0,26.664,0,26.664,0h27.815
c2.296,0,12.875-10.181,20.063-10.181c7.187,0,10.829,10.181,12.576,10.181h18.265l7.188,10.779l7.486-100.91l5.091,114.984
l6.887-24.555h24.409c3.238,0,14.816-16.768,20.206-16.768s11.079,16.469,13.476,16.469c2.846,0,26.664,0,26.664,0
"/>
</svg>
我们已经使用 velocityjs 支持 ie,我需要这个心电图出现然后淡出,同时从 div 中消失。就像我上面 post 的视频 youtube link。
我已经创建了 Fiddler:
https://jsfiddle.net/mannanbahelim/zwnc5db1/
我只想要像视频那样在行尾有淡出效果。
如果你有正常的背景,你可以在 CSS 中做到。你需要一些计算来找到合适的坐标,但如果它是规则的,你可以设置带有动画的蒙版,这将给你想要的效果。
首先你设置你的 svg 没有破折号动画:
path {
stroke: #259798;
stroke-width: 2px;
fill: none;
}
然后添加 4 个从左到右的蒙版(您可以添加更多)。一个完全遮盖了路径,下面是一个不透明度渐变以获得你想要的淡出效果。
<div class="mask">
</div>
<div class="mask">
</div>
<div class="mask">
</div>
<div class="mask">
</div>
.mask {
position: absolute;
width: 352.66px;
height: 290px;
left: -308px;
top: 24.34px;
animation: mask 4s infinite linear;
}
.mask:nth-child(2n) {
background: rgba(243, 245, 246, 1);
}
.mask:nth-child(2n + 1) {
background: linear-gradient(to right, rgba(243, 245, 246, 1), rgba(243, 245, 246, 0));
}
需要计算每个掩码的宽度,它应该是你的路径宽度的一半。您可以使用 :
计算它
var path = document.getElementById('path');
var pathBox = path.getBoundingClientRect();
这也会告诉你动画应该从哪里开始——它应该是减去每个蒙版的宽度加上你的 svg 的左坐标。还有它应该结束的地方 - 每个面具宽度的 3 倍 + svg 的左坐标,因此行进的宽度是每个面具的 4 倍:
console.log(
'width of each mask:', pathBox.width / 2, '\n',
'height of each mask:', pathBox.top + pathBox.height, '\n',
'left start of the animation:', pathBox.left - (pathBox.width / 2), '\n',
'right end of the animation:', pathBox.left + (pathBox.width / 2 * 3)
)
这将允许定义遮罩动画:
@keyframes mask {
0% {
left: -308px;
}
100% {
left: 1101px;
}
}
然后为每个掩码设置延迟(这也可以在 CSS 中):
for (var i = 0; i < masks.length; i++) {
masks[i].style.animationDelay = i + "s";
};
您还需要为第一个遮罩 运行,以便 svg 在打开时被遮罩:
#initial {
position: absolute;
width: 754px;
height: 290px;
left: 754px;
top: 24.34px;
background: rgba(243, 245, 246, 1);
animation: initialMask 4s 1 linear;
animation-delay: 0s;
}
@keyframes initialMask {
0% {
left: 50px;
}
100% {
left: 750px;
}
}
你得到的效果是:
https://jsfiddle.net/j46kxvj5/4/
我想像下面的视频一样制作心电图动画。
https://www.youtube.com/watch?v=Q_gzl_E7jmw
下面是我当前的代码:
<style>
svg {
height: 600px;
width: 1200px;
}
path {
stroke: #259798;
stroke-width: 2px;
fill: none;
stroke-dasharray: 630, 500;
stroke-dashoffset: 0;
animation: pulse 4s infinite linear;
&:nth-child(1) {
stroke: #b7b4c2;
}
}
@keyframes pulse {
0% {
stroke-dashoffset: 1130;
}
100% {
stroke-dashoffset: 0;
}
}
</style>
<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 600 300">
<path d="
M17.902,114.475h26.949c2.296,0,12.876-10.182,20.063-10.182
c7.186,0,10.83,10.182,12.576,10.182h18.266l7.187,10.779l7.485-100.91l5.091,114.984l6.887-24.554h24.41
c3.239,0,14.816-16.769,20.206-16.769s11.08,16.47,13.475,16.47c2.845,0,26.665,0,26.665,0l27.757,0
c2.296,0,12.875-10.181,20.062-10.181c7.186,0,10.831,10.181,12.577,10.181h18.266l7.187,10.779l7.485-100.91l5.091,114.984
l6.888-24.555h24.41c3.24,0,14.817-16.768,20.207-16.768s11.079,16.469,13.474,16.469c2.845,0,26.666,0,26.666
c2.297,0,12.877-10.181,20.063-10.181s10.829,10.181,12.576,10.181h18.265l7.188,10.779l7.485-100.91l5.092,114.984l6.887-24.555
h24.409c3.238,0,14.816-16.768,20.206-16.768s11.08,16.469,13.476,16.469c2.845,0,26.664,0,26.664,0h27.815
c2.296,0,12.875-10.181,20.063-10.181c7.187,0,10.829,10.181,12.576,10.181h18.265l7.188,10.779l7.486-100.91l5.091,114.984
l6.887-24.555h24.409c3.238,0,14.816-16.768,20.206-16.768s11.079,16.469,13.476,16.469c2.846,0,26.664,0,26.664,0
"/>
</svg>
我们已经使用 velocityjs 支持 ie,我需要这个心电图出现然后淡出,同时从 div 中消失。就像我上面 post 的视频 youtube link。
我已经创建了 Fiddler:
https://jsfiddle.net/mannanbahelim/zwnc5db1/
我只想要像视频那样在行尾有淡出效果。
如果你有正常的背景,你可以在 CSS 中做到。你需要一些计算来找到合适的坐标,但如果它是规则的,你可以设置带有动画的蒙版,这将给你想要的效果。
首先你设置你的 svg 没有破折号动画:
path {
stroke: #259798;
stroke-width: 2px;
fill: none;
}
然后添加 4 个从左到右的蒙版(您可以添加更多)。一个完全遮盖了路径,下面是一个不透明度渐变以获得你想要的淡出效果。
<div class="mask">
</div>
<div class="mask">
</div>
<div class="mask">
</div>
<div class="mask">
</div>
.mask {
position: absolute;
width: 352.66px;
height: 290px;
left: -308px;
top: 24.34px;
animation: mask 4s infinite linear;
}
.mask:nth-child(2n) {
background: rgba(243, 245, 246, 1);
}
.mask:nth-child(2n + 1) {
background: linear-gradient(to right, rgba(243, 245, 246, 1), rgba(243, 245, 246, 0));
}
需要计算每个掩码的宽度,它应该是你的路径宽度的一半。您可以使用 :
计算它var path = document.getElementById('path');
var pathBox = path.getBoundingClientRect();
这也会告诉你动画应该从哪里开始——它应该是减去每个蒙版的宽度加上你的 svg 的左坐标。还有它应该结束的地方 - 每个面具宽度的 3 倍 + svg 的左坐标,因此行进的宽度是每个面具的 4 倍:
console.log(
'width of each mask:', pathBox.width / 2, '\n',
'height of each mask:', pathBox.top + pathBox.height, '\n',
'left start of the animation:', pathBox.left - (pathBox.width / 2), '\n',
'right end of the animation:', pathBox.left + (pathBox.width / 2 * 3)
)
这将允许定义遮罩动画:
@keyframes mask {
0% {
left: -308px;
}
100% {
left: 1101px;
}
}
然后为每个掩码设置延迟(这也可以在 CSS 中):
for (var i = 0; i < masks.length; i++) {
masks[i].style.animationDelay = i + "s";
};
您还需要为第一个遮罩 运行,以便 svg 在打开时被遮罩:
#initial {
position: absolute;
width: 754px;
height: 290px;
left: 754px;
top: 24.34px;
background: rgba(243, 245, 246, 1);
animation: initialMask 4s 1 linear;
animation-delay: 0s;
}
@keyframes initialMask {
0% {
left: 50px;
}
100% {
left: 750px;
}
}
你得到的效果是: https://jsfiddle.net/j46kxvj5/4/