0
  fadeIn:function(speed,till){
          speed = speed !== undefined ? speed : 400;
          speed = typeof speed === 'number'  ? speed : speed == "slow" ? 600 : speed == "fast" ? 200 : speed !== 'slow' || speed!== 'fast' ? 400 : 400;
          var opc = window.getComputedStyle(this[0]).opacity;
          var element = this[0];
          var add = 100 / speed;
          till = till !== undefined ? till : 1;
          element.style.display="block";
          var timer = (function  a() {
           if (opc >= till ){         
            element.style.opacity = 1;              
            clearInterval(timer);
            return false;
            }
            if(browser[3] == 'MSIE' && Number(browser[4]) < 9 ){
            add = 10000 / speed;
            element.style.filter = 'alpha(opacity="' + (opc+ add) + '")';
            }
            element.style.opacity = opc;
            opc = opc + add; // code here where addition starts
            setTimeout(a, 50);
          })(); 
    },

上記の関数は、コースを正しく実行しません。JavaScript は浮動小数を正しく追加しないためです。ということで、いろいろな方法を試した...

 opc = (opc * 100) + (add * 100) / 100;

また、これにより10進数が得られるため、ハックを試みましたが、実際には何があっても整数が得られます。

 opc = "."+parseInt((opc * 100) + (add * 100) / 100,10);

上記の何が問題なのかは、文字列に変わり、うまくいかないことだと思いますが。したがって、問題は、これが非常に必要であるため、小数をどのようにインクリメントするかです。

  0.001 - 0.002 - 0.003 - 0.004 etc 
4

1 に答える 1

1

JavaScript は浮動小数点数を正常に追加しています。
おそらくオペランドの 1 つが浮動小数点数ではありません。

JS の本からの引用: JavaScript には単一の数値型があります。内部的には、Java の double と同じ 64 ビット浮動小数点として表されます。他のほとんどのプログラミング言語とは異なり、別個の整数型がないため、1 と 1.0 は同じ値です。

コードをデバッグしてから、どの値が文字列であるか (または数値ではないか) を確認し、parseFloat関数を使用してそれらを解析します。

于 2014-01-16T00:10:41.557 に答える