如何防止jQuery使用科学记数法-jQuery.animate()函数中的 1.2e + 07 而不是 12,000,000 ?
使用:$('body').css({ backgroundPositionX: 12000000 + 'px' });
转换为: background-position-x: 1.2e+07px;
所需结果: background-position-x: 12000000px;
一旦数字达到100万(1,000,000),这种情况就会开始发生:
这又导致我的应用程序表现异常。我想要纯净,简单的整数-这些科学废话都不是!我环顾四周,但找不到与jQuery库相关的任何内容。只有纯JS函数。
注1:不仅是动画,而且还有$ .css()。我认为其他jQuery函数也类似。
注2:我不认为是浏览器来执行此操作,因为如果我手动输入该值,则在您达到通常的最大32位整数之前,它都可以正常工作
为什么会出现问题:
12000321 转换为: 1.20003e + 07
然后将 1.20003e + 07 转换回整数时,我得到: 12000300
进入“科学计数法”时,步长为100秒而不是1秒,而且不够具体。
感谢您考虑我的问题
答案 0 :(得分:0)
哇...花了我很长时间,但我终于设法找到一种方法。
经过大量测试,我注意到将直接字符串传递给$ .attr()并没有将数字转换为科学计数法。
我创建了一个自定义动画,并将样式属性手动设置为字符串。
似乎可以正常工作并且以一位数而不是100s的速度增长!
$({
x: this.x,
y: this.y
}).animate({
x: x,
y: y
}, {
easing: this.motion_type,
duration: this.duration,
step: function(now, fx) {
var current_styles = $('.area').attr('style'),
current_styles = string = current_styles.split(" ");
var x = parseFloat(current_styles[1].replace('px', '').replace(';', ''));
var y = parseFloat(current_styles[2].replace('px', '').replace(';', ''));
if ('x' === fx.prop) {
x = now;
} else if ('y' === fx.prop) {
y = now;
}
$('.area').attr({ style: 'background-position: ' + x + 'px ' + y + 'px;' });
},
complete: function() {
t.stopNow();
}
});