单击显示隐藏的Div

时间:2014-04-23 19:41:32

标签: javascript jquery html css

当我点击相应的div时,我想要显示div,就像点击Google图片搜索结果中的图片一样。分割图像行,并显示新区域。我对javascript的最小知识非常了解:http://codepen.io/anon/pen/fKEgw

它的基础知识是这样的:

document.getElementById("a-section").addEventListener("click", function () {
document.getElementById("a-reveal").style.height = "300px";
document.getElementById("b-reveal").style.height = "0px";
document.getElementById("c-reveal").style.height = "0px";
document.getElementById("d-reveal").style.height = "0px";
document.getElementById("e-reveal").style.height = "0px";
document.getElementById("f-reveal").style.height = "0px";
document.getElementById("g-reveal").style.height = "0px";
document.getElementById("h-reveal").style.height = "0px";
});

如何在不强制设置高度值的情况下获得类似的效果?有没有更好的方法来编写这种类型的东西,所以我没有为移动视图制作重复的div?我应该使用除了javascript以外的东西吗?

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:2)

如果你使用jquery,你可以简单地做,例如

$("#a-reveal").show();

$("#b-reveal").hide();
而不是改变高度。在简单的JavaScript中,这基本上是设置'显示' css属性为'无'隐藏它然后回来(默认是'阻止')。

编辑:

另外,如果你修改html以便div是这样的:

<div id="a-section" class="section" reveal="a-reveal">
....

<div id="a-reveal" class="reveal">

其中reveal包含关联的揭示div的ID,您可以使用以下内容替换所有单独的事件处理程序附加代码:

//attaches event to every div with class "section"
$(".section").click(function(){
    $(".reveal").hide();
    var thisRevealID = $(this).attr("reveal");
    $("#"+thisRevealID).show();
});

可能有一种更简洁的方法来获取相应的揭示div而不是诉诸添加揭示属性,但想法是这样做,这样你就可以根据点击的div确定你需要什么,而代码不知道究竟哪个div点击了。

答案 1 :(得分:0)

我同意,如果项目很大,你可能会更好地使用JQuery,请参阅thogue的优秀答案。如果你想使用普通的Javascript,你当然可以清理一下:

var reveal_func = function(section){
   var arr_a = new array("a-reveal","b-reveal","c-reveal");
   for (var i=0; i<var_a.length; i++){
      if (arr_a[i] === section){
          document.getElementById(arr_a[i]).style.height = "300px";
      }else{
         document.getElementById(arr_a[i]).style.height = "0px";
      }
   }

};

然后

document.getElementById("a-section").addEventListener("click", reveal_func("a-reveal"))
document.getElementById("b-section").addEventListener("click", reveal_func("b-reveal"))

根据需要。