为什么JavaScript中的淡出功能会失败?

为什么JavaScript中的淡出功能会失败?,javascript,Javascript,它不起作用。出了什么问题?我知道这不是您想要的答案,但如果您在项目中实际使用此选项,则需要注意以下几点: 您仅设置不透明度动画–请记住,当您到达这一行时,IE: this.style.opacity = ".90"; opacity是字符串“.90”不是对元素的style属性的opacity属性的引用 从函数返回并不会取消间隔,为此需要clearInterval var opacity = this.style.opacity; 此外,“完全不透明度”为1,“无”为0。您每次都将其减少s,

它不起作用。出了什么问题?

我知道这不是您想要的答案,但如果您在项目中实际使用此选项,则需要注意以下几点:


  • 您仅设置不透明度动画–请记住,当您到达这一行时,IE:

    this.style.opacity = ".90";
    
    opacity
    是字符串
    “.90”
    不是对元素的
    style
    属性的
    opacity
    属性的引用

    从函数返回并不会取消间隔,为此需要
    clearInterval

    var opacity = this.style.opacity;
    
    此外,“完全不透明度”为1,“无”为0。您每次都将其减少
    s
    ,并且
    s
    被定义为
    5
    。由于您从下降到
    .9
    开始,您的意思可能是:

    function fadeOut(r, s) {
        var self = this;
        if (!self instanceof Element) return false;
        self.style.opacity = ".90";
        var t = setInterval(function() {
            if (!r) r = 500;
            self.style.opacity = self.style.opacity - s;
            if (self.style.opacity == ".0") {
                clearInterval(t);    
            }
        }, r);
    };
    

    不透明度从0.9开始。然后在每个间隔上减去5。这意味着,第一次运行间隔时,您将尝试将不透明度设置为字符串“-4.1”,该字符串将无法解析为有效的不透明度值,因此该设置将被忽略。然后你绕圈子。你是说0.05而不是5?还是回调函数中的s/100

    这段代码有很多错误

    首先,CSS属性是字符串,因此不透明度添加行应该是:

    var d = document.getElementById("box");
    
    function fadeOut(r, s) {
        if (!this instanceof Element) return false;
        this.style.opacity = ".90";
        var opacity = this.style.opacity;
        var t = setInterval(function() {
            if (!r) r = 500;
            opacity = (opacity) - s;
            if (opacity == ".0") return;
        }, r); };
    
    fadeOut.apply(d, [100, 5]);
    
    不透明度转换为整数,然后加负0.05,然后使用
    +''

    其次,如果(!r)r=500,
    应在匿名函数外部定义

    你应该:

    opacity = parseInt(opacity) - 0.05 + '';
    

    它从0到100。

    我想说,使用jQuery。生命对于重新发明轮子来说太短了。想想跨浏览器的可移植性……我真的很想知道如何在不使用框架的情况下自己做到这一点。如果你知道答案,那会有帮助的。
     fadeOut.apply(d, [100, .1]);
    
    var d = document.getElementById("box");
    
    function fadeOut(r, s) {
        if (!this instanceof Element) return false;
        this.style.opacity = ".90";
        var opacity = this.style.opacity;
        var t = setInterval(function() {
            if (!r) r = 500;
            opacity = (opacity) - s;
            if (opacity == ".0") return;
        }, r); };
    
    fadeOut.apply(d, [100, 5]);
    
    opacity = parseInt(opacity) - 0.05 + '';
    
    var d = document.getElementById("box");
    
    function fadeOut(fadeScaler, hertz) {
        if (!this instanceof Element) return false;
        hertz = (!hertz) ? 60 : hertz; // Approx 60 hertz refresh rate
    
        var opacity = this.style.opacity
            opacity = ".9";
    
        var t = setInterval(
           function() {
             opacity = parseInt(opacity) - fadeScaler + '';
    
             if (parseInt(opacity) <= 0) 
               clearInterval(t);
           },
           Math.floor(1000 / hertz)); // 1000 miliseconds / hertz = refresh rate
    };
    
    fadeOut.apply(d, [.05]);
    
    this.filters.alpha.opacity=100