2013-10-31 119 views
0

我有一组分享相同的选项类别)。显示器设置为。当用户点击它们时,将执行以下JavaScript功能,显示器将更改为如何通过JavaScript类来隐藏元素(平滑过渡)?

function hideBlockElementsByClass(className) 
{ 
    var elements = document.getElementsByClassName(className); 
    for(i in elements) 
    { 
     elements[i].style.display = "none"; 
    } 
} 

显示块和none之间的转换非常粗糙,我想进行更平滑的转换。完成此任务的最佳策略是什么?

+3

您可以尝试转换'opacity'属性而不是'display'(并且显然也会相应地更改JS)。 –

+0

你有没有考虑jQuery? – Chango

+0

$('#elements [i] .id')。fadeOut('slow'); –

回答

4

使用CSS3:

.className { 
opacity: 0; 
visibility: hidden; 
-webkit-transition: visibility 0.2s linear, 
opacity 0.2s linear; 
-moz-transition: visibility 0.2s linear, 
opacity 0.2s linear; 
-o-transition: visibility 0.2s linear, 
opacity 0.2s linear; 
} 

.className:hover { 
visibility: visible; 
opacity: 1; 
} 
+0

简单而有效!谢谢。只需要替换元素[i] .style.display =“none”;元素[i] .className + =“className”;并添加到CSS的类,并正常工作。 – MrQ

+0

很高兴帮助:)! –

0

尝试此方法

HTML

<div class = "image" onclick = "eff()"></div> 

CSS

.transition { 
     -moz-transition: 2s width; 
     width: 150px; 
     height: 100px; 

    } 

脚本

function eff() { 
    var k = document.getElementsByClassName("image"); 
    k[0].className = "transition"; 
} 
0

尝试这种在普通的JavaScript:(上IE10将工作,铬,火狐, safari,android,ios)

<script> 
     function hideBlockElementsByClass(className) { 
      var elements = document.getElementsByClassName(className); 
      console.log(elements.length) 
      for (var i = 0; i < elements.length; i++) { 
       (function (a) { 
        elements[a].addEventListener('webkitTransitionEnd', function() { 
         elements[a].style.display = "none"; 
        }, false); 
        elements[a].addEventListener('mozTransitionEnd', function() { 
         elements[a].style.display = "none"; 
        }, false); 
        elements[a].addEventListener('oTransitionEnd', function() { 
         elements[a].style.display = "none"; 
        }, false); 
        elements[a].addEventListener('transitionend', function() { 
         elements[a].style.display = "none"; 
        }, false); 
       })(i); 
       elements[i].style.webkitTransitionDuration = "1s"; 
       elements[i].style.mozTransitionDuration = "1s"; 
       elements[i].style.oTransitionDuration = "1s"; 
       elements[i].style.transitionDuration = "1s"; 
       elements[i].style.opacity = "0"; 
      } 
     } 
    </script> 
0

我的代码:

<a href="javascript:ShowDiv('MyMesage');"> Click here</a> 

<div id="MyMesage" style="display:none;opacity:0; background-color:pink; margin:0 0 0 100px;width:200px;"> 
blablabla 
</div> 

<script> 
function ShowDiv(name){ 
    //duration of transition (1000 miliseconds equals 1 second) 
    var duration = 1000; 
    // how many times should it should be changed in delay duration 
    var AmountOfActions=100; 

    var diiv= document.getElementById(name); 
    diiv.style.display = 'block'; 

    var counte=0; 
    setInterval(function(){ 
     counte ++; if (counte<AmountOfActions) { diiv.style.opacity = counte/AmountOfActions;} 
    }, 
    duration/AmountOfActions); 
} 

</script> 
+0

这肯定不会比CSS更平滑。 – alex