From 9f4d0c381f31a82bda03a570821b5267ac74c04e Mon Sep 17 00:00:00 2001 From: Akuma Date: Wed, 23 Jul 2014 20:18:40 +0800 Subject: [PATCH 1/3] Add counterFire event binding --- src/jquery.counter.js | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/jquery.counter.js b/src/jquery.counter.js index 71a14cf..91d23e9 100644 --- a/src/jquery.counter.js +++ b/src/jquery.counter.js @@ -4,7 +4,7 @@ * Copyright (c) 2012 Sophilabs * MIT License */ - + !(function (context, definition) { if (typeof define == 'function' && typeof define.amd == 'object') define(['jquery'], definition); else definition(context['$']); @@ -20,6 +20,17 @@ return data.down ? stop >= current : stop <= current; }; + var isFired = false; + var checkFire = function(data) { + var fire = 0; + var current = 0; + $.each(data.parts, function(i, part) { + fire += (fire * part.limit) + part.fire; + current += (current * part.limit) + part.value; + }); + return data.down ? fire >= current : fire <= current; + }; + var tick = function() { var e = $(this); var data = e.data('counter'); @@ -36,11 +47,18 @@ } i--; } + refresh(e, i); + if (checkStop(data)) { clearInterval(data.intervalId); e.trigger("counterStop"); } + + if (!isFired && checkFire(data)) { + e.trigger("counterFire"); + isFired = true; + } }; var refresh = function(e, to) { @@ -158,6 +176,10 @@ if (stop) { stop = split(stop, /([^0-9]+)/); } + var fire = options.fire || e.attr('data-fire'); + if (fire) { + fire = split(fire, /([^0-9]+)/); + } e.html(''); $.each(format, function(index, value) { if (/^\d+$/.test(value)) { @@ -168,9 +190,15 @@ part.value = parseInt(initial[initial.length - format.length + index] || 0, 10); part.value = part.value > part.limit ? part.limit : part.value; part.reset = part.value; + part.stop = parseInt(stop ? stop[stop.length - format.length + index] : (data.down ? 0 : part.limit), 10); part.stop = part.stop > part.limit ? part.limit : part.stop; part.stop = part.stop < 0 ? 0 : part.stop; + + part.fire = parseInt(fire ? fire[fire.length - format.length + index] : (data.down ? 0 : part.limit), 10); + part.fire = part.fire > part.limit ? part.limit : part.fire; + part.fire = part.fire < 0 ? 0 : part.fire; + var epart = $('').addClass('part').addClass('part' + index); var digits = part.value + ''; while (digits.length < part.padding) { @@ -185,11 +213,17 @@ e.append($('').addClass('separator').addClass('separator' + index).text(value)); } }); + if (!checkStop(data)) { data.intervalId = setInterval($.proxy(tick, this), data.interval); } else { e.trigger("counterStop"); } + + if (!isFired && checkFire(data)) { + e.trigger("counterFire"); + } + e.data('counter', data); return this; }); From e7dd9ca7c91dd4a5f449f94f8b5f16aa32bee691 Mon Sep 17 00:00:00 2001 From: Akuma Date: Thu, 24 Jul 2014 09:54:16 +0800 Subject: [PATCH 2/3] Pass current time to counterFire event callback --- src/jquery.counter.js | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/jquery.counter.js b/src/jquery.counter.js index 91d23e9..6a322a3 100644 --- a/src/jquery.counter.js +++ b/src/jquery.counter.js @@ -20,7 +20,7 @@ return data.down ? stop >= current : stop <= current; }; - var isFired = false; + var isFired = false; // Whether counterFire is fired var checkFire = function(data) { var fire = 0; var current = 0; @@ -52,11 +52,27 @@ if (checkStop(data)) { clearInterval(data.intervalId); - e.trigger("counterStop"); + e.trigger('counterStop'); } if (!isFired && checkFire(data)) { - e.trigger("counterFire"); + var current = 0, + currentStr = '', + n = data.parts.length; + $.each(data.parts, function(i, part) { + current += (current * part.limit) + part.value; + + var digits = part.value + ''; + while (digits.length < part.padding) { + digits = '0' + digits; + } + currentStr += digits; + if (i + 1 < n) { + currentStr += ':'; + } + }); + + e.trigger('counterFire', [current, currentStr]); isFired = true; } }; @@ -190,7 +206,6 @@ part.value = parseInt(initial[initial.length - format.length + index] || 0, 10); part.value = part.value > part.limit ? part.limit : part.value; part.reset = part.value; - part.stop = parseInt(stop ? stop[stop.length - format.length + index] : (data.down ? 0 : part.limit), 10); part.stop = part.stop > part.limit ? part.limit : part.stop; part.stop = part.stop < 0 ? 0 : part.stop; From bcadf8cafe8c4bb4dea3a72a711ec6fed499faa6 Mon Sep 17 00:00:00 2001 From: Akuma Date: Thu, 24 Jul 2014 09:58:33 +0800 Subject: [PATCH 3/3] Fix indent. --- src/jquery.counter.js | 48 +++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/jquery.counter.js b/src/jquery.counter.js index 6a322a3..1fc9845 100644 --- a/src/jquery.counter.js +++ b/src/jquery.counter.js @@ -22,13 +22,13 @@ var isFired = false; // Whether counterFire is fired var checkFire = function(data) { - var fire = 0; - var current = 0; - $.each(data.parts, function(i, part) { - fire += (fire * part.limit) + part.fire; - current += (current * part.limit) + part.value; - }); - return data.down ? fire >= current : fire <= current; + var fire = 0; + var current = 0; + $.each(data.parts, function(i, part) { + fire += (fire * part.limit) + part.fire; + current += (current * part.limit) + part.value; + }); + return data.down ? fire >= current : fire <= current; }; var tick = function() { @@ -56,24 +56,24 @@ } if (!isFired && checkFire(data)) { - var current = 0, - currentStr = '', - n = data.parts.length; - $.each(data.parts, function(i, part) { - current += (current * part.limit) + part.value; + var current = 0, + currentStr = '', + n = data.parts.length; + $.each(data.parts, function(i, part) { + current += (current * part.limit) + part.value; - var digits = part.value + ''; - while (digits.length < part.padding) { - digits = '0' + digits; - } - currentStr += digits; - if (i + 1 < n) { - currentStr += ':'; - } - }); + var digits = part.value + ''; + while (digits.length < part.padding) { + digits = '0' + digits; + } + currentStr += digits; + if (i + 1 < n) { + currentStr += ':'; + } + }); - e.trigger('counterFire', [current, currentStr]); - isFired = true; + e.trigger('counterFire', [current, currentStr]); + isFired = true; } }; @@ -236,7 +236,7 @@ } if (!isFired && checkFire(data)) { - e.trigger("counterFire"); + e.trigger("counterFire"); } e.data('counter', data);