Heim  >  Artikel  >  Web-Frontend  >  Teilen Sie den Unterschied zwischen Mouseout und Mouseleave in JQuery Event W

Teilen Sie den Unterschied zwischen Mouseout und Mouseleave in JQuery Event W

黄舟
黄舟Original
2017-06-28 11:04:58976Durchsuche

In diesem Artikel wird hauptsächlich der Unterschied zwischen Mouseleave und Mouseout in jQuery ausführlich anhand von Beispielen erläutert und der Dropdown-Box-Effekt nachgeahmt. Interessierte Freunde können sich darauf beziehen.

In diesem Artikel wird der Unterschied zwischen Mouseleave und Mouseout ausführlich vorgestellt Der Unterschied zwischen Mouseout und Mouseout wird Ihnen als Referenz mitgeteilt. Der spezifische Inhalt ist wie folgt:
Wenn viele Leute jQuery verwenden, um den Mouseover-Effekt zu erzielen, verwenden sie im Allgemeinen die Ereignisse Mouseover und Mouseout. Während des Implementierungsprozesses können einige unerwünschte Situationen auftreten.
Sehen wir uns zunächst den Effekt der Verwendung von Mouseout an:

<p>先看下使用mouseout的效果:</p>
<p id="container" style="width: 300px;">
<p id="title" style="cursor: pointer; background: #ccc;">使用了mouseout事件↓</p>
<p id="list" style="display: none; position: absolute; background:#fff; border: 1px solid #ccc; width: 298px;">
<p>第一行</p>
<p>第二行</p>
<p>第三行</p>
</p>
</p>
<p><script type=&#39;text/javascript&#39;> 
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>

Erste Zeile, zweite Zeile, dritte Zeile Wir haben festgestellt, dass bei Verwendung des Mouseout-Ereignisses die Maus ausgelöst wird, sobald sich die Maus bewegt im Dropdown-Container #list. hide() liegt tatsächlich daran, dass das Mouseout-Ereignis in die Luft sprudelt, das heißt, das Ereignis kann gleichzeitig an die untergeordneten Elemente des Containers gebunden sein, sodass unser hide() ausgelöst wird, wenn Die Maus bewegt sich aus jedem untergeordneten Element heraus.
Seit jQuery 1.3 wurden zwei neue Mausereignisse hinzugefügt, Mouseenter und Mouseleave. Im Gegensatz zum Mouseout-Ereignis wird das Mouseleave-Ereignis nur ausgelöst, wenn der Mauszeiger das ausgewählte Element verlässt.
Werfen wir einen Blick auf die Wirkung des Mouseleave-Ereignisses:


<p id="container2" style="width: 300px;">
<p id="title2" style="cursor: pointer; background: #ccc;">使用了mouseleave事件↓</p>
<p id="list2" style="display: none; position: absolute; background:#fff; border: 1px solid #ccc; width: 298px;">
<p>第一行</p>
<p>第二行</p>
<p>第三行</p>
</p>
</p>
<script type=&#39;text/javascript&#39;> 
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>

Die erste Zeile, die zweite Zeile, die dritte Zeile, das Mouseleave und Mouseout-Ereignisse haben ihre eigenen Verwendungszwecke.
Um das Problem des P-Mouseout-Ereignis-Bubblings zu lösen
Die Lösung besteht darin, die Bindungsmethode von jquery zu verwenden
Zum Beispiel: Jetzt da ist ein p-Objekt, das sein Mausereignis überwachen muss


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

Wenn sich die Maus mit ID searchSort zum p bewegt, wird das folgende p angezeigt. Wenn sich die Maus aus dem p unten bewegt, ist das versteckte p
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();
      });
//关键的一句,绑定p对象的mouseleave事件
      sortList.bind("mouseleave", function() {
        $(this).hide();
      });
    });

Simulieren Sie gemäß der obigen Erklärung das Drop- Down-Effekt:
1 . Das Mouseout-Ereignis wird unabhängig davon ausgelöst, ob der Mauszeiger das ausgewählte Element oder ein untergeordnetes Element verlässt.

2. Das Mouseleave-Ereignis wird nur ausgelöst, wenn der Mauszeiger das ausgewählte Element verlässt.


<p class="sel_box">
  <input type="button" value="请选择所属部门" id="sel_dept" />
  <p class="hide" id="sel_dept_sh" style="display: none;">
    <p>
      <font>深圳市公司 </font>
    </p>
    <p>
      <font>集团管理层 </font>
    </p>
  </p>
</p>
 
<script type="text/javascript">
$(".sel_box").click(function(event){
   if(event.target.id == &#39;sel_dept&#39;){
     $("#sel_dept_sh").show(); //显示下拉框
     $("#sel_dept_sh p font").click(function(){
       $("#sel_dept").val(&#39;&#39;);
       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>

Das obige ist der detaillierte Inhalt vonTeilen Sie den Unterschied zwischen Mouseout und Mouseleave in JQuery Event W. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn