Javascript 切换显示时的过渡效果:无-显示:块
我试图在从display:none切换到display:block时添加淡入/淡出效果,反之亦然。这是我的代码: 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
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没有现成的方法。有几种方法可以使用CSS3opacity
属性以稍微不同的方式执行此操作:
首先,添加一个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');}
没有现成的方法可以做到这一点。使用CSS3opacity
属性,有几种方法可以以稍微不同的方式做到这一点:
首先,添加一个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)不起作用。当我应用它时,所有内容都会显示出来,单击链接也不会起任何作用。