2014-07-15 1 views
1

onblur를 사용하여 하위 메뉴를 닫으 려합니다. 하위 메뉴를 "숨기"위해 그것을 가지고 있지만, 그냥 그렇게합니다. 메뉴를 원래 상태로 되돌리려합니다. 나는 또한 메뉴에 타임 아웃을 설정하여 5-10 초 후에 닫을 것입니다.onblur 및 setTimeout을 사용하여 하위 메뉴 닫기

피씨 나는 이것을 위해 jsfiddle를 만들려고 노력했지만 기능이 없었다. 또한 모바일 사이트 용입니다.

HTML

<div class="smenu_div""> 
    <ul> 
     <li> 
     <a class="menu-title" href="#" onblur="hidemenu()" onclick="showsub()">Menu</a> 
     <ul id='hiddenMenu'> 
      <li><a href="/mobile/m.index.html">Home</a></li> 
      <li><a href="m.trucks.html">Trucks</a></li> 
      <li><a href="m.equipment.hmtl">Equipment</a></li> 
     </ul> 
     </li> 
    </ul> 
</div> 

CSS

.smenu_div ul 
{ 

    padding:0px; 
    margin-top:5px; 
    margin-right:40px; 
    font-family:georgia; 
    font-size:70px; 
    color:#ffffff; 
    list-style:none; 
    text-indent:15px; 
    text-align:center; 
    width:40%; 
    overflow:hidden; 
    position: relative; 
    display: block; 
    float:right; 
} 

.smenu_div ul li 
{ 

    -webkit-border-radius: 10px; 
    -moz-border-radius: 10px; 
    border-radius: 10px; 
    background: rgba(0,0,0,0); 
    line-height:justified; 
    margin-top: 10px; 
    position:relative; 
} 


/* Changed this so that your hidden menu is hidden by default */ 
.smenu_div li ul 
{ 

    z-index: 50; 
    display: none; 
    position: relative; 
    width: 100%; 
    background: transparent; 
    float:none; 
    } 

.smenu_div ul li a 
{ 
    -webkit-border-radius: 10px; 
    -moz-border-radius: 10px; 
    border-radius: 10px; 
    text-decoration:none; 
    color:#ffffff; 
    background: #000000; 
    display:block; 
    position:relative; 
} 

/* @new */ 
.smenu_div ul li a.menu-title 
{ 
    padding-right: 50px; 
    background: #000000 url('plus.png') no-repeat right center; 
    background-size: 75px 75px; 

} 


.menu-open .smenu_div ul li a.menu-title 
{ 

    background-image: url('minus.png') 
} 

자바 스크립트

var hidden = true; 

    function showsub() { 

     document.getElementById('hiddenMenu').style.display = (hidden) ? 'block' : 'none'; 
     document.body.classList.toggle('menu-open'); 
     hidden = !hidden; 


    }; 

    function hidemenu() { 
     document.getElementById('hiddenMenu').style.display = 'none'; 
     document.body.classList.toggle('plus'); 
     hidden = !hidden; 
    }; 

답변

0

이 jsfiddle을 나누기 때문에 <div class ="smenu_div"">이, 너무 많은 따옴표를 가지고 HTML 코드에서 실수가있다.

당신은 거의 그대로 당신이 코드에서 놓치고있는 모든 showsub에서

setTimeout(hidemenu,10000); 

, 그것은이있다. 사용자가 10 초 후에 닫히지 않게하려면, 사용자가 물건을 계속 누르고 있으면 추가 코드가 필요하지만 사용자가 메뉴를 클릭 한 후 10 초 후에도 괜찮은지 확인하십시오. 승인.

here's the fiddle

+0

좋아요. 알았어. 이제 나는 바이올린을 업데이트하여 내가 원하는 이미지를 볼 수있게되었습니다. 메뉴 외부를 클릭하여 onBlur로 재생하십시오. 플러스로 돌아 가야 할 때 마이너스가 마이너스로 유지되는 것을 볼 수 있습니다. 메뉴를 숨기는 대신 메뉴를 다시로드하는 방법이 있습니까? http://jsfiddle.net/3eBux/2/ – user2631279

+0

괜찮습니다. click 이벤트가 제대로 작동하지만 setTimeout을 사용하면'menu-open'을 제거 할 수 없습니다. 나는 코드를 약간 수정하여'menu-open'의 토글이 당신이하려는 것을 존중하도록합니다. (즉,'hidemenu'에 대한 호출은 항상'menu-open'을 제거하지만'showmenu'는'hidden'에 기반하여 토글합니다) [fiddle] (http://jsfiddle.net/3eBux/3/) – serakfalcon

+0

AWESOME! 내가 필요한 것. 감사. – user2631279