外部访问Jquery插件函数
我是jquery的新手,有一些基本的了解。
我正在尝试使用 jOdometer.js https://github.com/jesucarr/jodometer 。我可以很好地获取里程表,并且默认的 setInterval 方法使里程表滴答作响。
有一段代码
function advanceCounter() {
setNumbers(counter);
counter = counter + settings.increment; // increment the number
// if we reach the end clear the interval and use the ending number
if(settings.counterEnd != false && counter >= settings.counterEnd){
clearInterval(counterInterval);
setNumbers(settings.counterEnd);
}
}
// to move the colums from one number position to another
function setNumbers(counter){
digits = String(counter).split('.'); // check decimals
// if we where using decimals
if (decimalsArray.length > 0){
// for each decimal digit, update the old digit position to the new
for (i=0;i<decimalsArray.length;i++){
oldDigit = decimalsArray[i];
// the new numer could have not decimal part, but we need it anyway
if (digits[1]){
decimalsArray[i] = digits[1].charAt(i);
}
if (decimalsArray[i] == ''){
decimalsArray[i] = '0';
}
updatePosition($('.jodometer_decimal_'+i, scope), parseInt(decimalsArray[i]), parseInt(oldDigit));
}
}
integers = digits[0];
j=integers.length-1;
// for each integer digit, update the old digit position to the new
for (i=0;i<integersArray.length;i++){
oldDigit = integersArray[i];
integersArray[i] = integers.charAt(j);
if (integersArray[i] == ''){
integersArray[i] = '0';
}
//alert($(this));
updatePosition($('.jodometer_integer_'+i, scope), parseInt(integersArray[i]), parseInt(oldDigit));
j--;
}
}
// changes the column position from one number to another
function updatePosition(col, newDigit, oldDigit){
if(newDigit != oldDigit){
col.stop();
// if the number is 0 use the bottom 0 in the image, and change intantly to the top 0
if (newDigit == 0){
col.animate({top: (10*settings.heightNumber*-1)+zeroSet}, settings.speed, settings.easing).animate({top: zeroSet},1, 'linear');
}else{
// if the new number is lower than the old, we have to go to the bottom 0 and start from the top 0, with the apropiate speed, to don't note the jump
if (newDigit < oldDigit){
col.animate({top: (10*settings.heightNumber*-1)+zeroSet}, settings.speed*((10-oldDigit)/10), 'linear').animate({top: zeroSet},1, 'linear').animate({top: (newDigit*settings.heightNumber*-1)+zeroSet}, settings.speed*oldDigit/10, settings.easing);
}else{
col.animate({top: (newDigit*settings.heightNumber*-1)+zeroSet}, settings.speed, settings.easing);
}
}
}
}
会更新里程表。我正在使用 ajax 来获取新数据,并且我想更新里程表读数。如何从网页调用 advanceCounter()
或 setNumbers()
来更新里程表?
帮助。
这是实际插件的演示(来自作者本人)。 http://www.frontendmatters.com/demos/jodometer/
I am new to jquery, with some basic understanding.
I am trying to use the jOdometer.js https://github.com/jesucarr/jodometer . I can get the odometer well and good, and the default setInterval method makes the odometer tick.
There is a section of the code
function advanceCounter() {
setNumbers(counter);
counter = counter + settings.increment; // increment the number
// if we reach the end clear the interval and use the ending number
if(settings.counterEnd != false && counter >= settings.counterEnd){
clearInterval(counterInterval);
setNumbers(settings.counterEnd);
}
}
// to move the colums from one number position to another
function setNumbers(counter){
digits = String(counter).split('.'); // check decimals
// if we where using decimals
if (decimalsArray.length > 0){
// for each decimal digit, update the old digit position to the new
for (i=0;i<decimalsArray.length;i++){
oldDigit = decimalsArray[i];
// the new numer could have not decimal part, but we need it anyway
if (digits[1]){
decimalsArray[i] = digits[1].charAt(i);
}
if (decimalsArray[i] == ''){
decimalsArray[i] = '0';
}
updatePosition($('.jodometer_decimal_'+i, scope), parseInt(decimalsArray[i]), parseInt(oldDigit));
}
}
integers = digits[0];
j=integers.length-1;
// for each integer digit, update the old digit position to the new
for (i=0;i<integersArray.length;i++){
oldDigit = integersArray[i];
integersArray[i] = integers.charAt(j);
if (integersArray[i] == ''){
integersArray[i] = '0';
}
//alert($(this));
updatePosition($('.jodometer_integer_'+i, scope), parseInt(integersArray[i]), parseInt(oldDigit));
j--;
}
}
// changes the column position from one number to another
function updatePosition(col, newDigit, oldDigit){
if(newDigit != oldDigit){
col.stop();
// if the number is 0 use the bottom 0 in the image, and change intantly to the top 0
if (newDigit == 0){
col.animate({top: (10*settings.heightNumber*-1)+zeroSet}, settings.speed, settings.easing).animate({top: zeroSet},1, 'linear');
}else{
// if the new number is lower than the old, we have to go to the bottom 0 and start from the top 0, with the apropiate speed, to don't note the jump
if (newDigit < oldDigit){
col.animate({top: (10*settings.heightNumber*-1)+zeroSet}, settings.speed*((10-oldDigit)/10), 'linear').animate({top: zeroSet},1, 'linear').animate({top: (newDigit*settings.heightNumber*-1)+zeroSet}, settings.speed*oldDigit/10, settings.easing);
}else{
col.animate({top: (newDigit*settings.heightNumber*-1)+zeroSet}, settings.speed, settings.easing);
}
}
}
}
which updates the odometer. I am using ajax to get new data, and I want to update the odometer readings. How can I call advanceCounter()
or setNumbers()
from my webpage, to update the odometer?
Help.
Here is a demo of the actual plugin (from the author himself). http://www.frontendmatters.com/demos/jodometer/
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
看起来您可以在获得如下新数据时设置它:我不确定您希望增量是多少(如果有的话),但这应该可以解决问题。
更新:
这是带有内置动画的。
打开 jquery.jodometer.js 文件。
查看第 100 行(函数“advanceCounter()”正下方)并添加以下内容:
现在您可以通过执行以下操作来增加计数器:
更新 2:
我只使用一个计数器进行测试。 aVC指出,只有最后一个初始化的计数器会受到影响。
以下是我解决此问题的方法:
将 setNumbers 函数替换为:
我添加了另一个参数“elem”,该参数将在我们之前添加的 Advance 函数中传递。只需将 $.fn.Advance 函数更改为:
最后,我发现由于某种原因,我需要从 updatePosition 函数中删除 if 语句。这个 if 语句可以判断您是否试图告诉它“更改”为相同的数字。它会崩溃,因为它检查了错误的计数器设置。如果这很重要,我们可以解决这个问题,但我只是决定将其注释掉:P
It looks like you could just set it when you get new data like this:I'm not sure what you would want the increment to be, if any, but this should do the trick.
Update:
Here it is with the built-in animation.
Open up your jquery.jodometer.js file.
Look at line 100 (right below the function 'advanceCounter()') and add this:
Now you can increment the counter by doing:
Update 2:
I was only testing with one counter. aVC pointed out that only the last counter initialized will be affected.
Here's how I worked around that:
Replace the setNumbers function with this:
I added another parameter "elem" which will be passed in the Advance function we added earlier. Just need to change the $.fn.Advance function to this:
Finally, I found that for some reason I needed to remove an if statement from the updatePosition function. This if statement figures out if you're trying to tell it to 'change' to the same number. It breaks because it checks the wrong counter's settings. We could work around this if it's important, but I just decided to comment it out :P
删除旧计数器并将其替换为一个新元素,您可以在该元素上调用
jodometer
插件:更新
要以动画方式显示内容的更改,您可以执行以下操作:
请注意,我添加了
style=在将新元素添加到 DOM 之前,对新元素添加“display:none;”
,这样您就可以fadeIn()
该元素。Remove the old counter and replace it with a new element on which you can call the
jodometer
plugin:Update
To animate the change of content you can do something like this:
Note that I added
style="display:none;"
to the new element before adding it to the DOM, this way you canfadeIn()
the element.