|
|
1
Takit Isy Surendra
6 年前
如果您可以使用一些jQuery,我建议您这样做:
(我添加了一些带有注释的CSS代码,以避免不必要的行为)
$('.loading-element').each(function(e) {
$(this).css({
"animation-delay": (-10 * Math.random()) + "s",
"animation-duration": (1 + 2 * Math.random()) + "s"
});
});
.loading-element {
position: relative;
background: #e0e0e0;
overflow: hidden;
}
.loading-element::after {
content: "";
position: absolute;
top: 0;
filter: blur(5px);
width: 100%;
height: 100%;
background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 50%, rgba(247, 247, 247, 0) 99%, rgba(247, 247, 247, 0) 100%);
transform: translateX(100%);
animation-name: shine;
animation-duration: inherit;
animation-iteration-count: infinite;
animation-delay: inherit;
}
.index-load_track-item {
width: 426px;
height: 117px;
margin: 30px 0;
}
.index-load-track_outer-artwork,
.index-load-track_outer-waveform {
float: left;
}
.index-load-track_outer-artwork {
width: 117px;
height: 117px;
margin-right: 9px;
}
.index-load-track_outer-artwork .loading-element {
width: 100%;
height: 100%;
}
.index-load-track_outer-waveform {
width: 300px;
height: 60px;
}
.index-load-track_outer-waveform .loading-element {
width: 100%;
height: 100%;
}
@keyframes shine {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(100%);
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="index-load_track-item">
<div class="index-load-track_outer-artwork">
<div class="loading-element"></div>
</div>
<div class="index-load-track_outer-waveform">
<div class="loading-element"></div>
</div>
</div>
<div class="index-load_track-item">
<div class="index-load-track_outer-artwork">
<div class="loading-element"></div>
</div>
<div class="index-load-track_outer-waveform">
<div class="loading-element"></div>
</div>
</div>
–
–
–
这也可以使用CSS变量来完成!
如果你能使用它,依我拙见,这是一种更好、更简单的方法。
$('.loading-element').each(function(e) {
$(this).css({
"--shine-delay": (-10 * Math.random()) + "s",
"--shine-duration": (1 + 2 * Math.random()) + "s"
});
});
.loading-element {
position: relative;
background: #e0e0e0;
overflow: hidden;
}
.loading-element::after {
content: "";
position: absolute;
top: -10px;
bottom: -10px;
filter: blur(8px);
width: 100%;
background: linear-gradient(to right,
rgba(255, 255, 255, 0.0) 0%,
rgba(255, 255, 255, 0.0) 10%,
rgba(255, 255, 255, 0.8) 50%,
rgba(255, 255, 255, 0.0) 90%,
rgba(255, 255, 255, 0.0) 100%
);
transform: translateX(100%);
animation: shine var(--shine-duration) infinite var(--shine-delay);
}
.index-load_track-item {
width: 426px;
height: 117px;
margin: 30px 0;
}
.index-load-track_outer-artwork,
.index-load-track_outer-waveform {
float: left;
}
.index-load-track_outer-artwork {
width: 117px;
height: 117px;
margin-right: 9px;
}
.index-load-track_outer-artwork .loading-element {
width: 100%;
height: 100%;
}
.index-load-track_outer-waveform {
width: 300px;
height: 60px;
}
.index-load-track_outer-waveform .loading-element {
width: 100%;
height: 100%;
}
@keyframes shine {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(100%);
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="index-load_track-item">
<div class="index-load-track_outer-artwork">
<div class="loading-element"></div>
</div>
<div class="index-load-track_outer-waveform">
<div class="loading-element"></div>
</div>
</div>
<div class="index-load_track-item">
<div class="index-load-track_outer-artwork">
<div class="loading-element"></div>
</div>
<div class="index-load-track_outer-waveform">
<div class="loading-element"></div>
</div>
</div>
我希望这有帮助。
|