jquery:如何在悬停在一个元素上时为多个元素设置动画?

时间:2017-04-05 21:12:55

标签: javascript jquery html css

我有以下HTML代码。

<div id="table1"></div>
  <script>
    var arr = [
    ["s1","s2","s3"],
    ["sk1","sk2","sk3"],
    ["skl1","skl2"]
    ];
    table_generator("table1", arr);
  </script>

现在要将表添加到此div,我有以下javascript代码。

<script>
      function table_generator(body_table_name, s_array) {

        var body_table = document.getElementById(body_table_name);

        //Create table section
        var table = document.createElement("TABLE");
        table.setAttribute("id", "table_"+body_table_name);

        //Append to body div
        body_table.appendChild(table);

        //Add rows
        var row_length = s_array.length;
        for(var i = 0; i <row_length;  i++)
        {
           row(s_array[i], "row"+i, "table_"+body_table_name);
        }

        assign_height_width_hover_effects();
    }
</script>

要在表格中添加行,我有这个javascript函数

<script>
  function row(td_array, row_name, table_name) {
    //Create row
    var tr = document.createElement("TR");
    tr.setAttribute("id", "tr_"+row_name);
    document.getElementById(table_name).appendChild(tr);

    //Create the tds
    for(var i = 0; i<td_array.length; i++)
    {
      var td = document.createElement("TD");
      td.setAttribute("id", "td_"+td_array[i]);
      tr.appendChild(td);

      //Add td styling
      td.style.transition = "all 0.5s ease-in-out";

      //Add text to cell
      var name = document.createElement("SPAN");
      name.setAttribute("id", "name_"+td_array[i]);
      name.innerHTML = td_array[i];
      td.appendChild(name);

      //Add skill info
      var info = document.createElement("SPAN");
      info.setAttribute("id", "info_"+td_array[i]);
      info.innerHTML = "Some info here";
      name.appendChild(info);

      //Add styling to this info
      info.style.position = "absolute";
      info.style.width = "inherit";
      info.style.height = "inherit";
      info.style.overflow = "hidden";
      info.style.opacity = 0;
      info.style.transition = "all 1s ease-in-out 0.4s";
      info.style.transform = "scale(0)";

      //Calculate cell width
      var width = (td.clientWidth + 1);
      if (width > max_width)
      {
        max_width = width;
      }

      //Push it in array
      main_array.push(td_array[i]);
    }
  }
</script>

最后,为了给表格单元格增加高度和宽度并添加悬停效果,我调用以下函数

<script>
  function assign_height_width_hover_effects() {
    //Assigh height and width to all cells in that row
    for(var i = 0; i<main_array.length; i++)
    {
      var td = document.getElementById("td_"+main_array[i]);
      var name = document.getElementById("name_"+main_array[i]);
      var info = document.getElementById("info_"+main_array[i]);

      //Add styling to td
      td.style.width = max_width+"px";
      td.style.height = max_width+"px";
      td.style.textAlign = "center";    
      td.style.boxShadow = "rgb(0, 0, 0) 0px 0px 0px 0px inset";

      //Here is where I need help
      $(td).hover(
        function(){
          $(this).stop().animate({boxShadow: '0 0 '+max_width+'px'}, 'fast');
          //$(this).stop().animate({"opacity": 0});
        }, 
        function(){
          $(this).stop().animate({boxShadow: '0 0 0'}, 'fast');
          //$(this).stop().animate({"opacity": 1});
    }
    );
    }
  }
</script>

基本上我想要的是动画以下内容:

  • 当鼠标进入td表格单元格时:

    • td单元格的框阴影,以设置为某种颜色的动画
    • id为“name”的span元素在td单元格内消失,我使用不透明度0来做到这一点。
    • 带有id“info”的span元素在td单元格中出现,我使用不透明度1来做到这一点。
  • 当鼠标离开td表格单元格时:

    • td单元格的框阴影动画恢复正常。那就是离开
    • id为“name”的span元素在td单元格内部显示回来,我使用不透明度1来执行此操作。
    • 并且id为“info”的span元素在td单元格中消失,我使用不透明度0来做到这一点。

现在我可以单独设置框阴影的动画,或者淡入淡出名称元素,但不能同时显示两者。

1 个答案:

答案 0 :(得分:0)

只需使用css

,您就可以轻松完成这项工作

&#13;
&#13;
td {
  transition: box-shadow 1s ease 0s;
  box-shadow: 5px 5px 5px #000;
  padding: 20px;
}

td:hover {
  box-shadow: 5px 5px 5px #f00;
}

td .name {
  transition: opacity 1s ease 0s;
  opacity: 1;
}

td:hover .name {
  opacity: 0;
}

td .info {
  transition: opacity 1s ease 0s;
  opacity: 0;
}

td:hover .info {
  opacity: 1;
}
&#13;
<table>
  <tbody>
    <tr>
      <td>1-1</td>
      <td>1-2</td>
      <td>1-3</td>
    </tr>
    <tr>
      <td>2-1</td>
      <td>2-2</td>
      <td>2-3</td>
    </tr>
  </tbody>
</table>
&#13;
&#13;
&#13;

我确实将名称和信息的选择器更改为类而不是ID,因为ID应该是唯一的。

注意:这是一个简单的例子。您需要在td之前添加另一个特定的选择器,因为它不会适用于您网页/网站上的每个表格。