JavaScript:不透明度应该降低到0,然后变为负值
JavaScript: Opacity should reduce to 0 and then become negative
我有一个javaScript函数
JavaScript:function opacZero(object){
var presentOpacity = (object.style.opacity);
object.style.opacity =presentOpacity-0.2;
setTimeout( function(){opacZero(object)}, 40);
}
现在,当我传递一些对象到这个函数,它的不透明度应该减少到0,并超过0(因为我没有清除超时任何地方)。但这并没有发生。不透明度降低到0.20000000000000007,不再降低。但是当我减去0.3(或更大)而不是0.2时,它就得到了想要的结果。但是为什么不使用小于0.2的数字呢?我不知道为什么会这样。帮助请
这是由于Javascript处理浮点数的方式。看看这个问题,你会得到一些关于如何解决这个问题的建议。
编辑
这里有一个绕过它的方法:
function opacZero(object){
var presentOpacity = Math.floor(object.style.opacity * 10);
object.style.opacity = (presentOpacity - 2) / 10;
setTimeout( function(){opacZero(object)}, 40);
}
这是一个可能的工作:
function opacZero(object){
curOpac = curOpac < 0.1 ? 0 : curOpac - 0.2;
object.style.opacity = curOpac;
setTimeout( function(){
opacZero(object)
}, 400);
console.log( curOpac );
}
var test = document.getElementById( 'test' ),
curOpac = 1;
test.style.opacity = 1;
opacZero( test );
http://jsfiddle.net/daCrosby/bhTNC/1/似乎更直接一些,只是检查麻烦的小值,并强制它们到0
。也可能是一个好主意,停止计时器一旦你击中0
:
function opacZero(object){
var newOpacity = object.style.opacity - 0.2;
if (newOpacity < 0.2) {
newOpacity = 0;
}
object.style.opacity = newOpacity;
if (newOpacity !== 0) {
setTimeout(function(){opacZero(object)}, 40);
}
}
工作演示:http://jsfiddle.net/jfriend00/8qkFN/
或者,如果你想要更简短的内容:
function opacZero(object){
object.style.opacity = object.style.opacity < 0.4 ? 0 : object.style.opacity - 0.2;
if (object.style.opacity != 0) {
setTimeout(function(){opacZero(object)}, 40);
}
}
相关文章:
- 如何更改文本框控件的不透明度值
- 在js中访问元素时不透明度和样式未定义,但在css中定义
- Greenstock不透明度动画从0到1再返回
- 如何在html画布上替换ByImage()而不是drawImage()(忽略不透明度)
- 设置1400个Raphael.js对象的不透明度动画会影响动画性能
- 选中复选框时降低父级的不透明度
- 更改alphaMap不透明度不会更新(THRE.JS R76)
- 如何在页面向下滚动时获得图像以获得不透明度
- 在Materialize设计中删除转盘图像的不透明度
- 如何删除javascript中的不透明度
- 如何使用javascript在rgba中获取不透明度参数
- 如何在悬停时更改高图的不透明度
- 更改整个类的不透明度元素
- 具有不透明度和类似模态行为的向导
- 选择选项可更改图像的不透明度
- jQuery淡入淡出/动画不透明度到不同的显示类型,然后阻止
- 如何使用画布更改图像的不透明度,然后将其加载到画布中的另一个图像上?-HTML
- jQuery将鼠标悬停在“不透明度”上,然后单击“保持不透明度”
- CSS过渡不透明度不工作的元素有display:none,然后改变为display:block
- JavaScript:不透明度应该降低到0,然后变为负值