>웹 프론트엔드 >JS 튜토리얼 >jquery_jquery에서 mouseleave와 mouseout의 차이점을 설명하는 예

jquery_jquery에서 mouseleave와 mouseout의 차이점을 설명하는 예

WBOY
WBOY원래의
2016-05-16 15:15:241149검색

본 글에서는 jQuery에서 mouseleave와 mouseout의 차이점을 자세히 소개하고, 참고하실 수 있도록 공유합니다
많은 사람들이 jQuery를 사용하여 마우스 호버 효과를 구현할 때 일반적으로 mouseover 및 mouseout 이벤트를 사용합니다. 구현 과정에서 일부 바람직하지 않은 상황이 발생할 수 있습니다.
먼저 마우스아웃 사용의 효과를 살펴보겠습니다.

<p>先看下使用mouseout的效果:</p>
<div id="container" style="width: 300px;">
<div id="title" style="cursor: pointer; background: #ccc;">使用了mouseout事件↓</div>
<div id="list" style="display: none; position: absolute; background:#fff; border: 1px solid #ccc; width: 298px;">
<div>第一行</div>
<div>第二行</div>
<div>第三行</div>
</div>
</div>
<p><script type='text/javascript'> 
jQuery(document).ready(function($) { 
   $("#title").mouseover(function() { 
     var offset = $(this).offset(); 
     $("#list").css({left: offset.left, top: offset.top+19}).show(); 
   }); 
   $("#container").mouseout(function() { 
     $("#list").hide(); 
   }); 
 }); 
</script>

Line 1, Line 2, Line 3 우리는 mouseout 이벤트를 사용할 때 드롭다운 컨테이너 #list에서 마우스가 움직이자마자 hide()가 트리거되는 것을 발견했습니다. 이는 실제로 mouseout 이벤트가 발생하기 때문입니다. 즉, 이벤트는 컨테이너의 하위 요소에 동시에 바인딩될 수 있으므로 마우스가 각 하위 요소 밖으로 이동할 때 hide()가 트리거됩니다.
jQuery 1.3부터 ​​mouseenter와 mouseleave라는 두 가지 새로운 마우스 이벤트가 추가되었습니다. mouseout 이벤트와 달리 mouseleave 이벤트는 마우스 포인터가 선택한 요소를 떠날 때만 트리거됩니다.
mouseleave 이벤트의 효과를 살펴보겠습니다.

<div id="container2" style="width: 300px;">
<div id="title2" style="cursor: pointer; background: #ccc;">使用了mouseleave事件↓</div>
<div id="list2" style="display: none; position: absolute; background:#fff; border: 1px solid #ccc; width: 298px;">
<div>第一行</div>
<div>第二行</div>
<div>第三行</div>
</div>
</div>
<script type='text/javascript'> 
jQuery(document).ready(function($) { 
   $("#title2").mouseover(function() { 
     var offset = $(this).offset(); 
     $("#list2").css({left: offset.left, top: offset.top+19}).show(); 
   }); 
   // 绑定mouseleave事件,效果很好 
   $("#container2").mouseleave(function() { 
     $("#list2").hide(); 
   }); 
 }); 
</script>
<p>

첫 번째 줄, 두 번째 줄, 세 번째 줄 mouseleave 및 mouseout 이벤트는 이벤트 버블링이 특정 시간에 매우 유용하기 때문에 각기 다른 용도로 사용됩니다.
div 마우스아웃 이벤트 버블링 문제 해결
해결책은 jquery의 바인드 메소드를 사용하는 것입니다
예: 이제 마우스 이벤트를 모니터링해야 하는 div 개체가 있습니다.

<div class="dpx2"><div class="dpx2_px" style="cursor:pointer;" id="searchSort">请选择排序方式↓</div>
      <div class="dpx2_px_xl" id="sortList" style="display:none;position:absolute;z-index:5;">
        <div><a class="sortA">按时间升序↑</a></div>
        <div><a class="sortA">按时间降序↓</a></div>
        <div><a class="sortA">按评论数量升序↑</a></div>
        <div><a class="sortA">按评论数量降序↓</a></div>
        <div><a class="sortA">按点击数升序↑</a></div>
        <div><a class="sortA">按点击数降序↓</a></div>
      </div>
    </div>

ID가 searchSort인 Div 위로 마우스를 이동하면 다음 div가 표시됩니다. 마우스가 아래 div 밖으로 나가면 div를 숨깁니다
JS는:

 $(function(){
         var sortList = $("#sortList");
      $("#searchSort").mouseover(function() {
         var offset = $(this).offset();
        sortList.css("left", offset.left);
        sortList.css("top", offset.top+20);
        sortList.show();
      });
//关键的一句,绑定Div对象的mouseleave事件
      sortList.bind("mouseleave", function() {
        $(this).hide();
      });
    });

위 설명에 따라 드롭다운 효과를 시뮬레이션합니다.
1. 마우스 포인터가 선택한 요소 또는 하위 요소를 벗어나는지 여부에 관계없이 mouseout 이벤트가 트리거됩니다.

2. mouseleave 이벤트는 마우스 포인터가 선택한 요소를 벗어날 때만 트리거됩니다.

<div class="sel_box">
  <input type="button" value="请选择所属部门" id="sel_dept" />
  <div class="hide" id="sel_dept_sh" style="display: none;">
    <p>
      <font>深圳市公司 </font>
    </p>
    <p>
      <font>集团管理层 </font>
    </p>
  </div>
</div>
 
<script type="text/javascript">
$(".sel_box").click(function(event){
   if(event.target.id == 'sel_dept'){
     $("#sel_dept_sh").show(); //显示下拉框
     $("#sel_dept_sh p font").click(function(){
       $("#sel_dept").val('');
       var text = $(this).text();
      // alert(text);
       $("#sel_dept").val(text).css("color","#000");
       $("#sel_dept_sh").hide();
     });
 
   }else{
     $("#sel_dept_sh").hide();
   }
   
 
});
 
$(".sel_box").bind("mouseleave",function(){//用mouseleave就实现了模仿下拉框的效果
    $(this).find(".hide").hide();  
  });
 
$(".sel_box").bind("mouseout",function(){//而mouseout则不行,什么时候都会触发
    $(this).find(".hide").hide();  
  });
</script>

위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.