Вы можете просто добавить поле для отслеживания, если ваше событие анимации было запущено или нет. [7]
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body style="background:red;height:2000px;position: relative;">
<div class="progress-vertical--container">
<!-- progress-vertical container : BEGIN -->
<div class="stats-info">
<div id="percentage"></div>
<div class="info">This is a test</div>
</div>
<div class="progress-vertical">
<div id="stats"></div>
</div>
</div>
<!-- progress-vertical container : END -->
</body>
.progress-vertical--container {
position: absolute;
left: 15px;
bottom: 200px;
width: 100px;
text-align: center;
}
.progress-vertical--container .stats-info {
max-width: 85px;
width: 100%;
margin: 0 auto 10px;
}
.progress-vertical--container .info {
font-size: 0.875em;
font-family: "visby_round_cfmedium", sans-serif;
font-weight: 700;
color: green;
text-transform: lowercase;
text-align: center;
width: 100%;
line-height: 14px;
}
.progress-vertical--container .progress-vertical {
width: 40px;
height: 300px;
background-color: grey;
margin: 0 auto;
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
#stats {
width: 100%;
height: 1%;
text-align: center;
line-height: 30px;
color: red;
background-color: #d04e7c;
}
#percentage {
font-size: 2em;
font-family: "visby_round_cfmedium", sans-serif;
font-weight: 700;
color: #ffffff;
text-transform: lowercase;
display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body style="background:red;height:2000px;position: relative;">
<div class="progress-vertical--container">
<!-- progress-vertical container : BEGIN -->
<div class="stats-info">
<div id="percentage"></div>
<div class="info">This is a test</div>
</div>
<div class="progress-vertical">
<div id="stats"></div>
</div>
</div>
<!-- progress-vertical container : END -->
</body>
$(document).ready(function ($) {
// Tracks if we're fired the event
let fired = false;
function animateStatsBarVertical() {
$('.progress-vertical--container').each(function () {
var elementPos = $(this).offset().top;
var topOfWindow = $(window).scrollTop();
// Only true if the element is in view AND has not fired yet
if ( elementPos < topOfWindow + $(window).height() - 30 && fired === false) {
// We've fired, so set to true
fired = true;
function statsBarVertical() {
var stats = document.getElementById("stats");
var percentage = document.getElementById("percentage");
var height = 1;
var id = setInterval(frame, 10);
var results_percentage_verticle = 100; // '<?php the_field("results_percentage_verticle", $p); ?>';
function frame() {
if (height >= results_percentage_verticle) {
clearInterval(id);
} else {
height++;
stats.style.height = height + '%';
percentage.innerHTML = height * 1 + '%';
}
}
}
statsBarVertical();
}
});
}
animateStatsBarVertical();
$(window).scroll(animateStatsBarVertical);
});
.progress-vertical--container {
position: absolute;
left: 15px;
bottom: 200px;
width: 100px;
text-align: center;
}
.progress-vertical--container .stats-info {
max-width: 85px;
width: 100%;
margin: 0 auto 10px;
}
.progress-vertical--container .info {
font-size: 0.875em;
font-family: "visby_round_cfmedium", sans-serif;
font-weight: 700;
color: green;
text-transform: lowercase;
text-align: center;
width: 100%;
line-height: 14px;
}
.progress-vertical--container .progress-vertical {
width: 40px;
height: 300px;
background-color: grey;
margin: 0 auto;
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
#stats {
width: 100%;
height: 1%;
text-align: center;
line-height: 30px;
color: red;
background-color: #d04e7c;
}
#percentage {
font-size: 2em;
font-family: "visby_round_cfmedium", sans-serif;
font-weight: 700;
color: #ffffff;
text-transform: lowercase;
display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body style="background:red;height:2000px;position: relative;">
<div class="progress-vertical--container">
<!-- progress-vertical container : BEGIN -->
<div class="stats-info">
<div id="percentage"></div>
<div class="info">This is a test</div>
</div>
<div class="progress-vertical">
<div id="stats"></div>
</div>
</div>
<!-- progress-vertical container : END -->
</body>
Оператор typeid
можно использовать для проверки того, имеет ли полиморфный объект определенный точный тип, являющийся наиболее производным.
#include <typeinfo>
// ...
template<typename T> T* GetActivity() {
for(int i = 0; i < activities.size(); i++) {
auto* act = activities[i];
if (act != nullptr && typeid(*act) == typeid(T)) {
return dynamic_cast<T*>(act);
}
}
return nullptr;
}
Используйте этот шаблон с осторожностью, потому что он ограничивает возможность создания класса, который действует точно так же, как другой класс, за исключением определенных изменений. Но это может быть уместно в вашем интерфейсе.