2015-05-28 2 views
1

Извините заранее, если этот вопрос тривиален, но является новым для сценариев, мне было интересно, как я могу выполнить «.finish()» исполняемую в настоящее время анимацию, которая НЕ вызывается элементом DOM (например, как элемент div), а скорее анимация вызывалась на объект массива?Jquery animate «объект массива»

$({countNum: 0 }).animate({countNum: 100 }, { 
    duration: 5000... (code continues) 

Вот пример:

https://jsfiddle.net/AndreasEvans/smzcf1f4/9/

Большое спасибо в ожидании вашего рода Быстродействие

+0

Что именно вы пытаетесь достичь с помощью этого кода? Вы можете анимировать элементы DOM. Анимация объекта не имеет смысла, поскольку он не имеет никакого видимого эффекта. –

+0

Не на 100% верно, код отлично работает и оживляет любое количество элементов DOM, меняет цвета, когда они проходят через 50% и 80% от зеленого до янтарного до красного и показывает% использования (снова текстовый цвет анимированный) ... но основная цель этого вопроса - иметь возможность .finish() анимации, если пользователь нажимает кнопку и, поскольку я не делаю $ ("# progressBar"). animate (.... code, я не могу ссылаться на «объект» на «имя», поэтому не могу делать $ («# progressBar»). finish() ... –

+0

Хм, может быть, я не на 100% понимая вашу проблему здесь. Если бы вы могли сделать jsfiddle, который показывает вашу проблему, возможно, я смогу помочь. –

ответ

0

Хорошо, так вот для вас решение:

Во-первых добавить кнопку HTML ввода :

<input id="stop-animation" type="button" value="stop loader" /> 

Затем создайте глобальную переменную, которая может использоваться для проверки необходимости остановки анимации. Также привяжите событие click к вашей кнопке, которая устанавливает значение этой переменной в true.

var stopAnimation = false; 
$('#stop-animation').click(function(){ 
    stopAnimation = true; 
}); 

В функции обратного вызова шаг одушевленных затем поместить следующую строку

if(stopAnimation){ 
    $(this).stop(true, true); 
} 

$(this).stop(true, true); объясняется ниже.

Первый истинный очищает очередь и последний истинный переход к концу Очередь анимации, эффективно окончание анимации.

Вот пример, нажмите кнопку остановки, чтобы остановить загрузчик.

https://jsfiddle.net/smzcf1f4/6/

Надежда, что помогает!

+0

Вау ... просто, когда вы знаете, как и как вы это делаете. Большое спасибо Jako ... очень оценен. $ (это) ... Я должен был знать! –

0

Если я правильно понял, вы избавитесь от анонимного объекта и скорее дадите ему имя. Тогда доступ к нему до stop(); он на кнопку щелчка становится легким.

Отрывок:

var myObject = {count: 0}; 
 
var myButton = document.querySelector('input'); 
 
myButton.addEventListener('click', onButtonClick, false); 
 
$(myObject).animate({count: '100'}, {progress: onProgress, duration: 4000}); 
 
function onButtonClick(){ $(myObject).stop(true, true); } // or use finish(); if you would like. 
 
function onProgress(){ document.querySelector('div').innerText = myObject.count; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div></div> 
 
<input type="button" value="Stop" />

Надеется, что это помогает.

+0

Отлично, спасибо вам столько, сколько ваш ответ помогает объяснить гораздо больше о «структуре» JS, чем о моем вопросе, и это поможет мне разработать лучший код в будущем. –

+0

Рад, что это помогло. –