Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 切换显示时的过渡效果:无-显示:块_Javascript_Jquery_Css - Fatal编程技术网

Javascript 切换显示时的过渡效果:无-显示:块

Javascript 切换显示时的过渡效果:无-显示:块,javascript,jquery,css,Javascript,Jquery,Css,我试图在从display:none切换到display:block时添加淡入/淡出效果,反之亦然。这是我的代码: Javascript: function showDiv(idInfo) { var sel = document.getElementById('contentDivs').getElementsByClassName('x'); for (var i=0; i<sel.length; i++) { sel[i].style.display = 'none'; } d

我试图在从display:none切换到display:block时添加淡入/淡出效果,反之亦然。这是我的代码:

Javascript:

function showDiv(idInfo) {
var sel = document.getElementById('contentDivs').getElementsByClassName('x');
for (var i=0; i<sel.length; i++) {
    sel[i].style.display = 'none';
}
document.getElementById('content'+idInfo).style.display = 'block';
}
window.onload = function() {showDiv('1');}
函数showDiv(idInfo){
var sel=document.getElementById('contentDivs').getElementsByClassName('x');

对于(var i=0;i没有现成的方法。有几种方法可以使用CSS3
opacity
属性以稍微不同的方式执行此操作:

首先,添加一个CSS声明,其中添加一个
活动的
类和一个CSS3转换:

#menu ul a {
   opacity: 1;
   -webkit-transition: opacity 1s; /* For Safari 3.1 to 6.0 */
    transition: opacity 1s;
}

#menu ul a.inactive {
   opacity: 0;
   -webkit-transition: opacity 1s; /* For Safari 3.1 to 6.0 */
    transition: opacity 1s;
}
然后,让JavaScript添加
inactive
类。另外,一秒钟后,将
a
更改为
display:none

function showDiv(idInfo) {
    var newId = 'content' + idInfo;
    var sel = document.getElementById('contentDivs').getElementsByClassName('x');
    for (var i=0; i<sel.length; i++) {
        // Fade In all our currently viewable divs
        sel[i].className += 'inactive';
        // If this is NOT our new div, hide after 1 second (transition time)
        if (sel[i].id !== newId)
            setTimeout(function () {
                sel[i].style.display = 'none';
            }, 1000);
        }
    }
    var newEl = document.getElementById(newId);
    // Make sure our new element is being displayed
    newEl.style.display = 'block';
    // Add the `inactive` class in order to make the opacity 0
    newEl.className += 'inactive';
    setTimeout(function () {
        // Remove the `inactive` className in order to trigger the fade in
        newEl.className = '';
    }, 0);
}
window.onload = function() {showDiv('1');}

没有现成的方法可以做到这一点。使用CSS3
opacity
属性,有几种方法可以以稍微不同的方式做到这一点:

首先,添加一个CSS声明,其中添加一个
活动的
类和一个CSS3转换:

#menu ul a {
   opacity: 1;
   -webkit-transition: opacity 1s; /* For Safari 3.1 to 6.0 */
    transition: opacity 1s;
}

#menu ul a.inactive {
   opacity: 0;
   -webkit-transition: opacity 1s; /* For Safari 3.1 to 6.0 */
    transition: opacity 1s;
}
然后,让JavaScript添加
inactive
类。另外,一秒钟后,将
a
更改为
display:none

function showDiv(idInfo) {
    var newId = 'content' + idInfo;
    var sel = document.getElementById('contentDivs').getElementsByClassName('x');
    for (var i=0; i<sel.length; i++) {
        // Fade In all our currently viewable divs
        sel[i].className += 'inactive';
        // If this is NOT our new div, hide after 1 second (transition time)
        if (sel[i].id !== newId)
            setTimeout(function () {
                sel[i].style.display = 'none';
            }, 1000);
        }
    }
    var newEl = document.getElementById(newId);
    // Make sure our new element is being displayed
    newEl.style.display = 'block';
    // Add the `inactive` class in order to make the opacity 0
    newEl.className += 'inactive';
    setTimeout(function () {
        // Remove the `inactive` className in order to trigger the fade in
        newEl.className = '';
    }, 0);
}
window.onload = function() {showDiv('1');}

如果图元的显示和图元的转换在同一帧上开始,则转换将永远不会发生

您必须设置元素的显示,然后执行以下操作

setTimeout(function() {
     // start transition
}, 0);

调用setTimeout 0将导致转换在下一帧发生。

如果元素的显示和元素的转换在同一帧上开始,则转换将永远不会发生

您必须设置元素的显示,然后执行以下操作

setTimeout(function() {
     // start transition
}, 0);

调用setTimeout 0将导致转换在下一帧发生。

循环以毫秒为单位执行,因此您不会看到任何转换。这与循环无关,而是与显示:无到显示:块之间的切换有关。循环在刷新时执行,但在您可以单击按钮更改内容后执行。我希望e当单击另一个按钮时,内容将淡入/淡出。有什么想法吗?循环以毫秒为单位执行,因此您不会看到任何转换。这不是关于循环,而是关于在显示:无到显示:块之间切换。循环在刷新时执行,但在您可以单击按钮更改内容之后执行。我希望内容为fa当点击另一个按钮时输入/输出。有什么想法吗?这是一个完整的答案,尽管您只需要一个设置超时,因为所有设置超时都同时发生。或者更好的是,使用transitionend事件,以便您可以在css中定义转换的长度。1)
#菜单ul a.inactive
中的转换规则是不必要的。2)同时使用CSS转换规则和jQuery淡入淡出功能不是一个好做法3)
显示:无
不透明度:0
不同。我刚才添加了一个编辑。我的意思是这两个解决方案是两个独立的。jQuery解决方案不需要CSS。谢谢第一个选项(非JQuery)不起作用。在我应用它时,所有显示和单击链接也没有任何作用。这是一个完整的答案,尽管您只需要一个设置超时,因为所有设置超时都同时发生。或者更好的是,使用transitionend事件,以便您可以在css中定义转换的长度。1)在
菜单ul a.incat中定义转换规则ive
是不必要的。2)同时使用CSS转换规则和jQuery淡入淡出功能不是一个好的做法3)
display:none
opacity:0
不同。我刚才添加了一个编辑。我的意思是这两个解决方案是两个独立的。jQuery解决方案不需要CSS。感谢您的详细评论。第一个选项是on(非JQuery)不起作用。当我应用它时,所有内容都会显示出来,单击链接也不会起任何作用。