Выполнение скрипта при прокрутке до нужного места
Здравствуйте.
Есть скрипт анимирующий цифры, скажем от 0 до 100. Все работает как надо, НО, надо чтобы он запускался тогда, когда прокрутишь страницу до него. Иначе получается что анимация цифр пошла, а когда докрутишь до блока с цифрами, то анимация уже завершилась. Пробовал скрипт https://github.com/dirkgroenen/jQuery-viewport-checker Но он лишь добавляет класс при появлении блока в зоне видимости. Пробовал добавлять им нужный класс, который используется в скрипте анимации, класс добавляется но анимации не происходит. Все таки нужно именно запускать скрипт в определенный момент. И лучше не с указанием сколкьо пикселей прокрутить (т.к. дизайн адаптивный и у каждого экрана это кол-во будет разным) а именно при появлении блока в зоне видимости. Подскажите пожалуйста как это сделать, кто знает. P.S. Или может в чекере как то можно прописать не добавление класса а запуск скрипта?
<script>
$(document).ready(function(){
$('.dummy').viewportChecker({
"запускаем скрипт анимации /animationNumber.js"
});
});
</script>
|
Galyanov,
jQuery-viewport-checker позволяет сделать то что вы хотите ... в callbackFunction ставьте запуск своего скрипта ... и ... :cray: |
Спасибо!
Работает. Сделал вот так:
<script>
$(document).ready(function(){
$('.statistik').viewportChecker({
callbackFunction: function(elem, action){
$('.lines2').animateNumber({ number: 100 },10000);
$('.lines3').animateNumber({ number: 90 },10000);
$('.lines1').animateNumber({ number: 5 },5000);
},
});
});
</script>
|
Товарищи у меня аналогичная ситуация, как у топикстартера. Цель таже-заставить бежать цифирь именно тогда, когда пользователь доскроллит до нужного блока. Одно отличие, я в скриптах вообще ноль. Не подскажете что нужно прописать в этом коде, если скрипт jQuery-viewport-checker я уже установил?
<script type="text/javascript">// <![CDATA[
window.onload=function(){
function number_to(id,from,to,duration)
{
var element = document.getElementById(id);
var start = new Date().getTime();
setTimeout(function() {
var now = (new Date().getTime()) - start;
var progress = now / duration;
var result = Math.floor((to - from) * progress + from);
element.innerHTML = progress < 1 ? result : to;
if (progress < 10) setTimeout(arguments.callee, 10);
}, 10);
}
number_to("example2",10,600,5000);
};
// ]]></script>
Нужно, чтобы скрипт запускался на DIV блоке #example2 Заранее спасибо неравнодушному. |
Цитата:
|
kick,
так попробуйте установить и animateNumber |
Цитата:
|
kick,
посмотрите пост 3 ... сделайте элемент с классом statistik а в него ваши циферки |
Цитата:
|
Вот так я обернул правильно?
<div class="statistik">
<center><h1><div id="example2"></div></h1></center>
</div>
А код из третьего поста я вынес в отдельный файл и прикрутил вот так <script src="assets/js/load.js"></script> И в самом файле load.js я прописал вот так:
$(document).ready(function(){
$('.statistik').viewportChecker({
callbackFunction: function(elem, action){
$('#example2').animateNumber({ number: 600 },10000);
});
});
Не работает. Запускаются самопроизвольно при загрузке страницы((( |
kick,
а пример полностью сможите сюда О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
привет, всем.
у меня похожая проблема, нашел скрипт где кружочки и цифры крутятся как надо, только сразу как включишь страницу. Подскажите, что нужно сделать, что скрипт срабатывал после того, как человек до него "до крутит"? вот ссылка на пример https://codepen.io/jasondavis/pen/MKJwgP/ |
radialIndicator and viewportchecker
assistant5599,
в теме есть примеры, у плагинов есть документация ... :(
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">p{
height: 1000px;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jQuery-viewport-checker/1.8.8/jquery.viewportchecker.min.js"></script>
<script src="https://apollowebstudio.com/labs/js/sugarcrm-pm/js/radialIndicator.min.js"></script>
<script>
$(function() {
$('#indicatorContainer').radialIndicator({ frameTime : 120,
barColor: '#87CEEB',
barWidth: 7,
radius: 90, // width of circle
initValue: 40,
roundCorner: true,
percentage: true
});
// Getting instance of radial Progress
var radialObj = $('#indicatorContainer').data('radialIndicator');
//now you can use instance to call different method on the radial progress.
//like
$('#indicatorContainer').viewportChecker({
callbackFunction: function(elem, action){
radialObj.animate(60);
}
});
});
</script>
</head>
<body> <p></p>
<div class="" id="indicatorContainer"></div>
<p></p>
</body>
</html>
|
Спасибо большое за ответ, да еще и кодом. Только проблема еще нужно что бы было несколько кружков. Пробовал по разным способам(прочитанным в интернете) не получается. Помогите
|
assistant5599, "id" на "class" поменяйте и можете вставлять хоть 10 кружочков.
|
Цитата:
Цитата:
|
Цитата:
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">p{height: 1000px;}</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jQuery-viewport-checker/1.8.8/jquery.viewportchecker.min.js"></script>
<script src="https://apollowebstudio.com/labs/js/sugarcrm-pm/js/radialIndicator.min.js"></script>
<script>
$(function(){
$('.indicatorContainer').each(function(index){
var $t=$(this);
$t.radialIndicator({
frameTime:120,
barColor: '#87CEEB',
barWidth: 7,
radius:90, // width of circle
initValue:40,
roundCorner:true,
percentage:true
});
$t.viewportChecker({
callbackFunction:function(elem,action){
$(elem).data('radialIndicator').animate(60);
}
});
});
});
</script>
</head>
<body>
<p></p>
<div class="indicatorContainer"></div>
<div class="indicatorContainer"></div>
<div class="indicatorContainer"></div>
<p></p>
</body>
</html>
|
Замечательный пример. У меня похожая проблема. Только не могу понять как сделать разное значение у кружков(разные цифры). В скриптах особо не понимаю. Буду очень признателен за помощь.
|
Eric77, можно так попробовать (у меня сайт apollowebstudio не открывается, не могу проверить работоспособность):
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">p{height: 1000px;}</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jQuery-viewport-checker/1.8.8/jquery.viewportchecker.min.js"></script>
<script src="https://apollowebstudio.com/labs/js/sugarcrm-pm/js/radialIndicator.min.js"></script>
<script>
$(function(){
$('.indicatorContainer').each(function(index){
var $t=$(this);
$t.radialIndicator({
frameTime:120,
barColor: '#87CEEB',
barWidth: 7,
radius:90, // width of circle
initValue:40,
roundCorner:true,
percentage:true
});
$t.viewportChecker({
callbackFunction:function(elem,action){
$(elem).data('radialIndicator').animate(elem.dataset.value);
}
});
});
});
</script>
</head>
<body>
<p></p>
<div class="indicatorContainer" data-value="20"></div>
<div class="indicatorContainer" data-value="40"></div>
<div class="indicatorContainer" data-value="60"></div>
<p></p>
</body>
</html>
|
radialIndicator или анимация чисел в зоне видимости
Nexus,
elem[0] или так, ниже рабочий, немного откорректированный вариант, предложенный Nexus,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">p{height: 1000px;}</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jQuery-viewport-checker/1.8.8/jquery.viewportchecker.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/radialIndicator/1.3.1/radialIndicator.min.js"></script>
<script>
$(function(){
$('.indicatorContainer').each(function(index){
var $t=$(this), value = $t.data('value');
$t = $t.radialIndicator({
frameTime:120,
barColor: '#87CEEB',
barWidth: 7,
radius:90, // width of circle
initValue: 0,
roundCorner:true,
percentage:true
})
.viewportChecker({ repeat: true,
callbackFunction:function(elem,action){
$t.value(0).animate(value);
}
}).data('radialIndicator');
});
});
</script>
</head>
<body>
<p></p>
<div class="indicatorContainer" data-value="20"></div>
<div class="indicatorContainer" data-value="40"></div>
<div class="indicatorContainer" data-value="60"></div>
<p></p>
</body>
</html>
|
Спасибо! так быстро решили мою проблему. Круто!!!!
|
| Часовой пояс GMT +3, время: 15:55. |