Я хочу, чтобы bar
анимировался от width:0
до width:95%
.
Также я хочу, чтобы процентное соотношение отображалось от 0%
до 95%
внутри элемента .barPercent
при анимации width
.
Но с тем, что я пробовал, анимация ширины заканчивается, тогда как проценты в элементе .barPercent
не достигли 95%
, и кадры увеличиваются.
Я не могу найти способ, чтобы они соответствовали друг другу, а анимация ширины и процентное приращение выполнялись одновременно.
var bar = $('.bar'),
percent = bar.find('.barPercent'),
i=1, interval;
percent.text(i + '%');
i++;
interval = setInterval(function(){
percent.text(i + '%');
if(i == 95){
clearInterval(interval);
}
i++;
},2000/95);
bar.animate({
width: 95 + '%'
},2000,'linear');
.bar{
height: 30px;
background: red;
position: relative;
width: 0px;
overflow: visible !important;
}
.barPercent {
width: 50px;
height: 40px;
position: absolute;
top: -5px;
right: 0;
background: #81858a;
line-height: 40px;
text-align: center;
color: #fff;
font-size: 0.88em;
}
<html>
<head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/magnific-popup.js/1.1.0/magnific-popup.min.css">
<meta name = "viewport" content = "width=device-width,initial-scale=1,shrink-to-fit=no" />
</head>
<body>
<div class="barContainer">
<div>HTML</div>
<div class="bar" data-width="95">
<span class="barPercent">0</span>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/magnific-popup.js/1.1.0/jquery.magnific-popup.min.js"></script>
</body>
</html>
Как сделать так, чтобы width
и percentages increment
выполнялись одновременно?
Есть ли лучшее решение?
Почему их продолжительность не совпадает?
Благодарность
1 ответ
$('.bar').each(function () {
duration = 2000; //in ms
step = 0.5; //increase in width in px
var bar = $(this),
percent = bar.find('.barPercent'),
barWidth = Number(bar.data('width')),
i = 1,
interval;
/*
percent.text(i + '%');
i++;*/
interval = setInterval(function () {
widthNumb = Math.floor(i);
percent.text(widthNumb + '%');
if (i >= barWidth) {
clearInterval(interval);
}
bar.css({
"width": i + '%'
});
i = i + step;
}, Math.floor(duration / barWidth / 10));
/*
bar.animate({
width: barWidth + '%'
}, duration/step, 'linear'); //
*/
});
Я использовал переменную step = 0,5, чтобы увеличить ширину в пикселях, однако отображаемый текст% будет целым числом с использованием Math.floor. Вы можете играть, изменяя значения длительности и шага.
Похожие вопросы
Новые вопросы
jquery
jQuery - это библиотека JavaScript, рассмотрите возможность добавления тега JavaScript. jQuery - это популярная кросс-браузерная библиотека JavaScript, которая облегчает прохождение Document Object Model (DOM), обработку событий, анимацию и взаимодействие AJAX, сводя к минимуму расхождения между браузерами. Вопрос с тегом jQuery должен быть связан с jQuery, поэтому jQuery должен использоваться в рассматриваемом коде, и в вопросе должны быть как минимум элементы, связанные с использованием jQuery.