2017-12-15 6 views
0

jQuery 코드를 수정해야 전체 폭 드롭 다운 위로 마우스를 가져 가면 열지 만 열 때 크기가 798px보다 작 으면 드롭 다운은 그대로 유지해야합니다. 클릭하면 열립니다.

.click을 .hover로 변경하려고 시도했지만 성공하지 못했습니다. 이 상태에서 마우스를 올리면 드롭 다운 메뉴가 열리지 만 마우스가 있으면 즉시 닫힙니다.

내 코드 (무료 다운로드)가 아니기 때문에이 문제에 대한 해결책을 다른 사람과 공유하는 것이 좋을 것입니다. JavaScript 프로그래밍에 익숙하지 않습니다. jQuery 클릭 기능이 전체 너비 드롭 다운 메뉴에서 호버에서 변환 된 경우

(function($) { // Begin jQuery 
 
    $(function() { // DOM ready 
 
    // If a link has a dropdown, add sub menu toggle. 
 
    $('nav ul li a:not(:only-child)').click(function(e) { 
 
     $(this).siblings('.nav-dropdown').toggle(); 
 
     // Close one dropdown when selecting another 
 
     $('.nav-dropdown').not($(this).siblings()).hide(); 
 
     e.stopPropagation(); 
 
    }); 
 
    // Clicking away from dropdown will remove the dropdown class 
 
    $('html').click(function() { 
 
     $('.nav-dropdown').hide(); 
 
    }); 
 
    // Toggle open and close nav styles on click 
 
    $('#nav-toggle').click(function() { 
 
     $('nav ul').slideToggle(); 
 
    }); 
 
    // Hamburger to X toggle 
 
    $('#nav-toggle').on('click', function() { 
 
     this.classList.toggle('active'); 
 
    }); 
 
    }); // end DOM ready 
 
})(jQuery); // end jQuery
@charset "UTF-8"; 
 
.navigation { 
 
    height: 70px; 
 
    background: #262626; 
 
} 
 

 
.brand { 
 
    position: absolute; 
 
    padding-left: 20px; 
 
    float: left; 
 
    line-height: 70px; 
 
    text-transform: uppercase; 
 
    font-size: 1.4em; 
 
} 
 

 
.brand a, 
 
.brand a:visited { 
 
    color: #ffffff; 
 
    text-decoration: none; 
 
} 
 

 
.nav-container { 
 
    max-width: 1000px; 
 
    margin: 0 auto; 
 
} 
 

 
nav { 
 
    float: right; 
 
} 
 

 
nav ul { 
 
    list-style: none; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
nav ul li { 
 
    float: left; 
 
    position: relative; 
 
} 
 

 
nav ul li a, 
 
nav ul li a:visited { 
 
    display: block; 
 
    padding: 0 20px; 
 
    line-height: 70px; 
 
    background: #262626; 
 
    color: #ffffff; 
 
    text-decoration: none; 
 
} 
 

 
nav ul li a:hover, 
 
nav ul li a:visited:hover { 
 
    background: #2581DC; 
 
    color: #ffffff; 
 
} 
 

 
nav ul li a:not(:only-child):after, 
 
nav ul li a:visited:not(:only-child):after { 
 
    padding-left: 4px; 
 
    content: ' ▾'; 
 
} 
 

 
nav ul li ul li { 
 
    min-width: 190px; 
 
} 
 

 
nav ul li ul li a { 
 
    padding: 15px; 
 
    line-height: 20px; 
 
} 
 

 
.nav-dropdown { 
 
    position: absolute; 
 
    display: none; 
 
    z-index: 1; 
 
    box-shadow: 0 3px 12px rgba(0, 0, 0, 0.15); 
 
} 
 

 
/* Mobile navigation */ 
 
.nav-mobile { 
 
    display: none; 
 
    position: absolute; 
 
    top: 8px; 
 
    right: 10px; 
 
    background: #262626; 
 
    width: 70px; 
 
} 
 

 
@media only screen and (max-width: 798px) { 
 
    .nav-mobile { 
 
    display: block; 
 
    } 
 
    nav { 
 
    width: 100%; 
 
    padding: 70px 0 15px; 
 
    } 
 
    nav ul { 
 
    display: none; 
 
    } 
 
    nav ul li { 
 
    float: none; 
 
    } 
 
    nav ul li a { 
 
    padding: 15px; 
 
    line-height: 20px; 
 
    } 
 
    nav ul li ul li a { 
 
    padding-left: 30px; 
 
    } 
 
    .nav-dropdown { 
 
    position: static; 
 
    } 
 
} 
 

 
@media screen and (min-width: 799px) { 
 
    .nav-list { 
 
    display: block !important; 
 
    } 
 
} 
 

 
#nav-toggle { 
 
    position: absolute; 
 
    left: 18px; 
 
    top: 22px; 
 
    cursor: pointer; 
 
    padding: 10px 35px 16px 0px; 
 
} 
 

 
#nav-toggle span, 
 
#nav-toggle span:before, 
 
#nav-toggle span:after { 
 
    cursor: pointer; 
 
    border-radius: 1px; 
 
    height: 5px; 
 
    width: 35px; 
 
    background: #ffffff; 
 
    position: absolute; 
 
    display: block; 
 
    content: ''; 
 
    transition: all 300ms ease-in-out; 
 
} 
 

 
#nav-toggle span:before { 
 
    top: -10px; 
 
} 
 

 
#nav-toggle span:after { 
 
    bottom: -10px; 
 
} 
 

 
#nav-toggle.active span { 
 
    background-color: transparent; 
 
} 
 

 
#nav-toggle.active span:before, #nav-toggle.active span:after { 
 
    top: 0; 
 
} 
 

 
#nav-toggle.active span:before { 
 
    transform: rotate(45deg); 
 
} 
 

 
#nav-toggle.active span:after { 
 
    transform: rotate(-45deg); 
 
} 
 

 
article { 
 
    max-width: 1000px; 
 
    margin: 0 auto; 
 
    padding: 10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<section class="navigation"> 
 
    <div class="nav-container"> 
 
    <div class="brand"> 
 
     <a href="#!">Logo</a> 
 
    </div> 
 
    <nav> 
 
     <div class="nav-mobile"><a id="nav-toggle" href="#!"><span></span></a></div> 
 
     <ul class="nav-list"> 
 
     <li> 
 
      <a href="#!">Home</a> 
 
     </li> 
 
     <li> 
 
      <a href="#!">About</a> 
 
     </li> 
 
     <li> 
 
      <a href="#!">Services</a> 
 
      <ul class="nav-dropdown"> 
 
      <li> 
 
       <a href="#!">Web Design</a> 
 
      </li> 
 
      <li> 
 
       <a href="#!">Web Development</a> 
 
      </li> 
 
      <li> 
 
       <a href="#!">Graphic Design</a> 
 
      </li> 
 
      </ul> 
 
     </li> 
 
     <li> 
 
      <a href="#!">Pricing</a> 
 
     </li> 
 
     <li> 
 
      <a href="#!">Portfolio</a> 
 
      <ul class="nav-dropdown"> 
 
      <li> 
 
       <a href="#!">Web Design</a> 
 
      </li> 
 
      <li> 
 
       <a href="#!">Web Development</a> 
 
      </li> 
 
      <li> 
 
       <a href="#!">Graphic Design</a> 
 
      </li> 
 
      </ul> 
 
     </li> 
 
     <li> 
 
      <a href="#!">Contact</a> 
 
     </li> 
 
     </ul> 
 
    </nav> 
 
    </div> 
 
</section>

+1

무료로 일을 사람들에게 물어 충분한 이유가되지 않습니다. [so]는 무료 코딩 서비스를 제공하는 것이 아니라 더 나은 프로그래머로 만들기위한 것입니다. 당신이 배우러 왔고, 일을 끝내지 못했다면, 당신이 시도한 것을 나누십시오. 우리는 그것을 고치고 개선하는 방법을 알려 드리겠습니다. –

답변

1

가 방금 neede 청취자를 찾아 화면 너비를 관리하는 경우를 만들기 위해 도움이되기를 바랍니다 CP, 감사합니다.

필요하다면 더 기쁘게 할 수 있습니다. 제공 해줘서 기쁩니다. 당신이 작성하지 않은 스크립트에 개조를 필요로

(function($) { // Begin jQuery 
 
    $(function() { // DOM ready 
 
    if ($(window).width() < 798) { 
 
     // If a link has a dropdown, add sub menu toggle. 
 
     $('nav ul li a:not(:only-child)').click(function(e) { 
 
     $(this).siblings('.nav-dropdown').toggle(); 
 
     // Close one dropdown when selecting another 
 
     $('.nav-dropdown').not($(this).siblings()).hide(); 
 
     e.stopPropagation(); 
 
     }); 
 
    } else { 
 
     $('nav ul li a').hover(function(e) { 
 
     $(this).siblings('.nav-dropdown').toggle(); 
 
     // Close one dropdown when selecting another 
 
     $('.nav-dropdown').not($(this).siblings()).hide(); 
 
     e.stopPropagation(); 
 
     }); 
 
    } 
 
    // Clicking away from dropdown will remove the dropdown class 
 
    $('html').click(function() { 
 
     $('.nav-dropdown').hide(); 
 
    }); 
 
    // Toggle open and close nav styles on click 
 
    $('#nav-toggle').click(function() { 
 
     $('nav ul').slideToggle(); 
 
    }); 
 
    // Hamburger to X toggle 
 
    $('#nav-toggle').on('click', function() { 
 
     this.classList.toggle('active'); 
 
    }); 
 
    }); // end DOM ready 
 
})(jQuery); // end jQuery 
 

 
$(window).resize(function() { 
 
    location.reload(); 
 
});
@charset "UTF-8"; 
 
.navigation { 
 
    height: 70px; 
 
    background: #262626; 
 
} 
 

 
.brand { 
 
    position: absolute; 
 
    padding-left: 20px; 
 
    float: left; 
 
    line-height: 70px; 
 
    text-transform: uppercase; 
 
    font-size: 1.4em; 
 
} 
 

 
.brand a, 
 
.brand a:visited { 
 
    color: #ffffff; 
 
    text-decoration: none; 
 
} 
 

 
.nav-container { 
 
    max-width: 1000px; 
 
    margin: 0 auto; 
 
} 
 

 
nav { 
 
    float: right; 
 
} 
 

 
nav ul { 
 
    list-style: none; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
nav ul li { 
 
    float: left; 
 
    position: relative; 
 
} 
 

 
nav ul li a, 
 
nav ul li a:visited { 
 
    display: block; 
 
    padding: 0 20px; 
 
    line-height: 70px; 
 
    background: #262626; 
 
    color: #ffffff; 
 
    text-decoration: none; 
 
} 
 

 
nav ul li a:hover, 
 
nav ul li a:visited:hover { 
 
    background: #2581DC; 
 
    color: #ffffff; 
 
} 
 

 
nav ul li a:not(:only-child):after, 
 
nav ul li a:visited:not(:only-child):after { 
 
    padding-left: 4px; 
 
    content: ' ▾'; 
 
} 
 

 
nav ul li ul li { 
 
    min-width: 190px; 
 
} 
 

 
nav ul li ul li a { 
 
    padding: 15px; 
 
    line-height: 20px; 
 
} 
 

 
.nav-dropdown { 
 
    position: absolute; 
 
    display: none; 
 
    z-index: 1; 
 
    box-shadow: 0 3px 12px rgba(0, 0, 0, 0.15); 
 
} 
 

 

 
/* Mobile navigation */ 
 

 
.nav-mobile { 
 
    display: none; 
 
    position: absolute; 
 
    top: 8px; 
 
    right: 10px; 
 
    background: #262626; 
 
    width: 70px; 
 
} 
 

 
@media only screen and (max-width: 798px) { 
 
    .nav-mobile { 
 
    display: block; 
 
    } 
 
    nav { 
 
    width: 100%; 
 
    padding: 70px 0 15px; 
 
    } 
 
    nav ul { 
 
    display: none; 
 
    } 
 
    nav ul li { 
 
    float: none; 
 
    } 
 
    nav ul li a { 
 
    padding: 15px; 
 
    line-height: 20px; 
 
    } 
 
    nav ul li ul li a { 
 
    padding-left: 30px; 
 
    } 
 
    .nav-dropdown { 
 
    position: static; 
 
    } 
 
} 
 

 
@media screen and (min-width: 799px) { 
 
    .nav-list { 
 
    display: block !important; 
 
    } 
 
} 
 

 
#nav-toggle { 
 
    position: absolute; 
 
    left: 18px; 
 
    top: 22px; 
 
    cursor: pointer; 
 
    padding: 10px 35px 16px 0px; 
 
} 
 

 
#nav-toggle span, 
 
#nav-toggle span:before, 
 
#nav-toggle span:after { 
 
    cursor: pointer; 
 
    border-radius: 1px; 
 
    height: 5px; 
 
    width: 35px; 
 
    background: #ffffff; 
 
    position: absolute; 
 
    display: block; 
 
    content: ''; 
 
    transition: all 300ms ease-in-out; 
 
} 
 

 
#nav-toggle span:before { 
 
    top: -10px; 
 
} 
 

 
#nav-toggle span:after { 
 
    bottom: -10px; 
 
} 
 

 
#nav-toggle.active span { 
 
    background-color: transparent; 
 
} 
 

 
#nav-toggle.active span:before, 
 
#nav-toggle.active span:after { 
 
    top: 0; 
 
} 
 

 
#nav-toggle.active span:before { 
 
    transform: rotate(45deg); 
 
} 
 

 
#nav-toggle.active span:after { 
 
    transform: rotate(-45deg); 
 
} 
 

 
article { 
 
    max-width: 1000px; 
 
    margin: 0 auto; 
 
    padding: 10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<section class="navigation"> 
 
    <div class="nav-container"> 
 
    <div class="brand"> 
 
     <a href="#!">Logo</a> 
 
    </div> 
 
    <nav> 
 
     <div class="nav-mobile"><a id="nav-toggle" href="#!"><span></span></a></div> 
 
     <ul class="nav-list"> 
 
     <li> 
 
      <a href="#!">Home</a> 
 
     </li> 
 
     <li> 
 
      <a href="#!">About</a> 
 
     </li> 
 
     <li> 
 
      <a href="#!">Services</a> 
 
      <ul class="nav-dropdown"> 
 
      <li> 
 
       <a href="#!">Web Design</a> 
 
      </li> 
 
      <li> 
 
       <a href="#!">Web Development</a> 
 
      </li> 
 
      <li> 
 
       <a href="#!">Graphic Design</a> 
 
      </li> 
 
      </ul> 
 
     </li> 
 
     <li> 
 
      <a href="#!">Pricing</a> 
 
     </li> 
 
     <li> 
 
      <a href="#!">Portfolio</a> 
 
      <ul class="nav-dropdown"> 
 
      <li> 
 
       <a href="#!">Web Design</a> 
 
      </li> 
 
      <li> 
 
       <a href="#!">Web Development</a> 
 
      </li> 
 
      <li> 
 
       <a href="#!">Graphic Design</a> 
 
      </li> 
 
      </ul> 
 
     </li> 
 
     <li> 
 
      <a href="#!">Contact</a> 
 
     </li> 
 
     </ul> 
 
    </nav> 
 
    </div> 
 
</section>

+0

작동하지 않습니다. 이미 미디어 쿼리 조건부 함수에 포함 된 것을 제외하고 시도해 보았습니다. 크기가 798px 미만인 경우 클릭해야하며 마우스를 올리면 안됩니다. 클릭하면 메뉴가 제대로 열리지 만 목록이 여전히 호버에서 열립니다. – catapultedplastic

+0

원하는 것을 모릅니다. 당신이 그것을 명확하게 설명 할 수 있다면, ican help –

+0

브라우저 너비가 798px 이상일 때, 그 위에 올려 놓음으로써 하위 메뉴를 열어야 만합니다. 그러나 너비가 798px보다 작거나 같을 때, 하위 메뉴를 클릭하여 열어야합니다. 또 다른 문제는 .click을 .hover 함수로 변경할 때 마우스가 드롭 다운의 사각형 밖으로 나온 후 하위 메뉴가 즉시 사라지는 것입니다. 희망이 도움이됩니다. 나의 나쁜 설명에 대해 사과 해주십시오. – catapultedplastic

관련 문제