我目前正在用一些动画增强网站。JavaScript - 为什么附加赋值操作符不按预期工作?
我试过这段代码:
// Opacity is 0 in the beginning. Set
// in CSS.
// 1. Parameter: Boolean - true if making the
// element visible; false if making it vanish.
// 2. Parameter: Object
var changeOpacity = function(direction, element) {
var css = element.style;
var goStep = function(signedStep) {
css['opacity'] += signedStep;
changeOpacity(direction, element);
};
if (direction) {
if (css['opacity'] < 1.0) {
setTimeout(function() {
goStep(0.1);
}, timeStep);
}
} else {
if (css['opacity'] >= 0.1) {
setTimeout(function() {
goStep(-0.1);
}, timeStep);
} else {
css['display'] = 'none';
}
}
};
它都没有奏效。
我在代码中写了一些console.logs:“opacity”在赋值后总是保持在0.1。
我的预期是什么:0.0 - 0.1 - 0.2 - 0.3 ...
现在我用这个代码:
// ...
var goStep = function(signedStep) {
css['opacity'] = +css['opacity'] + signedStep;
changeOpacity(direction, element);
};
// ...
工作正常。 但我仍然想知道为什么使用组合赋值加法运算符失败。
有没有人有想法?
CSS值是字符串,比较字符串操作(虽然他们会像数),以数字会给你意想不到的效果。 – Teemu
'css.opacity'的值是一个字符串。因此添加它以连接字符串。如果'signedStep'的值是这样的结果字符串是一个无效的值,分配将被忽略。 “+”的作用是因为在添加到数字之前强制将“css.opacity”强制为一个数字。 –