《任務(wù)5 DOM操作-切換狀態(tài)》任務(wù)產(chǎn)出匯總

<h1>QQ面板切換效果</h1>

div如下

Screenshot from 2017-04-04 21-09-25.png
  <div class="bottomDiv">

            <div class="btn" style="float: left"></div>
            <div>
                <div id="loginState" class="login-state-trigger login-state-trigger2 login-state" title="選擇在線狀態(tài)">
                    <div id="loginStateShow" class="login-state-show online">狀態(tài)</div>
                    <div class="login-state-down">下</div>
                    <div class="login-state-txt" id="login2qq_state_txt">在線</div>
       <ul id="loginStatePanel" class="statePanel login-state" style="display: none">
        <li id="online" class="statePanel_li">
            <div class="stateSelect_icon online"></div>
            <div class="stateSelect_text">我在線上</div>
        </li>
        <li id="callme" class="statePanel_li">
            <div class="stateSelect_icon callme"></div>
            <div class="stateSelect_text">Q我吧</div>
        </li>
        <li id="away" class="statePanel_li">
            <div class="stateSelect_icon away"></div>
            <div class="stateSelect_text">離開</div>
        </li>
        <li id="busy" class="statePanel_li">
            <div class="stateSelect_icon busy"></div>
            <div class="stateSelect_text">忙碌</div>
        </li>
        <li id="silent" class="statePanel_li">
            <div class="stateSelect_icon silent"></div>
            <div class="stateSelect_text">請(qǐng)勿打擾</div>
        </li>
        <li id="hidden" class="statePanel_li">
            <div class="stateSelect_icon hidden"></div>
            <div class="stateSelect_text">隱身</div>
        </li>
    </ul>
                </div>
    
            </div>

        </div>

    </div>

觀察這個(gè)div,我們?cè)谶@個(gè)狀態(tài)列表里面給每個(gè)li狀態(tài)都定義了一個(gè)id,當(dāng)我們點(diǎn)下"在線"時(shí),就會(huì)在id為loginStateshow中把他的class變成online,其他狀態(tài)以此類推.我知道你可能還沒有明白,現(xiàn)在我們看看js代碼吧.

首先我們要給loginStateshow綁一個(gè)事件,所以先獲取他的id,

var login State=document.getElementById('loginState')

接下來事這個(gè)ul,我們開始讓這個(gè)ul隱藏,點(diǎn)擊的時(shí)候出來.所以也要獲取他的id,

stateList=document.getElementById('loginStatePanel'),

這個(gè)列表取出來以后,我們鼠標(biāo)劃過列表的時(shí)候,還有點(diǎn)擊的時(shí)候,都是在li上操作,所以li也要被取出來.

lis=stateList.getElementsByTagName('li'),

當(dāng)我們選擇狀態(tài)的時(shí)候的時(shí)候,我們點(diǎn)擊選擇他,然后顯示的狀態(tài)應(yīng)該是他的文字顯示,比如'忙碌',所以我們也要得到他的狀態(tài)文本的id

stateTxt=document.getElementById('login2qq_state_txt'),

看起來該獲取的id也都的到了,現(xiàn)在我們來看看事件

首先是鼠標(biāo)點(diǎn)擊將整個(gè)ul顯示出來

loginState.onclick=function(e){
     e = e || window.event;
     //
     if(e.stopPropagation){
          e.stopPropagation();
     }else{
          e.cancelBubble=true;
     }//阻止事件冒泡
     stateList.style.display='block';
   }

接下來鼠標(biāo)劃過,點(diǎn)擊,離開的事件

for(var i=0,l=lis.length;i<l;i++){
      lis[i].onmouseover=function(){
        this.style.background='#567';
      }//鼠標(biāo)劃過事件,背景變灰
      lis[i].onmouseout=function(){
        this.style.background='#FFF';
      }//鼠標(biāo)厲害事件,背景變白
      lis[i].onclick=function(e){
        e = e || window.event;
        if(e.stopPropagation){
          e.stopPropagation();
        }else{
          e.cancelBubble=true;
        }//我們?cè)邳c(diǎn)擊的時(shí)候要組織事件冒泡.
        //鼠標(biāo)點(diǎn)擊事件,事件是把選中的li里面的文本得到,放到顯示的div中,點(diǎn)擊之后面板還要隱藏.
        是因?yàn)槟泓c(diǎn)div的時(shí)候讓他顯示列表,點(diǎn)li的時(shí)候又讓他隱藏,可是你點(diǎn)擊li的時(shí)候事件就會(huì)冒泡到ul,就會(huì)冒泡到div,所以就不會(huì)隱藏.
        var id=this.id;
        //將點(diǎn)擊的id取出來
        stateList.style.display='none';
       //點(diǎn)擊之后隱藏列表 stateTxt.innerHTML=getByClass('stateSelect_text',id)[0].innerHTML;
        //改變內(nèi)容
        改變內(nèi)容的時(shí)候還得把選中的classname給顯示的面板div
        loginStateShow.className='';
        loginStateShow.className='login-state-show '+id;
      }
   }

之后我們需要的功能是,在點(diǎn)開列表的情況下,我們?cè)邳c(diǎn)擊空白處的時(shí)候隱藏列表,就需要在document上幫一個(gè)事件

document.onclick=function(){
      stateList.style.display='none';
   }
}

最后我們來總結(jié)一下:

首先,在沒有操作的時(shí)候我們需要列表時(shí)隱藏的,我們選擇點(diǎn)擊的時(shí)候顯示ul,鼠標(biāo)劃過的時(shí)候放到背景顏色改變,將文本內(nèi)容放到顯示的div,然后狀態(tài)完成改變.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 第5章 菜單、按鈕及導(dǎo)航 一、下拉菜單 小伙伴們注意,在Bootstrap框架中的下拉菜單組件是一個(gè)獨(dú)立的組件,根...
    凜0_0閱讀 5,065評(píng)論 0 66
  • <a name='html'>HTML</a> Doctype作用?標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別? (1)、<...
    clark124閱讀 3,567評(píng)論 1 19
  • 請(qǐng)參看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon閱讀 7,186評(píng)論 2 19
  • 尼采說: 人類出生時(shí)已經(jīng)生活在監(jiān)獄里,監(jiān)獄的圍墻是自己的目光最遠(yuǎn)處。 1 我的媽媽是個(gè)家庭主婦。 她每天5:30起...
    樂活雅閱讀 325評(píng)論 9 4
  • 《全城熱戀》中,房祖名扮演的“騎士”與baby扮演的公主相約,騎士得在公主的城堡下等100天,公主才愿意嫁給他。騎...
    閑潭夢(mèng)落花閱讀 2,772評(píng)論 1 1