最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

js+css在交互上的应用_javascript技巧

来源:动视网 责编:小采 时间:2020-11-27 20:54:14
文档

js+css在交互上的应用_javascript技巧

js+css在交互上的应用_javascript技巧:但灵活应用CSS会有给人眼前一亮的感觉! 以下用一个简单的例子来阐述我想说的。 CSS代码: 代码如下: #nav li ul { display:none; } HTML代码: 代码如下: 菜单1 子菜单1 子菜单2 子菜单3 子菜单4 菜单2 子菜单1 子菜单2 子菜单3
推荐度:
导读js+css在交互上的应用_javascript技巧:但灵活应用CSS会有给人眼前一亮的感觉! 以下用一个简单的例子来阐述我想说的。 CSS代码: 代码如下: #nav li ul { display:none; } HTML代码: 代码如下: 菜单1 子菜单1 子菜单2 子菜单3 子菜单4 菜单2 子菜单1 子菜单2 子菜单3


但灵活应用CSS会有给人眼前一亮的感觉!

以下用一个简单的例子来阐述我想说的。

CSS代码:
代码如下:
#nav li ul {
display:none;
}

HTML代码:
代码如下:



  • 菜单1



  • 子菜单1

  • 子菜单2

  • 子菜单3

  • 子菜单4




  • 菜单2



  • 子菜单1

  • 子菜单2

  • 子菜单3

  • 子菜单4

  • 子菜单4






  • 效果如下:

    需要的效果是:

    1、初始时,所有的子菜单都是隐藏的。

    2、点击菜单项,相应的子菜单列表显示。

    3、再点击, 子菜单隐藏。

    半年前的我的做法会是这样:取得#nav中的h3元素,循环在其上添加事件。事件判断其下一个兄弟节点是否隐藏,根据状态修改子菜单ul元素的display属性。

    代码大致如下:(以下所有代码仅用于表达逻辑,请不要纠结于是否可执行。)
    代码如下:
    var els = [...]; //代码取得h3元素数组。
    for(var i=0; i < els.length; i++) {
      els[i].addEventListener("click",function() {
        var target = this.nextSibling;
        if(target.style.display == "none")
          target.style.display = "block";
        else
          target.style.display = "none"
      }, false);
    }

    一个月前的话,做法大概是这样:在#nav > ul上直接添加事件,在事件中判断目标对象是否h3对象。如果是则取得下一个兄弟节点,并根据其显示状态来修改display属性。
    代码大致如下:
    代码如下:
    var container = document.getElementById("nav");
    container.addEventListener("click", function(e) {
      var target = e.target, list;
      if(target.tagName == "H3") {
        list = target.nextSibling;
        if(list.style.display === "none")
          list.style.display = "block";
        else
          list.style.display = "none";
      }
    }, false);

    两种做法,孰优孰劣请自行判断。
    前段时间做了一个需求,在代码中看到另外的一种思路——这才是我在这里要说的——利用CSS来完成交互。
    依然是代码:
    CSS代码:
    代码如下:
    #nav li.menu ul {
    display:block;
    }

    JS代码大致如下:
    代码如下:
    var el = document.getElementById("nav");
    el.addEventListener("click", function(e) {
      var target = e.target.parentNode;
      if(target.tagName == "LI") {
        if(target.className == "")
          target.className = "menu";
        }else {
          target.className = "";
        }
      }
    }, false);

    看看代码,貌似第三种方法跟第二种差不多嘛。
    恩~~,如果点击h3元素不止是修改下一个ul元素的显示状态,比如还要修改h3的背景图案呢?
    这时候第二个方法需要在根据h3的background属性来修改值,而第三种只需要添加一条样式:#nav li.menu h3{background:url(...)}即可了。

    其他的就没什么好说了。大家都有自己的判断,孰优孰劣心里自有评断。

    PS:
    如果一个页面存在别的样式表影响了你的样式,就会有个优先权的问题。我们都知道id,class和tag的优先级别,但是对一个表达式,它的优先权是怎么计算的呢?
    请google一下,或者先看看《老调重弹的CSS优先级》。

    文档

    js+css在交互上的应用_javascript技巧

    js+css在交互上的应用_javascript技巧:但灵活应用CSS会有给人眼前一亮的感觉! 以下用一个简单的例子来阐述我想说的。 CSS代码: 代码如下: #nav li ul { display:none; } HTML代码: 代码如下: 菜单1 子菜单1 子菜单2 子菜单3 子菜单4 菜单2 子菜单1 子菜单2 子菜单3
    推荐度:
    标签: js javascript css
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top